Advertisement
AZJIO

SQLite_example

Apr 24th, 2012
1,282
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
AutoIt 23.08 KB | None | 0 0
  1. ; Пример подготовил AZJIO
  2. ; http://pastebin.com/v6g3RQig
  3.  
  4. #include <ButtonConstants.au3>
  5. #include <ListViewConstants.au3>
  6. #include <SQLite.au3>
  7. #include <SQLite.dll.au3>
  8. #include <Array.au3>
  9. #include <ComboConstants.au3>
  10. #NoTrayIcon
  11.  
  12. $sHelp = _
  13. '1. Если пример не запускается, проверте что файл "AutoIt3\Include\SQLite.dll.au3" не пустой (~2 Мб) в бетках может быть пустым.' & @CRLF& _
  14. '2. При первом запуске жмём "Сгенерировать" - создаётся файл базы и заполняется таблица. В дальнейшем можно "Открыть" файл-базы.' & @CRLF& _
  15. '3. Можете создавать новые таблицы, введя имя и нажать "Сгенерировать".' & @CRLF& _
  16. '4. При поиске указывайте имя столбца, в котором искать. Достаточно указать часть текста для поиска' & @CRLF& _
  17. '5. Для чтения или удаления строки базы указывайте текст ячейки полностью.' & @CRLF& _
  18. 'Ссылки:' & @CRLF& _
  19. 'http://sb-money.ru/sqlite.php?page=21' & @CRLF& _
  20. 'http://sb-money.ru/sqlite.php?page=6' & @CRLF& _
  21. 'FAQ, Здесь в 15 пункте сказано, что вы можете использовать SQLite в коммерческих проектах.'
  22.  
  23.  
  24. Global $Msg, $hQuery, $aRow
  25. Global $a, $b, $c
  26. Global $sRes, $mem = 0
  27.  
  28. ; Имя таблицы и ячеек
  29. Global $sNameTable = 'TestTable', $ID1 = '№', $ID2 = 'ФИО', $ID3 = 'Дата'
  30. FileChangeDir(@ScriptDir) ; устанавливает текущий каталог
  31.  
  32. $SQLite_Data_Path = 'SQLite.db'
  33. _SQLite_Startup() ; загрузка SQLite.dll в память (2мб)
  34. $hGui = GUICreate('SQLite пример', 850, 413)
  35. GUISetBkColor(0xECE9D8) ; цвет фона программы
  36. $StatusBar = GUICtrlCreateLabel('Строка состояния', 480, 413-17, 370, 17)
  37. $iListView = GUICtrlCreateListView($ID1 & '|' & $ID2 & '|' & $ID3, 2, 2, 466, 409) ; $LVS_SORTASCENDING
  38.  
  39.  
  40.  
  41. $iMemory = GUICtrlCreateCheckbox('База в памяти', 660, 340, 100, 17)
  42. GUICtrlCreateLabel('Имя таблицы', 487, 371, 70, 23)
  43. $TableCombo = GUICtrlCreateCombo('', 560, 369, 90, 23)
  44. GUICtrlSetTip(-1, 'Все имена таблиц в базе')
  45. $Create = GUICtrlCreateButton('Сгенерировать', 660, 365, 98, 28)
  46. GUICtrlSetTip(-1, 'Сгенерировать тестовую базу')
  47.  
  48. $Open = GUICtrlCreateButton('Открыть', 770, 365, 67, 28)
  49. GUICtrlSetTip(-1, 'Открыть или создать базу из файла')
  50.  
  51. GUICtrlCreateGroup('Добавляем эти данные в базу', 487, 10, 350, 100)
  52. GUICtrlCreateLabel($ID1, 500, 37, 40, 23)
  53. GUICtrlCreateLabel($ID2, 500, 58, 40, 23)
  54. GUICtrlCreateLabel($ID3, 500, 83, 40, 23)
  55. $ID1_Input1 = GUICtrlCreateInput('', 540, 30, 200, 23)
  56. $ID1_Input2 = GUICtrlCreateInput('', 540, 55, 200, 23)
  57. $ID1_Input3 = GUICtrlCreateInput('', 540, 80, 200, 23)
  58. $Insert = GUICtrlCreateButton('Добавить'&@LF&'или'&@LF&'Изменить', 750, 30, 75, 70, $BS_MULTILINE)
  59. GUICtrlSetTip(-1, 'Добавляем элемент')
  60.  
  61. GUICtrlCreateGroup('Операция с элементом', 487, 120, 350, 100)
  62. GUICtrlCreateLabel('Имя столбца', 500, 143, 70, 17)
  63. $Combo = GUICtrlCreateCombo('', 570, 140, 90, 23, 0x3)
  64. GUICtrlSetData($Combo, $ID1 & '|' & $ID2 & '|' & $ID3, $ID2)
  65.  
  66. GUICtrlCreateLabel('Текст поиска', 500, 168, 70, 17)
  67. $GUI_Input5 = GUICtrlCreateInput('', 500, 185, 160, 23)
  68.  
  69.  
  70. $Delete = GUICtrlCreateButton('Удалить', 670, 130, 73, 23)
  71. GUICtrlSetTip(-1, 'Удаляем элемент по второй колонке')
  72.  
  73. $Select = GUICtrlCreateButton('Прочитать', 750, 130, 73, 23)
  74. GUICtrlSetTip(-1, 'Прочитать элемент из базы')
  75.  
  76. $Find = GUICtrlCreateButton('Поиск одного', 750, 160, 73, 23)
  77. GUICtrlSetTip(-1, 'Поиск одного используя часть текста из базы')
  78.  
  79. $FindAll = GUICtrlCreateButton('Поиск всех', 750, 190, 73, 23)
  80. GUICtrlSetTip(-1, 'Поиск всех используя часть текста из базы (Exec)')
  81.  
  82. $FindAll2 = GUICtrlCreateButton('Поиск всех2', 670, 190, 73, 23)
  83. GUICtrlSetTip(-1, 'Пошаговый поиск всех используя часть текста из базы (Query + FetchData)')
  84.  
  85. ; GUICtrlCreateGroup('', 2, 307, 336, 134)
  86.  
  87. $AllItem = GUICtrlCreateButton('Все пункты', 490, 230, 73, 23)
  88. GUICtrlSetTip(-1, 'Получить все пункты с индексом')
  89. $GetTableToArray2D = GUICtrlCreateButton('в массив', 490, 260, 73, 23)
  90. GUICtrlSetTip(-1, 'Получить все пункты с индексом')
  91.  
  92. $DelTable = GUICtrlCreateButton('Удалить таблицу', 570, 230, 100, 23)
  93. GUICtrlSetTip(-1, 'Получить все пункты с индексом')
  94.  
  95. $GetNameTable = GUICtrlCreateButton('Имена таблиц', 570, 260, 100, 23)
  96. GUICtrlSetTip(-1, 'Получить все имена таблиц в базе')
  97.  
  98. $GetColum = GUICtrlCreateButton('Имена колонок', 570, 290, 100, 23)
  99. GUICtrlSetTip(-1, 'Получить имена колонок в таблице')
  100.  
  101. $Test = GUICtrlCreateButton('Тест', 490, 290, 73, 23)
  102. GUICtrlSetTip(-1, 'Не используйте кнопку, это для'&@CRLF&'теста неработающих функций')
  103.  
  104. $iHelp = GUICtrlCreateButton('?', 770, 260, 23, 23)
  105. GUICtrlSetTip(-1, 'Справка')
  106.  
  107. GUISetState()
  108.  
  109. While 1
  110.     Switch GUIGetMsg()
  111.         Case $iHelp
  112.             MsgBox(0, 'Справка', $sHelp, 0, $hGui)
  113.         Case $TableCombo
  114.             $sNameTable = GUICtrlRead($TableCombo)
  115.             _Read_sql()
  116.         Case $GetNameTable
  117.             _GetNameTable()
  118.             MsgBox(0, 'Сообщение', $sRes, 0, $hGui)
  119.         Case $GetColum
  120.             _GetColum_sql()
  121.         Case $DelTable
  122.             _DelTable()
  123.             GUICtrlSetData($StatusBar, 'Таблица удалена, если существовала')
  124.         Case $GetTableToArray2D
  125.             _GetTableToArray2D()
  126.         Case $AllItem
  127.             _GetAllItem_sql()
  128.         Case $Test
  129.             _Test_sql()
  130.         Case $Create
  131.             _SQLite_Close()
  132.             If GUICtrlRead($iMemory)=1 Then
  133.                 $mem = 1
  134.             Else
  135.                 $mem = 0
  136.             EndIf
  137.             Select
  138.                 Case $mem = 1
  139.                     $SQLite_Data_Path=":memory:"
  140.                     ContinueCase
  141.                 Case FileExists($SQLite_Data_Path)
  142.                     $sNameTable = GUICtrlRead($TableCombo)
  143.                     If $sNameTable = '' Then $sNameTable = 'TestTable'
  144.                     _SQLite_Open($SQLite_Data_Path)
  145.                 Case Else
  146.                     _Open_sql()
  147.                     If @error Then ContinueLoop
  148.             EndSelect
  149.             If $mem = 1 Then ; если база в памяти то импортируем 1000 элементов
  150.                 _SQLite_Exec(-1, "Create Table IF NOT Exists '"&$sNameTable&"' ("&$ID1&" int, '"&$ID2&"' Text, '"&$ID3&"' Text);")
  151.                 $kod=''
  152.                 ; Не нужно многократно вызывать  _SQLite_Exec для каждого импорта, достаточно все команды импорта объединить в один запрос, разделяя символом ";"
  153.                 ; Этот нативный способ является самым быстрым
  154.                 For $i = 1 To 3000
  155.                     $kod&="Insert into '" & $sNameTable & "' (" & $ID1 & "," & $ID2 & "," & $ID3 & ") values ('" & $i & "','" & Random(10000, 12000, 1) & "','" & Random(10000, 99999, 1) & "');"
  156.                 Next
  157.                 _SQLite_Exec(-1, $kod)
  158.             Else ; иначе импортируем небольшую базу
  159.                 ; Импорт 3000 строк выполняется за 0.27 сек
  160.                 _SQLite_Exec(-1, "Create Table IF NOT Exists '"&$sNameTable&"' ("&$ID1&" int, '"&$ID2&"' Text, '"&$ID3&"' Text);")
  161.                 $kod='BEGIN TRANSACTION;'
  162.                 ; Не нужно многократно вызывать  _SQLite_Exec для каждого импорта, достаточно все команды импорта объединить в один запрос, разделяя символом ";"
  163.                 ; Этот нативный способ является самым быстрым
  164.                 For $i = 1 To 3000
  165.                     $kod&="Insert into '" & $sNameTable & "' (" & $ID1 & "," & $ID2 & "," & $ID3 & ") values ('" & $i & "','" & Random(10000, 12000, 1) & "','" & Random(10000, 99999, 1) & "');"
  166.                 Next
  167.                 $kod&='COMMIT;'
  168.                 _SQLite_Exec(-1, $kod)
  169.                 ; _Insert_sql('1', 'Гашников Андрей Владимирович', '15.08.2011')
  170.                 ; _Insert_sql('2', 'Иванов Сергей Генадьевич', '12.11.2005')
  171.                 ; _Insert_sql('3', 'Петров Константин Григорьевич', '01.12.2011')
  172.                 ; _Insert_sql('4', 'Проверкин Провер Проверович', '11.09.2001')
  173.                 ; _Insert_sql('5', 'Иванов Сергей Генадьевич', '22.07.2011')
  174.                 ; _Insert_sql('6', 'Фамилия Имя Отчество', '18.10.2007')
  175.                 ; _Insert_sql('7', 'Чебурашкин Андрей Владимирович', '02.01.2012')
  176.                 ; _Insert_sql('8', 'Калмыков Александр Владимирович', '30.08.2011')
  177.                 ; _Insert_sql('9', 'Комстромской Андрей Владимирович', '22.01.2008')
  178.                 ; _Insert_sql('10', 'Фадеев Михаил Юрьевич', '14.05.2009')
  179.             EndIf
  180.             GUICtrlSetData($StatusBar, 'Строки импортированы')
  181.             _Read_sql()
  182.             ; обновляем комбо после генерации таблицы
  183.             _UpdateCombo($sNameTable)
  184.         Case $Open ; читаем базу из файла
  185.             _SQLite_Close()
  186.             _Open_sql()
  187.         Case $Insert
  188.             _Insert_sql(GUICtrlRead($ID1_Input1), GUICtrlRead($ID1_Input2), GUICtrlRead($ID1_Input3)) ; добавляем элемент
  189.             _Read_sql()
  190.         Case $Select ; выбираем элемент
  191.             _SelectItem_sql(GUICtrlRead($GUI_Input5))
  192.         Case $Find ; поиск текста
  193.             _FindFirst_sql()
  194.         Case $FindAll ; поиск всех вхождений (Exec)
  195.             _FindAll_sql()
  196.         Case $FindAll2 ; поиск всех вхождений (Query + FetchData)
  197.             _FindAll_sql2()
  198.         Case $Delete ; удаляем элемент
  199.             _DeleteItem_sql()
  200.             _Read_sql()
  201.         Case -3 ; выход
  202.             _SQLite_Shutdown() ; вызрузка SQLite.dll
  203.             ExitLoop
  204.     EndSwitch
  205. WEnd
  206.  
  207. Func _UpdateCombo($flag=0)
  208.     GUICtrlSendMsg($TableCombo, $CB_RESETCONTENT, 0, 0) ; очистить список
  209.     _GetNameTable()
  210.     $sRes = StringRegExpReplace(StringReplace($sRes, @Tab, '|'), '\R', '')
  211.     If $flag Then
  212.         GuiCtrlSetData($TableCombo, $sRes, $flag)
  213.         $sNameTable = $flag
  214.     Else
  215.         GuiCtrlSetData($TableCombo, $sRes, StringLeft($sRes, StringInStr($sRes&'|', '|')-1))
  216.         $sNameTable = GUICtrlRead($TableCombo)
  217.     EndIf
  218. EndFunc
  219.  
  220. Func _Open_sql() ; функция открытия / создания файла базы
  221.     $SQLite_Data_Path = FileOpenDialog("Выбрать файл", @WorkingDir, "Все файлы (*.db)", 24, 'SQLite.db', $hGui)
  222.     If @error Then Return SetError(1)
  223.     _SQLite_Open($SQLite_Data_Path)
  224.     If FileGetSize($SQLite_Data_Path) = 0 Then ; если размер файла базы равен нулю то создаём её, иначе читаем данные.
  225.         $sNameTable = GUICtrlRead($TableCombo)
  226.         If $sNameTable = '' Then $sNameTable = 'TestTable'
  227.         _Create_sql()
  228.     Else
  229.         _UpdateCombo()
  230.         _Read_sql()
  231.     EndIf
  232.     GUICtrlSetData($StatusBar, 'Открыт файл базы ' & StringRegExpReplace($SQLite_Data_Path, '(^.*)\\(.*)$', '\2'))
  233. EndFunc
  234.  
  235. Func _Create_sql() ; функция создания файла базы
  236.     ; _SQLite_Exec(-1, "Create Table IF NOT Exists '" & $sNameTable & "' (" & $ID1 & ", " & $ID2 & ", '" & $ID3 & "');")
  237.     ; Если не существует таблица, то создаём с 3-мя колонками (полями) ID, в формате int (числовой) и Text (текстовый).
  238.     ; Обрамление '' позволяет использовать пробелы в именах таблиц и колонок
  239.     _SQLite_Exec(-1, "Create Table IF NOT Exists '"&$sNameTable&"' ("&$ID1&" int, '"&$ID2&"' Text, '"&$ID3&"' Text);")
  240. EndFunc
  241.  
  242. Func _Read_sql() ; функция чтения данных файла базы
  243.     GUICtrlSendMsg($iListView, $LVM_DELETEALLITEMS, 0, 0)
  244.     ; If _SQLite_Query(-1, "SELECT * FROM '" & $sNameTable & "' ORDER BY " & $ID1 & " DESC;", $hQuery) <> $SQLITE_OK Then
  245.     ; ORDER BY - сортировка, DESC - обратная сортировка
  246.     If _SQLite_Query(-1, "SELECT * FROM '" & $sNameTable & "' ORDER BY " & $ID1 & ";", $hQuery) <> $SQLITE_OK Then
  247.         _err('Отсутствует таблица')
  248.         Return SetError(1)
  249.     EndIf
  250.     ; _SQLite_Query подготавливает запрос для _SQLite_FetchData
  251.     While _SQLite_FetchData($hQuery, $aRow) = $SQLITE_OK
  252.         GUICtrlCreateListViewItem($aRow[0] & '|' & $aRow[1] & '|' & $aRow[2], $iListView)
  253.     WEnd
  254.     For $i = 0 To 2 ; Выравнивание столбцов ListView по ширине текста
  255.         GUICtrlSendMsg($iListView, $LVM_SETCOLUMNWIDTH, $i, -1)
  256.         GUICtrlSendMsg($iListView, $LVM_SETCOLUMNWIDTH, $i, -2)
  257.     Next
  258. EndFunc
  259.  
  260. ; Быстрый Insert, для генерации, без проверкии существования ID, так как они изначально уникальные
  261. Func _InsertFast_sql($a, $b, $c) ; функция добавления элементов в файл базы
  262.     _SQLite_Exec(-1, "Insert into '" & $sNameTable & "' (" & $ID1 & "," & $ID2 & "," & $ID3 & ") values ('" & $a & "','" & $b & "','" & $c & "');")
  263. EndFunc
  264.  
  265. Func _Insert_sql($a, $b, $c) ; функция добавления элементов в файл базы
  266.  ; если таблицы нет, то создаётся. Защита от ошибки вставки в несуществующую таблицу
  267.     _SQLite_Exec(-1, "Create Table IF NOT Exists '"&$sNameTable&"' ("&$ID1&" int, '"&$ID2&"' Text, '"&$ID3&"' Text);")
  268.     ; Запрос строки таблицы с отправкой результата в $aRow
  269.     _SQLite_QuerySingleRow(-1, "SELECT " & $ID1 & " FROM '" & $sNameTable & "' WHERE " & $ID1 & " = '" & $a & "';", $aRow)
  270.     ; If _SQLite_QuerySingleRow(-1, "SELECT " & $ID1 & " FROM '" & $sNameTable & "' WHERE " & $ID1 & " = '" & $a & "';", $aRow)=$SQLITE_OK Then
  271.     If $aRow[0] = '' Then ; Если ID не существует, то создаём
  272.         ; _SQLite_Exec(-1, "Insert into '" & $sNameTable & "' (" & $ID1 & ") values ('" & $a & "');")
  273.         _SQLite_Exec(-1, "Insert into '" & $sNameTable & "' (" & $ID1 & "," & $ID2 & "," & $ID3 & ") values ('" & $a & "','" & $b & "','" & $c & "');")
  274.         GUICtrlSetData($StatusBar, 'Строка создана')
  275.     Else ; иначе изменяем существующую
  276.         ; Вставляем два значения
  277.         _SQLite_Exec(-1, "UPDATE '" & $sNameTable & "' SET " & $ID2 & " = '" & $b & "' WHERE " & $ID1 & " = '" & $a & "';")
  278.         _SQLite_Exec(-1, "UPDATE '" & $sNameTable & "' SET '" & $ID3 & "' = '" & $c & "' WHERE " & $ID1 & " = '" & $a & "';")
  279.         GUICtrlSetData($StatusBar, 'Строка изменена')
  280.     EndIf
  281. EndFunc
  282.  
  283. Func _FindFirst_sql() ; поиск в базе первой строки удовлетворяющей условию
  284.     _SQLite_QuerySingleRow(-1, "SELECT * FROM '" & $sNameTable & "' WHERE " & GUICtrlRead($Combo) & " LIKE '%" & GUICtrlRead($GUI_Input5) & "%';", $aRow)
  285.     If $aRow[0] = '' Then
  286.         _err('Ячейка с такими данными отсутствует')
  287.     Else
  288.         GUICtrlSetData($ID1_Input1, $aRow[0])
  289.         GUICtrlSetData($ID1_Input2, $aRow[1])
  290.         GUICtrlSetData($ID1_Input3, $aRow[2])
  291.         GUICtrlSetData($StatusBar, 'Ячейка базы найдена')
  292.     EndIf
  293. EndFunc
  294.  
  295. ; Запрос поиска с помощью Exec выполняет сразу весь поиск и при 10000 элементов базы возникает заметная задержка вывода данных.
  296. Func _FindAll_sql() ; поиск всех в базе
  297.     $sRes=''
  298.     ; * указывает выводить в результаты всей строки (id из каждой колонки). Если указать id, то той колонки и будет выводится ячейка
  299.     ; Функция обратного вызова _CallbackRow позволяет присоединить в результат все найденные строки
  300.     $timer = TimerInit()
  301.     _SQLite_Exec(-1, "SELECT * FROM '" & $sNameTable & "' WHERE " & GUICtrlRead($Combo) & " LIKE '%" & GUICtrlRead($GUI_Input5) & "%';", "_CallbackRow")
  302.     ; _SQLite_Exec(-1, "SELECT " & GUICtrlRead($Combo) & " FROM '" & $sNameTable & "' WHERE " & GUICtrlRead($Combo) & " LIKE '%" & GUICtrlRead($GUI_Input5) & "%';", "_CallbackRow")
  303.     MsgBox(0, 'Время поиска : '&Round(TimerDiff($timer), 2) & ' мсек', $sRes, 0, $hGui)
  304. EndFunc
  305.  
  306. ; Прелесть поиска с помощью Query : получаем дескриптор за 0.28 мс и далее переход к первому элементу поиска и по желанию к следующему, т.е. пошаговый.
  307. Func _FindAll_sql2() ; поиск всех в базе
  308.     ; $sRes=''
  309.     ; * указывает выводить в результаты всей строки (id из каждой колонки). Если указать id, то той колонки и будет выводится ячейка
  310.     ; Функция _SQLite_FetchData перебирает результат запроса присоединияя в результат все найденные строки
  311.     $timer = TimerInit()
  312.     _SQLite_Query(-1, "SELECT * FROM '" & $sNameTable & "' WHERE " & GUICtrlRead($Combo) & " LIKE '%" & GUICtrlRead($GUI_Input5) & "%';", $hQuery)
  313.     $timer = Round(TimerDiff($timer), 2)
  314.     While _SQLite_FetchData($hQuery, $aRow) = $SQLITE_OK
  315.         ; $sRes &=$aRow[0] & '|' & $aRow[1] & '|' & $aRow[2]&@CRLF ; можно присоединить результаты и вывести сразу все
  316.         If MsgBox(4, 'Продолжить? (Время запроса Query : '& $timer & ' мсек)', $aRow[0] & '|' & $aRow[1] & '|' & $aRow[2], 0, $hGui)=7 Then _SQLite_QueryFinalize($hQuery)
  317.     WEnd
  318.     ; MsgBox(0, 'Сообщение', $sRes, 0, $hGui)
  319. EndFunc
  320.  
  321. Func _GetAllItem_sql() ; Получить все пункты таблицы
  322.     $sRes=''
  323.     Local $d = _SQLite_Exec(-1, "Select oid,* FROM '" & $sNameTable&"'", "_CallbackRow") ; _CallbackRow будет вызвана для каждой строки
  324.     MsgBox(0, 'Сообщение', $sRes, 0, $hGui)
  325. EndFunc
  326.  
  327. Func _CallbackRow($aRow)
  328.     For $s In $aRow
  329.         $sRes &= $s &@Tab
  330.     Next
  331.     $sRes &= @CRLF
  332. EndFunc
  333.  
  334. Func _GetTableToArray2D() ; таблицу в 2D массив
  335.     Local $aResult, $iRows, $iColumns
  336.     $iRval = _SQLite_GetTable2d(-1, "SELECT * FROM '" & $sNameTable&"'", $aResult, $iRows, $iColumns)
  337.     If $iRval = $SQLITE_OK Then
  338.         ; _SQLite_Display2DResult($aResult) - отправляет результаты в консоль
  339.         _ArrayDisplay($aResult, 'Array')
  340.     Else
  341.         MsgBox(16, "Ошибка SQLite: " & $iRval, _SQLite_ErrMsg(), 0, $hGui)
  342.     EndIf
  343. EndFunc
  344.  
  345. Func _DelTable() ; удаляет таблицу
  346.     ; IF EXISTS - избавляет от ошибок удаления несуществующей таблицы
  347.     _SQLite_Exec(-1, "Drop Table IF EXISTS '"&$sNameTable&"'")
  348.     _UpdateCombo()
  349.     _Read_sql()
  350. EndFunc
  351.  
  352. Func _GetNameTable() ; получает имена таблиц
  353.     $sRes=''
  354.     ; sqlite_master - системная таблица, содержащая имена таблиц в базе
  355.     ; ORDER BY name - сортировка по полю имени (name) таблиц
  356.     _SQLite_Exec(-1, "SELECT name FROM sqlite_master WHERE type='table' ORDER BY name;", "_CallbackRow")
  357.    
  358.     ; _SQLite_QuerySingleRow(-1, "SELECT name FROM sqlite_master WHERE type='table' ORDER BY name;", $aRow)
  359.     ; MsgBox(0, 'Сообщение', $aRow[0], 0, $hGui)
  360. EndFunc
  361.  
  362. ; Тестовые функции, недоделанные, для эксперимента
  363. Func _Test_sql2() ; Сортировка с пересозданием индексов
  364.     Local $hQuery, $aRow, $aNames
  365.     $name=StringRegExpReplace($SQLite_Data_Path, '(^.*)\\(.*)\.(.*)$', '\2')
  366.     ; MsgBox(0, 'Сообщение', _SQLite_Exec(-1, "REINDEX "&$SQLite_Data_Path&".'"&$sNameTable&"'")=$SQLITE_OK, 0, $hGui)
  367.     MsgBox(0, 'Сообщение', _SQLite_Exec(-1, "REINDEX collation "&$name)=$SQLITE_OK, 0, $hGui)
  368. EndFunc
  369.  
  370. ; Тестовые функции, недоделанные, для эксперимента
  371. Func _Test_sql() ; получить количество таблиц или проверить существование таблицы
  372.     ; $name=StringRegExpReplace($SQLite_Data_Path, '(^.*)\\(.*)\.(.*)$', '\2')
  373.     ; MsgBox(0, 'Сообщение', _SQLite_Exec(-1, "SELECT count(name) FROM sqlite_master WHERE name='"&$sNameTable&"'")=$SQLITE_OK, 0, $hGui)
  374.    
  375.    
  376.     $sRes=''
  377.     ; _SQLite_QuerySingleRow(-1, "SELECT count FROM sqlite_master WHERE name='"&$sNameTable&"'", $aRow)
  378.     _SQLite_Query(-1, "SELECT count(" & $ID1 & ") FROM '" & $sNameTable & "'", $hQuery)
  379.     MsgBox(0, 'Сообщение', $aRow[0], 0, $hGui)
  380.    
  381.    
  382.     ; MsgBox(0, 'Сообщение', _SQLite_Exec(-1, "SELECT name FROM sqlite_master WHERE type='table' AND name='%s'"&$sNameTable)=$SQLITE_OK, 0, $hGui)
  383.     ; MsgBox(0, 'Сообщение', _SQLite_Exec(-1, "SELECT name FROM sqlite_master WHERE type='table'"), 0, $hGui)
  384.     ; MsgBox(0, 'Сообщение',_SQLite_Exec(-1, "SELECT name FROM sqlite_master WHERE type='table' ORDER BY name;", "_CallbackRow"), 0, $hGui)
  385.     ; MsgBox(0, 'Сообщение', _SQLite_Exec(-1, "SHOW TABLES FROM "&$name&" LIKE "&$sNameTable)=$SQLITE_OK, 0, $hGui)
  386. EndFunc
  387.  
  388. Func _GetColum_sql() ; получить имена колонок
  389.     Local $hQuery, $aNames
  390.     _SQLite_Query(-1, "SELECT ROWID,* FROM '" & $sNameTable & "' ORDER BY " & $ID1, $hQuery)
  391.     _SQLite_FetchNames($hQuery, $aNames)
  392.     MsgBox(0, 'Сообщение', StringFormat(" %-10s  %-10s  %-10s  %-10s ", $aNames[0], $aNames[1], $aNames[2], $aNames[3]), 0, $hGui)
  393. EndFunc
  394.  
  395. Func _SelectItem_sql($a) ; получает элемент файла базы
  396.     If _SQLite_QuerySingleRow(-1, "SELECT * FROM '" & $sNameTable & "' WHERE " & GUICtrlRead($Combo) & " = '" & $a & "';", $aRow) <> $SQLITE_OK Then
  397.         _err('Ячейка с такими данными отсутствует')
  398.         Return SetError(1)
  399.     EndIf
  400.     If $aRow[0] = '' Then
  401.         _err('Ячейка с такими данными отсутствует')
  402.     Else
  403.         GUICtrlSetData($ID1_Input1, $aRow[0])
  404.         GUICtrlSetData($ID1_Input2, $aRow[1])
  405.         GUICtrlSetData($ID1_Input3, $aRow[2])
  406.         GUICtrlSetData($StatusBar, 'Ячейка базы прочитана')
  407.     EndIf
  408. EndFunc
  409.  
  410. Func _DeleteItem_sql() ; удаляет элемент файла базы
  411.     If _SQLite_Exec(-1, "DELETE FROM '" & $sNameTable & "' WHERE " & GUICtrlRead($Combo) & " = '" & GUICtrlRead($GUI_Input5) & "';") <> $SQLITE_OK Then
  412.         _err('Ячейка с такими данными отсутствует')
  413.     Else
  414.         GUICtrlSetData($StatusBar, 'Ячейка базы удалена')
  415.     EndIf
  416. EndFunc
  417.  
  418. Func _err($tx)
  419.     GUICtrlSetData($StatusBar, $tx)
  420.     For $i = 1 To 4
  421.         GUICtrlSetColor($StatusBar, 0xffffff)
  422.         Sleep(40)
  423.         GUICtrlSetColor($StatusBar, -1)
  424.         Sleep(40)
  425.     Next
  426. EndFunc
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement