SQLite.Swift выдает ошибку 14 при подключении

У меня есть процедура, в которой пользователь выбирает расположение файла, а затем я пытаюсь создать файл в этом месте.

Сначала я прошу пользователя выбрать путь к файлу следующим образом:

    func ChooseCreateDBPath() -> String
    {
        var path : String = ""

        let savePanel = NSSavePanel()
        savePanel.canCreateDirectories = true
        savePanel.showsTagField = true
        savePanel.nameFieldStringValue = "imported.sqlite"
        if (savePanel.runModal() == NSApplication.ModalResponse.OK) {
            let result = savePanel.url
            if (result != nil) {
                path = result!.path
            }
        }

        return path
    }

Получив строку пути, по которому будет создана БД, запускается следующая процедура.

        do {
            self.dbConn = try Connection(strFilePath)
            self.update_ui(message: "Created database: \(strFilePath)\n")
        } catch {
            self.update_ui(message: "Failed to create database : \(error)\n")
        }

.... кажется, это не проблема. Я даже вижу, что файл sqlite появляется в выбранном месте.

Теперь я пытаюсь создать таблицу и поля....

        do {
            let leads  = Table("leads")
            let idlead = Expression<Int64>("idlead")
            let email = Expression<String>("email")

            try self.dbConn!.run(leads.create { t in
                t.column(idlead, primaryKey: true)
                t.column(email)
                }
            )

            try self.dbConn!.run(leads.createIndex(email))

        } catch {
            self.update_ui(message: "Failed to create tables and indexes : \(error)\n")
        }

Затем это дает мне: «Не удалось создать таблицы и индексы: невозможно открыть файл базы данных (код: 14)»

Чего я не понимаю, так это того, как он может создать файл, но не сможет с ним работать? Любые указатели будут высоко оценены.

Ваше здоровье

Джейс


person Jason Coulls    schedule 29.11.2019    source источник
comment
Если вы можете включить расширенные коды ошибок (я не знаю, как это сделать быстро), вы можете получить больше информации. Или отобразить полное сообщение об ошибке, а не только код (опять же, не знаю, как это сделать быстро...)   -  person Shawn    schedule 29.11.2019
comment
Я понятия не имею, поможет ли это, но попробуйте использовать префикс sqlite3 для вашего файла базы данных. Кроме того, вы можете получить клиент с графическим интерфейсом для SQLite и посмотреть, сможете ли вы подключиться к файлу вручную.   -  person Joakim Danielson    schedule 29.11.2019
comment
@JoakimDanielson - Полученный файл, похоже, открывается в стороннем клиенте с графическим интерфейсом. Как и ожидалось, он лишен таблиц.... но открывается.   -  person Jason Coulls    schedule 02.12.2019


Ответы (1)


Я нашел проблему. Песочница macOS не любит, когда у вас есть файлы за пределами песочницы. Несмотря на то, что пользователь может выбрать файл, это не дает SQLite права записывать туда файлы временного журнала, и поэтому все терпит неудачу. Мое исправление заключалось в том, чтобы просто отключить Песочницу.

person Jason Coulls    schedule 11.12.2019