Функция _SQLite_SQLiteExe

 ↑  ←  Описание функции


_SQLite_SQLiteExe

Выполняет команды в SQLite3.exe

#include <SQLite.au3>
_SQLite_SQLiteExe($sDatabaseFile, $sInput, ByRef $sOutput [, $sSQLiteExeFilename = "SQLite3.exe" [, $fDebug = False]])

Параметры

$sDatabaseFile Файл базы данных
$sInput Команды для SQLite3.exe
$sOutput Необработанные выходные данные из SQLite3.exe
$sSQLiteExeFilename [необязательный] Путь к SQLite3.exe
$fDebug [необязательный] Если True, то выводит отладочные команды в функцию обратного вызова указанную в _SQLite_Startup(), иначе, если False, то пропускает вывод функцией обратного вызова.
Смотрите примечания в _SQLite_Startup().

Возвращаемое значение

Успех:Возвращает $SQLITE_OK
Ошибка:Возвращаемое значение можно сравнить с константами $SQLITE_ *
@error:1 - Не удалось создать новую базу данных
2 - SQLite3.exe не найден
3 - ошибка SQL / незавершенный SQL
4 - Не удалось открыть входной файл

Примечания

Запустите SQLite3.exe, нажмите ВВОД и введите .help для получения дополнительной информации о командах SQLite3.exe.

SQLite3.exe можно найти на сайте SQLite. Копию файла помощи можно найти в папке AutoIt3\Extras\SQLite.

Пример

#include <SQLite.au3>
#include <SQLite.dll.au3>

; файлы
Local $sTsvFile = FileGetShortName(_TempFile(@ScriptDir, "~", ".tsv"))
Local $sDbFile = FileGetShortName(_TempFile(@ScriptDir, "~", ".db"))

; создает tsv файлы
FileWriteLine($sTsvFile, "a" & @TAB & "b" & @TAB & "c")
FileWriteLine($sTsvFile, "a1" & @TAB & "b1" & @TAB & "c1")
FileWriteLine($sTsvFile, "a2" & @TAB & "b2" & @TAB & "c2")

; импорт таблицы, используя SQLite3.exe
; формирование командной строки в $sIn
Local $sIn, $sOut, $i, $sCreate = "CREATE TABLE TblImport (";
For $i = 1 To _StringCountOccurance(FileReadLine($sTsvFile, 1), @TAB) + 1
    $sCreate &= "Column_" & $i & ","
Next
$sCreate = StringTrimRight($sCreate, 1) & ");"
$sIn = $sCreate & @CRLF ; создает таблицу
$sIn &= ".separator \t" & @CRLF ; выбирает @TAB в качестве разделителя
$sIn &= ".import '" & $sTsvFile & "' TblImport" & @CRLF ; импорт таблицы из $sTsvFile в таблицу с именем TblImport
_SQLite_Startup()
_SQLite_SQLiteExe($sDbFile, $sIn, $sOut, -1, True) ; импорт таблицы из текстового файла в базу данных

If Not @error Then
    ; вывод таблицы, используя SQLite3.dll
    Local $iRows, $iColumns, $aRes
    ConsoleWrite("Версия библиотеки SQLite = " & _SQLite_LibVersion() & @CRLF)
    _SQLite_Open($sDbFile) ; открывает базу данных из файла
    _SQLite_GetTable2d(-1, "SELECT ROWID,* FROM TblImport;", $aRes, $iRows, $iColumns) ; возвращает двумерный массив в $aRes
    _SQLite_Display2DResult($aRes) ; вывод результата в консоль
    _SQLite_Close() ; закрывает базу данных
    _SQLite_Shutdown()
Else
    If @error = 2 Then
        ConsoleWrite("ОШИБКА: файл Sqlite3.exe не найден" & @CRLF)
    Else
        ConsoleWrite("ОШИБКА: @error=" & @error & " при вызове _SQLite_SQLiteExe" & @CRLF)
    EndIf
EndIf

; удаляет временные файлы
FileDelete($sTsvFile)
FileDelete($sDbFile)

;~ вывод:
;~  rowid  Column_1  Column_2  Column_3
;~  1      a         b         c
;~  2      a1        b1        c1
;~  3      a2        b2        c2

Func _StringCountOccurance($sSearchString, $sSubString, $fCaseSense = 0) ; возвращает число $sSubString в $sSearchString
    Local $iOccCnt = 1
    Do
        If StringInStr($sSearchString, $sSubString, $fCaseSense, $iOccCnt) > 0 Then
            $iOccCnt += 1
        Else
            ExitLoop
        EndIf
    Until 0
    Return $iOccCnt - 1
EndFunc   ;==>_StringCountOccurance