Разбирался с этим вопросом для себя, поэтому такие подробные комментарии. Возможно, это поможет кому-нибудь, кто будет знакомиться с базами данных с нуля.
Сделал экспорт значений в массив import_data.i(10000) из БД index_DB.sqlite
Вопрос - если в отладчике работает, значит ли это что ошибок нет?
Код:
; PureBasic 5.11 ; Сохранение значений массива в базе данных SQLite. ; Это файл создан на основе примера mirashic ; http://purebasic.mybb.ru/viewtopic.php?id=138#p4318 ; Что делал? ; 1. создал файл базы данных index_DB.sqlite ; 2. открываем файл базы данных index_DB.sqlite ; 3. в случае ошибки открытия файла БД выводим сообщение об ошибке ; 4. создаем таблицу с полями: ; ; id_index_troika ; идентификатор ; poriadk_nomer ; порядковый номер ; sluzhebn_mass_0 ; служебный массив нулевой ; ; 5. заполняем массивы значениями с помощью процедуры ; начиная с x=1 до x=4 ; poriadk_nomer(x)=x+1 ; sluzhebn_mass_0(x) = x*2-1 UseSQLiteDatabase() ; Инициализируем среду баз данных SQLite psSQLRequest.s ; объявляем строковые переменные psSQLRequest1.s ;{ создаем файл базы данных index_DB.sqlite (будет создан автоматически в папке с этим файлом кода) If FileSize("index_DB.sqlite") < 0 ; если размер файла index_DB.sqlite меньше нуля, plFile = CreateFile(#PB_Any, "index_DB.sqlite") ; то создаем такой файл и результат создания (0 или 1?) ; присваиваем переменной plFile, If plFile ; далее если значение plFile не равно 0 , (что свидетельствует об успешном CloseFile(plFile) ; создании файла), то закрываем файл EndIf EndIf ;} ;открываем файл БД с контролем ошибки и создаем таблицу glDBSQLite = OpenDatabase(#PB_Any, "index_DB.sqlite", "", "", #PB_Database_SQLite) ;{ создаем таблицу If glDBSQLite = 0 MessageRequester("Открываем файл БД", DatabaseError()) End ; присваиваем результат выполнения команды OpenDatabase переменной, далее если результат - ложь ; то выводим сообщение об ошибке командой DatabaseError() и заканчиваем работу программы ; далее в переменную psSQLRequest записывается с помощью команд SQL инструкция о создании ; таблицы index_perebor с полями ; id_index_troika ; poriadk_nomer ; sluzhebn_mass_0 INTEGER ElseIf plFile psSQLRequest1 = "CREATE TABLE IF NOT EXISTS index_perebor (" psSQLRequest1+ "id_index_troika INTEGER PRIMARY KEY AUTOINCREMENT Not NULL, " psSQLRequest1 + "poriadk_nomer INTEGER, " psSQLRequest1 + "sluzhebn_mass_0 INTEGER " psSQLRequest1 + ")" ; Debug psSQLRequest ; DatabaseUpdate(#Database, Request$) - выполняет SQL запрос Request$ к БД #Database. If DatabaseUpdate(glDBSQLite, psSQLRequest1) = 0 MessageRequester("Создание таблицы", DatabaseError()) EndIf EndIf ;} Dim nomer_vse.i(10000) Dim proba0.i(10000) ;{ заполняем в цикле таблицу БД index_perebor значениями массива For x=0 To 4 nomer_vse(x)=x+1 proba0(x)=x*2-1 psSQLRequest = "INSERT INTO index_perebor " psSQLRequest + "( poriadk_nomer, sluzhebn_mass_0)" psSQLRequest + "VALUES (" psSQLRequest + "" +nomer_vse(x)+", " psSQLRequest + ""+proba0(x)+"" psSQLRequest + ")" ;Debug psSQLRequest If DatabaseUpdate(glDBSQLite, psSQLRequest) = 0 MessageRequester("Внесение значений в БД", DatabaseError()) EndIf Next x ;} Dim import_data.i(10000) ; массив для извлечения данных из БД ; передача значений из БД в приготовленный массив If DatabaseQuery(glDBSQLite , "SELECT * FROM index_perebor") ; Получить все записи в таблице «index_perebor» While NextDatabaseRow(glDBSQLite) ; Loop for each records ; Петля для каждой записи x= GetDatabaseLong(glDBSQLite , 1) ; первый столбец дает номер элемента массива import_data.i(x) = GetDatabaseLong(glDBSQLite , 2) ; присваиваем элементу массиву содержимое второго поля (столбца) Wend FinishDatabaseQuery(glDBSQLite) EndIf For x=0 To 10 Debug import_data.i(x) ; проверяем массив для извлечения данных из БД Next x ; ; Внимание - при неоднократном выполнении F5 происходит дополнение базы данных ; генерируемыми значениями. Корректный результат получаем при однократном ; заполнении БД, после чего часть кода где выполняется заполнение ; надо закомментировать.
Отредактировано Opitim (05.03.2015 05:01:57)