Разбирался с этим вопросом для себя, поэтому такие подробные комментарии. Возможно, это поможет кому-нибудь, кто будет знакомиться с базами данных с нуля.
Сделал экспорт значений в массив import_data.i(10000) из БД index_DB.sqlite
Вопрос - если в отладчике работает, значит ли это что ошибок нет?
Код:
; PureBasic 5.11
; Сохранение значений массива в базе данных SQLite.
; Это файл создан на основе примера mirashic
; https://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)