#Region - TimeStamp ; 2014-05-03 23:12:36 v 0.2 #EndRegion - TimeStamp ; ergänzende SQLite-Funktionen #cs _SQLite_TableExists Prüft eine Tabelle auf Existenz (True/False) _SQLite_SelectAll Wählt alle Felder einer Tabelle für eine bestimmte Bedingung aus (2D-Ergebnisarray) _SQLite_CountRows Ermittelt die Anzahl Datensätze in einer Tabelle _SQLite_ColumnsInfo Ermittelt Anzahl Felder einer Tabelle und/oder Feldnamen oder Datentypen _SQLite_INSERT Fügt einen oder mehrere DS in die angegebene Tabelle ein. Es kann ein String oder 1D-Array übergeben werden (einzelner DS) oder ein 2D-Array (mehrere DS) _SQLite_UPDATE Führt ein UPDATE für eine oder mehrere Spalten einer angegebenen Tabelle, mit oder ohne Bedingung (WHERE) aus. Die UPDATE-Angaben können als String (einzelne Spalte) oder Array übergeben werden. Es wird erst die Spalte, dann der neue Wert, getrennt durch $Delim (Standard ',') übergeben. Wird keine WHERE-Klausel übergeben, wird die Operation in ALLEN DS ausgeführt! Es braucht nur die reine Klausel (z.B.: ORT = 'Hamburg') übergeben werden, nicht das Schlüsselwort. z.B. _SQLite_UPDATE('Kunden', 'ORT,Neu-Grünberg', 'PLZ = 99881') Local $aUpdate[4] = ['STRASSE,Grundweg 12','PLZ,34366','ORT,Hinterm Berg','TEL,04466-3356'] _SQLite_UPDATE('Kunden', $aUpdate, "NAME = 'Kunze' AND PLZ = 34345") #ce ;=================================================================================================== ; Function Name....: _SQLite_TableExists ; Description......: Prüft eine Tabelle auf Existenz ; Parameter(s).....: $_sTable Tabellenname ; Requirement(s)...: Eine mit _SQLite_Open() geöffnete DB ; .................: #include ; Return Value(s)..: Erfolg: True / False ; .................: Fehler: False, @error = 1, @extended = SQLite-@error ; Author(s)........: BugFix (bugfix@autoit.de) ;=================================================================================================== Func _SQLite_TableExists($_sTable) Local $hQuery, $aQuery, $fRet = False, $sErr If $SQLITE_OK <> _SQLite_Query(-1, "SELECT name FROM sqlite_master WHERE type='table'", $hQuery) Then $sErr = _SQLite_ErrCode() _SQLite_QueryFinalize($hQuery) Return SetError(1,$sErr,False) EndIf While _SQLite_FetchData($hQuery, $aQuery) = $SQLITE_OK If $aQuery[0] = $_sTable Then $fRet = True ExitLoop EndIf WEnd _SQLite_QueryFinalize($hQuery) Return $fRet EndFunc ;==>_SQLite_TableExists ;=================================================================================================== ; Function Name....: _SQLite_SelectAll ; Description......: Wählt alle Felder einer Tabelle für eine gegebene Bedingung aus ; Parameter(s).....: $_sTable Tabellenname ; .................: $_sWhere WHERE - Bedingung ohne Schlüsselwort (Standard='', gibt gesamte Tabelle aus) ; Requirement(s)...: Eine mit _SQLite_Open() geöffnete DB ; .................: #include ; Return Value(s)..: Erfolg: Ergebnisarray ; .................: Fehler: 1, @error = 1, @extended = SQLite-@error ; Author(s)........: BugFix (bugfix@autoit.de) ;=================================================================================================== Func _SQLite_SelectAll($_sTable, $_sWhere='') If $_sWhere <> '' Then $_sWhere = " WHERE " & StringRegExpReplace($_sWhere, '([^;]+)([;]*)$', '$1;') Local $aResult, $iRows, $iColumns If $SQLITE_OK <> _SQLite_GetTable2d(-1, "SELECT * FROM " & $_sTable & $_sWhere, $aResult, $iRows, $iColumns) Then Return SetError(1,_SQLite_ErrCode(),1) Else Return $aResult EndIf EndFunc ;==>_SQLite_SelectAll ;=================================================================================================== ; Function Name....: _SQLite_CountRows ; Description......: Ermittelt die Anzahl von Datensätzen für eine Tabelle ; Parameter(s).....: $_sTable Tabellenname ; Requirement(s)...: Eine mit _SQLite_Open() geöffnete DB ; .................: #include ; Return Value(s)..: Erfolg: Anzahl der Datensätze ; .................: Fehler: -1 @error = 1, @extended = SQLite-@error ; Author(s)........: BugFix (bugfix@autoit.de) ;=================================================================================================== Func _SQLite_CountRows($_sTable) Local $hQuery, $aQuery, $iRet = 0, $iErr If $SQLITE_OK <>_SQLite_Query(-1, "SELECT count(*) FROM " & $_sTable & ";", $hQuery) Then $iErr = _SQLite_ErrCode() _SQLite_QueryFinalize($hQuery) Return SetError(1,$iErr,-1) EndIf While _SQLite_FetchData($hQuery, $aQuery) = $SQLITE_OK $iRet = $aQuery[0] WEnd _SQLite_QueryFinalize($hQuery) Return $iRet EndFunc ;==>_SQLite_CountRows ;=================================================================================================== ; Function Name....: _SQLite_ColumnsInfo ; Description......: Ermittelt die Anzahl von Spalten für eine Tabelle, optional auch Namen oder Typen der Spalten ; Parameter(s).....: $_sTable Tabellenname ; ....optional.....: $_iNames 0 (Standard) - nur Anzahl ; .................: 1 - gibt Array mit Spaltennamen und Anzahl an Index 0 zurück. ; .................: 2 - gibt Array mit Spaltentypen und Anzahl an Index 0 zurück. ; Requirement(s)...: Eine mit _SQLite_Open() geöffnete DB ; .................: #include ; Return Value(s)..: Erfolg: Anzahl der Spalten oder Array mit Anzahl und allen Spaltennamen/-Typen ; .................: Fehler: -1 @error = 1, @extended = SQLite-@error ; Author(s)........: BugFix (bugfix@autoit.de) ;=================================================================================================== Func _SQLite_ColumnsInfo($_sTable, $_iNames=0) Local $hQuery, $aQuery, $cid, $sCol = '', $sTypes = '', $iErr If $SQLITE_OK <> _SQLite_Query(-1, "PRAGMA table_info(" & $_sTable & ");", $hQuery) Then $iErr = _SQLite_ErrCode() _SQLite_QueryFinalize($hQuery) Return SetError(1,$iErr,-1) EndIf While _SQLite_FetchData($hQuery, $aQuery) = $SQLITE_OK $cid = $aQuery[0] If $sCol <> '' Then $sCol &= ',' If $sTypes <> '' Then $sTypes &= ',' $sCol &= $aQuery[1] $sTypes &= $aQuery[2] WEnd _SQLite_QueryFinalize($hQuery) Switch $_iNames Case 0 Return $cid +1 Case 1 Return StringSplit($sCol, ',') Case 2 Return StringSplit($sTypes, ',') EndSwitch EndFunc ;==>_SQLite_ColumnsInfo #cs ;=============================================================================== v0.1 ; Function Name: _SQLite_INSERT($sTable, $saValues, $Delim=',') ; Description:: Fügt Werte in eine existierende Tabelle einer geöffneten SQLite ; DB ein. ; Parameter(s): $sTable String des Tabellennamens ; $saValues String ODER 1D-Array mit den einzufügenden Werten ; $Delim Trennzeichen für Werte inerhalb eines DS, Standard:',' ; Requirement(s): Eine mit _SQLite_Open() geöffnete DB ; #include ; Return Value(s): Erfolg $SQLITE_OK ; Fehler 1 @error = 1, Insert fehlgeschlagen ; Author(s): BugFix (bugfix@autoit.de) ;=============================================================================== Func _SQLite_INSERT($sTable, $saValues, $Delim=',') Local $sInsert = '' If Not IsArray($saValues) Then Local $aValues[1] = [$saValues] Else Local $aValues = $saValues EndIf For $i = 0 To UBound($aValues) -1 Local $splitVal = StringSplit($aValues[$i], $Delim) $sInsert &= "INSERT INTO " & $sTable & " VALUES (" For $k = 1 To UBound($splitVal) -1 $sInsert &= "'" & StringStripWS($splitVal[$k], 3) & "'" & ',' Next $sInsert = StringTrimRight($sInsert, 1) & ");" Next If $SQLITE_OK <> _SQLite_Exec ( -1, $sInsert ) Then Return SetError(1,0,1) Else Return $SQLITE_OK EndIf EndFunc ;==>_SQLite_INSERT #ce ;=================================================================================================== ; Function Name....: _SQLite_INSERT ; Description......: Fügt Daten aus einem String/1D-Array/2D-Array in eine Tabelle ein. Leere Inhalte werden automatisch mit "NULL" besetzt ; Parameter(s).....: $_sTable Tabellenname ; .................: $_vValues String/Array mit Werten ; ....optional.....: $_iIndexStart Array-Index ab dem Werte übernommen werden. (Standard=0) ; ....optional.....: $_sDelim Trennzeichen, wenn $_vValues ein String ist. (Standard=',') ; Requirement(s)...: Eine mit _SQLite_Open() geöffnete DB ; .................: #include ; .................: _SQLite_ColumnsInfo() ; Return Value(s)..: Erfolg: $SQLITE_OK ; .................: Fehler: 1 @error = 1 übergebene Spaltenzahl falsch ; .................: @error = 2 Insert fehlgeschlagen @extended = Insert-@error ; Author(s)........: BugFix (bugfix@autoit.de) ;=================================================================================================== Func _SQLite_INSERT($_sTable, $_vValues, $_iIndexStart=0, $_sDelim=',') If Not IsArray($_vValues) Then $_vValues = StringSplit($_vValues, $_sDelim, 3) Local $aValues[1][UBound($_vValues-$_iIndexStart)] If UBound($_vValues,0) = 1 Then For $i = $_iIndexStart To UBound($_vValues) -1 $aValues[0][$i] = $_vValues[$i] Next Else $aValues = $_vValues EndIf Local $sSQL = 'BEGIN TRANSACTION;', $sEdge, $iColTable = -1 Local $iColArray = UBound($aValues,2), $sValue Local $aTypes = _SQLite_ColumnsInfo($_sTable, 2) If IsArray($aTypes) Then $iColTable = $aTypes[0] If $iColTable = -1 Or ($iColTable <> $iColArray) Then Return SetError(1,0,1) For $i = $_iIndexStart To UBound($aValues) -1 $sSQL &= 'INSERT INTO ' & $_sTable & ' VALUES (' For $j = 0 To $iColArray -1 $sValue = $aValues[$i][$j] If $sValue = '' Then $sValue = 'NULL' Else $sEdge = '"' If $aTypes[$j+1] <> 'TEXT' Then $sEdge = '' $sValue = $sEdge & $sValue & $sEdge EndIf $sSQL &= $sValue & ',' Next $sSQL = StringTrimRight($sSQL, 1) & ');' Next $sSQL &= 'END TRANSACTION;' If $SQLITE_OK <> _SQLite_Exec(-1, $sSQL) Then Return SetError(2,_SQLite_ErrCode(),1) Else Return $SQLITE_OK EndIf EndFunc ;==>_SQLite_INSERT ;=================================================================================================== ; Function Name: _SQLite_UPDATE($sTable, $saField_Value, $sWhere=-1, $Delim=',') ; Description:: Updatet Werte in eine existierende Tabelle einer geöffneten SQLite ; DB ; Parameter(s): $sTable String des Tabellennamens ; $saFieldValue String ODER 1D-Array mit den Feld-Wert Paaren ; $sWhere Bedingung für das SQL-Statement, Standard -1 ; gültig für alle DS ; $Delim Trennzeichen zwischen Feld und Wert, Standard:',' ; Requirement(s): Eine mit _SQLite_Open() geöffnete DB ; #include ; Return Value(s): Erfolg $SQLITE_OK ; Fehler 1 @error = 1, Update fehlgeschlagen ; Author(s): BugFix (bugfix@autoit.de) ;=================================================================================================== Func _SQLite_UPDATE($sTable, $saField_Value, $sWhere=-1, $Delim=',') Local $sUpdate = "UPDATE " & $sTable & " SET " If Not IsArray($saField_Value) Then Local $aValues[1] = [$saField_Value] Else Local $aValues = $saField_Value EndIf For $i = 0 To UBound($aValues) -1 Local $splitVal = StringSplit($aValues[$i], $Delim) $sUpdate &= StringStripWS($splitVal[1], 3) & " = '" & StringStripWS($splitVal[2], 3) & "'," Next $sUpdate = StringTrimRight($sUpdate, 1) If $sWhere <> -1 Then $sUpdate &= " WHERE " & $sWhere If $SQLITE_OK <> _SQLite_Exec ( -1, $sUpdate ) Then Return SetError(1,0,1) Else Return $SQLITE_OK EndIf EndFunc ;==>_SQLite_UPDATE