PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Сохранение значений массива в Базе Данных SQLite.


Сохранение значений массива в Базе Данных SQLite.

Сообщений 1 страница 2 из 2

1

Разбирался с этим вопросом для себя, поэтому такие подробные комментарии. Возможно, это поможет кому-нибудь, кто будет знакомиться с базами данных с нуля.
Сделал экспорт значений в массив 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)

+1

2

Вот ещё нашёл в тему.
Оказывается через PureBasic можно получить доступ не только к SQLite, MySQL или PostgreSQL.

Используя Open DataBase Connectivity (ODBC) — унифицированный интерфейс доступа к базам данных, можно гибко управлять работой  из клиентстких приложений различными БД - Oracle, Access, MSSQL, ...или любой тип базы данных ...
Особенно интригует "...или любой тип базы данных ...".
Получается, на PureBasic можно написать клиентское приложение под очень многие типы БД. Во как!

Создание источника данных ODBC (подключение к БД, или регистрация БД) просто и доступно:
http://sobrs.ru/index.php/web-/dreamweaver-mx/5786.html

+1


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Сохранение значений массива в Базе Данных SQLite.