
Edek
Members-
Posts
9 -
Joined
-
Last visited
Edek's Achievements

Seeker (1/7)
0
Reputation
-
SQLite semi Embedded database functionality in AutoIt
Edek replied to ptrex's topic in AutoIt Example Scripts
LiteX has been moved to assembla: https://www.assembla.com/spaces/litex Now you can easily browse LiteX sources in SVN repository. -
Hi. This script below reads Visual Studio C++ installation directory from registry and prints it to console. This script is intended to compile as console application. The main question is: is this script work well? I've tested this script with VS C++ 2008 only. This script should work VS C++ 2003/2005 and VS C++ Express editions also. Please check this script if you have any VS C++ Express edition or VS C++ 2003/2005. #NoTrayIcon #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Compression=4 #AutoIt3Wrapper_Change2CUI=y #AutoIt3Wrapper_Res_Description=Reads Visual Studio C++ installation directory and prints it to StdOut. #AutoIt3Wrapper_Res_Fileversion=0.1.0.7 #AutoIt3Wrapper_Res_FileVersion_AutoIncrement=y #AutoIt3Wrapper_Res_SaveSource=y #AutoIt3Wrapper_Run_Tidy=y #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** ; ; VCInstallDir.au3 - installation directory of Visual Studio 2003/2005/2008 C++ ; Opt("TrayIconHide", 1) Global Const $VC_SETUP_KEY = "HKLM\\SOFTWARE\\Microsoft\\VisualStudio\\%s\\Setup\\VC" Global Const $VC_SETUP_VALUE = "ProductDir" Global Const $VC_VER[5] = ["7.0", "8.0Exp", "8.0", "9.0Exp", "9.0"] Func get_vc_install_dir() Local $i, $sVCDir For $i = UBound($VC_VER) - 1 To 0 Step -1 $sVCDir = RegRead(StringFormat($VC_SETUP_KEY, $VC_VER[$i]), $VC_SETUP_VALUE) If Not @error Then Return SetError(0, $VC_VER[$i], $sVCDir) EndIf Next Return SetError(1, "", "") EndFunc ;==>get_vc_install_dir Dim $sVCDir = get_vc_install_dir() If @error Then ConsoleWriteError("Cannot find any Visual Studio C++ installation." & @CRLF) Exit 1 Else ConsoleWrite($sVCDir & @CRLF) Exit 0 EndIf Example batch file vcenvrun.cmd that uses compiled script VCInstallDir.exe: @ECHO OFF FOR /F "usebackq delims==" %%i IN (`VCInstallDir.exe`) DO CALL "%%ivcvarsall.bat" x86 CALL %*
-
Hi. This is a script I created to automate mounting TrueCrypt encrypted volumes. The idea is to keep keyfiles of encrypted volumes on USB pendrive only. Only after plugging pendrive to computer it is possible to mount encrypted volumes stored on this computer. Pendrive may but don't have to be encrypted. To automate volume mounting simply compile this script an put executable on your pendrive. You must also edit configuration file. This file have INI format. Configuration file have the same name as script/executable with INI extension. For example if your script is named MountCryptedDrive.au3 then configuration file is MountCryptedDrive.ini. In [Automount] section you specify volumes to mount at script startup. This script may create simple tray menu if [TrayMenu] section is present in configuration file. See sample configuration file below. To mount TrueCrypt volume this script by default uses TrueCrypt that is installed on your computer. If TrueCrypt is not installed this script assumes that TrueCrypt.exe is located on App sub directory. When you set Portable=1 in [General] section of configuration file then this script doesn't look for TrueScript installation on your computer and assumes that TrueCrypt.exe is located on App sub directory directly. This compiled script works fine for me with PortableApps. This is script: #NoTrayIcon Opt("TrayMenuMode", 1) ; Default tray menu items (Script Paused/Exit) will not be shown. #include <File.au3> #include <Array.au3> #include <Constants.au3> Global Const $APP_TITLE = "TrueCrypt volume (auto)mounter" Global Const $APP_VERSION = "0.1" Global Const $TC_UNINSTALL_KEY = "\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\TrueCrypt" ; uninstall key Func get_app_uninstall_string($appkey) Dim $app_dir = RegRead("HKEY_LOCAL_MACHINE" & $appkey, "UninstallString") If $app_dir == "" Then $app_dir = RegRead("HKEY_CURRENT_USER" & $appkey, "UninstallString") EndIf Return $app_dir EndFunc ;==>get_app_uninstall_string ; parse uninstall script Func get_app_uninstall_exe($sUninstallString) Local $aExe = StringRegExp($sUninstallString, """(.+)"" /u", 1) If Not @error Then Return SetError(0, @extended, $aExe[0]) Else Return SetError(@error, @extended, @error) EndIf EndFunc ;==>get_app_uninstall_exe Func extract_dir($sFullPath) Local $sDrive, $sDir, $sFName, $sExt _PathSplit($sFullPath, $sDrive, $sDir, $sFName, $sExt) Return _PathMake($sDrive, $sDir, "TrueCrypt", "exe") EndFunc ;==>extract_dir Func get_tc_executable_from_registry() Local $sUninstallString = get_app_uninstall_string($TC_UNINSTALL_KEY) If StringLen($sUninstallString) = 0 Then Return SetError(1, 0, "") EndIf Local $sExe = get_app_uninstall_exe($sUninstallString) If @error Then Return SetError(1, $sExe, "") EndIf Local $sTC = extract_dir($sExe) Return SetError(0, 0, $sTC) EndFunc ;==>get_tc_executable_from_registry Func get_tc_portable() Return _PathFull(@ScriptDir & "\App\TrueCrypt.exe") EndFunc ;==>get_tc_portable Func get_tc_executable($sConfigFile) Local $sTC = "" Local $nPortable = IniRead($sConfigFile, "General", "Portable", 0) If $nPortable = 1 Then $sTC = get_tc_portable() Else $sTC = get_tc_executable_from_registry() If @error Then ; second chance, portable $sTC = get_tc_portable() EndIf EndIf Return $sTC EndFunc ;==>get_tc_executable Func get_script_name() Local $sName = @ScriptName Local $n = StringInStr($sName, ".", 0, -1) If @error Or $n = 0 Then Return $sName Else Return StringLeft($sName, $n - 1) EndIf EndFunc ;==>get_script_name Func create_config_file($sConfigFile) IniWriteSection($sConfigFile, "General", "Portable=0") IniWriteSection($sConfigFile, "Automount", "Example1=MyMount1" & @LF & "Example2=MyMount2") IniWriteSection($sConfigFile, "TrayMenu", "Example1=MyMount1" & @LF & "Example2=MyMount2" & @LF & "Tray=TrayMountOnly") IniWriteSection($sConfigFile, "MyMount1", "Volume=exvolume1.tc" & @LF & "KeyFile=kf1.key" & @LF & "Drive=W") IniWriteSection($sConfigFile, "MyMount2", "Volume=exvolume2.tc" & @LF & "KeyFile=mykeyfile.key" & @LF & "Drive=K") IniWriteSection($sConfigFile, "TrayMountOnly", "Volume=\Device\Harddisk0\Partition0" & @LF & "KeyFile=traymount.key") EndFunc ;==>create_config_file ; Config file (INI) Global Const $CONFIG_FILE = @ScriptDir & "\" & get_script_name() & ".ini" If Not FileExists($CONFIG_FILE) Then If MsgBox(0x14, $APP_TITLE, "Configuration file doesn't exists." & @CRLF & "Do you want to create sample configuration file?") = 6 Then create_config_file($CONFIG_FILE) ShellExecute($CONFIG_FILE) EndIf Exit 100 EndIf ; TrueCrypt executable Global Const $TRUE_CRYPT = get_tc_executable($CONFIG_FILE) If Not FileExists($TRUE_CRYPT) Then Exit 200 EndIf Func read_tt_data($sConfigFile, $sSection, _ ByRef $sVolume, ByRef $sDrive, ByRef $sKeyFile) $sKeyFile = IniRead($sConfigFile, $sSection, "KeyFile", "") If StringLen($sKeyFile) = 0 Then Return SetError(1, "KeyFile", False) EndIf $sVolume = IniRead($sConfigFile, $sSection, "Volume", "") If StringLen($sVolume) = 0 Then Return SetError(1, "Volume", False) EndIf $sDrive = IniRead($sConfigFile, $sSection, "Drive", "") Return True EndFunc ;==>read_tt_data Func run_tt($sVolume, $sDrive, $sKeyFile) Local $sCmdParams = "/b /c n /h n /q" $sCmdParams &= " /v " & $sVolume ; volume $sCmdParams &= " /k """ & $sKeyFile & """" ; keyfile If StringLen($sDrive) = 0 Then $sCmdParams &= " /a" Else $sCmdParams &= " /l " & $sDrive EndIf Local $nExitCode = RunWait("""" & $TRUE_CRYPT & """ " & $sCmdParams, @ScriptDir) If @error Then ClipPut($sCmdParams) Return SetError(@error, "Cannot run TrueCrypt", $nExitCode) Else Return SetError(0, False, $nExitCode) EndIf EndFunc ;==>run_tt ; Automount section Dim $aAutoMount = IniReadSection($CONFIG_FILE, "Automount") Dim $i, $nExitCode Dim $sVolume, $sDrive, $sKeyFile If Not @error Then For $i = 1 To $aAutoMount[0][0] If read_tt_data($CONFIG_FILE, $aAutoMount[$i][1], $sVolume, $sDrive, $sKeyFile) Then $nExitCode = run_tt($sVolume, $sDrive, $sKeyFile) If @error Or $nExitCode > 0 Then MsgBox(0x10, $APP_TITLE & " : " & $aAutoMount[$i][0], "Fail to mount volume " & $sVolume & " ." & @CRLF & "Exit code: " & $nExitCode & ".", 10) EndIf EndIf Next EndIf ; TrayMenu section Dim $aTrayMenu = IniReadSection($CONFIG_FILE, "TrayMenu") Dim $aTrayMenuItems[1] = [0] Dim $exititem, $aboutitem, $tcitem, $dismountitem If Not @error Then For $i = 1 To $aTrayMenu[0][0] Dim $mt[2] = [TrayCreateItem($aTrayMenu[$i][0]), $i] _ArrayAdd($aTrayMenuItems, $mt) $aTrayMenuItems[0] += 1 Next TrayCreateItem("") $tcitem = TrayCreateItem("Show TrueCrypt") $dismountitem = TrayCreateItem("Dismount all volumes") TrayCreateItem("") $aboutitem = TrayCreateItem("&About") $exititem = TrayCreateItem("E&xit") If Not @Compiled Then TraySetIcon(@ScriptDir & "\TrueCrypt.ico") EndIf TraySetState() TraySetToolTip($APP_TITLE) While True $msg = TrayGetMsg() Select Case $msg = 0 ContinueLoop Case $msg = $exititem ExitLoop Case $msg = $aboutitem MsgBox(0x40, $APP_TITLE, _ "Simple TrueCrypt (auto)mounter." & @CRLF & _ "TrueCrypt executable: " & $TRUE_CRYPT & @CRLF & _ "Configuration file: " & $CONFIG_FILE & @CRLF & _ "Version: " & $APP_VERSION & "." & @CRLF & _ "AutoIt version: " & @AutoItVersion & "." & @CRLF & _ "Author: Edmunt Pienkowsky." & @CRLF & _ "E-mail: roed@onet.eu." & @CRLF & _ "Icon: http://rocketdock.com/addons/icons/2773") Case $msg = $tcitem Or $msg = $TRAY_EVENT_PRIMARYDOUBLE Run($TRUE_CRYPT, @ScriptDir) Case $msg = $dismountitem Run("""" & $TRUE_CRYPT & """ /d /q") Case Else For $i = 1 To $aTrayMenuItems[0] $mt = $aTrayMenuItems[$i] If $msg = $mt[0] Then If read_tt_data($CONFIG_FILE, $aTrayMenu[$mt[1]][1], $sVolume, $sDrive, $sKeyFile) Then $nExitCode = run_tt($sVolume, $sDrive, $sKeyFile) If Not @error And $nExitCode = 0 Then TrayTip($APP_TITLE, "Volume " & $sVolume & " mounted successfully.", 10, 1) Else TrayTip($APP_TITLE, "Fail to mount volume " & $sVolume & " ." & @CRLF & "Exit code: " & $nExitCode & ".", 10, 3) EndIf EndIf EndIf Next EndSelect WEnd EndIf This is a simple configuration file: [General] Portable=0 [TrayMenu] Example=ExampleVolume TT=TrueCrypt [Automount] Example=ExampleVolume [ExampleVolume] Volume=ExampleVolume.tc KeyFile=mykey.mp3 Drive=N [TrueCrypt] Volume=\Device\Harddisk0\Partition2 KeyFile=pkey.mp3 Icon file you can find at: http://rocketdock.com/addons/icons/2773.
-
SQLite semi Embedded database functionality in AutoIt
Edek replied to ptrex's topic in AutoIt Example Scripts
Announcement. New LiteX package was released. The main changes are in LiteX Automation library. Using 3.4.2 version of SQLite3 library.Connection object now can raise events Progress and Busy.Statement new collections: Columns, Rows and Parameters. Now it is possible to iterate through records using For Each statement.Completely reimplemented support for 64-bit integers. New LargeInteger helper class.You can download new LiteX package here. Update: Using 3.5.7 version of SQLite3 library.Moving homepage to assemblaSources now available at public SVN repository at http://svn2.assembla.com/svn/aIPblab5qr3zkdab7jnrAJ. -
SQLite semi Embedded database functionality in AutoIt
Edek replied to ptrex's topic in AutoIt Example Scripts
Generally LiteX Automation may be registered from any location. It is possible to use LiteX and standard SQLite3 UDF's together. The script below show how to do it. You do not need sqlite3.dll library in system or script directory. It is taken from latest beta version of LiteX Automation package. #comments-start This sample demonstrates how to use LiteX Automation together with standard _SQLite3_... UDFs included into AutoIt #comments-end #include <File.au3> #include <SQlite.au3> Global Const $DB_FILE = _TempFile() Global Const $DB_QUERY = "SELECT count(*),avg(b),total( c ) FROM Test" Global Const $MAX_REC = 2222 Global $g_oComError #comments-start Reads location of LiteX Automation library from registry. #comments-end Func _LiteX_Path() Local $sLiteXPath = RegRead("HKEY_CLASSES_ROOT\CLSID\{3E22694D-7B92-42A1-89A7-668E2F7AA107}\InprocServer32", "") If @error Then Return SetError(@error, @extended, "") Else Return SetError(0, 0, $sLiteXPath) EndIf EndFunc ;==>_LiteX_Path #comments-start If LiteX Automation is registered in your system then you can use that library instead of standard sqlite3.dll. Instead of _SQLite_Startup use _LiteX_Startup. Call normal _SQLite_Shutdown() when you finish. #comments-end Func _LiteX_Startup() Local $sLiteXPath $sLiteXPath = _LiteX_Path() If Not @error Then _SQLite_Startup($sLiteXPath) If @error Then Return SetError(1, 0, False) Else Return SetError(0, 0, True) EndIf Else Return SetError(1, 1, False) EndIf EndFunc ;==>_LiteX_Startup #comments-start Here is sample application. #comments-end Func com_err_func() Beep(400, 200) Dim $sMsg = "COM Error: " & Hex($g_oComError.number, 8) ConsoleWriteError($sMsg & @CRLF) $sMsg = "Source: " & $g_oComError.source ConsoleWriteError($sMsg & @CRLF) $sMsg = "Error description #1: " & $g_oComError.windescription ConsoleWriteError($sMsg & @CRLF) $sMsg = "Error description #2: " & $g_oComError.description ConsoleWriteError($sMsg & @CRLF) If Not @Compiled Then $sMsg = "Line: " & $g_oComError.scriptline ConsoleWriteError($sMsg & @CRLF) EndIf Return SetError(1, $g_oComError, False) EndFunc ;==>com_err_func $g_oComError = ObjEvent("AutoIt.Error", "com_err_func") $sLiteXPath = _LiteX_Path() If @error Then ConsoleWriteError("Fail to find LiteX Automation library." & @CRLF) ConsoleWriteError("Make sure that LiteX Automation is registered." & @CRLF) Exit 1 EndIf ConsoleWrite("LiteX Automation library location: " & $sLiteXPath & @CRLF) ConsoleWrite("LiteX Automation library version: " & FileGetVersion($sLiteXPath) & @CRLF) ; ; Init ; $oConnection = ObjCreate("LiteX.LiteConnection") If @error Then ConsoleWriteError("Fail to create LiteX Connection object." & @CRLF) Exit 10 EndIf _LiteX_Startup() If @error Then ConsoleWriteError("Fail to load LiteX Automation library." & @CRLF) Exit 2 EndIf ; ; Version ; ConsoleWrite("SQLite3 library version #1: " & _SQLite_LibVersion() & @CRLF) ConsoleWrite("SQLite3 library version #2: " & $oConnection.Version (False) & @CRLF) ; ; Structure ; ConsoleWrite("Creating database structure." & @CRLF) $oConnection.Open ($DB_FILE) $oConnection.BatchExecute ("PRAGMA CODEPAGE='UTF-8';CREATE TABLE Test( a INTEGER PRIMARY KEY, b, c );CREATE INDEX idxb ON Test(b);CREATE INDEX idxc ON Test( c )") $db = _SQLite_Open($DB_FILE) ; ; Data phase one ; ConsoleWrite("Building database phase 1 (UDF's)." & @CRLF) $tBegin = TimerInit() _SQLite_Exec($db, "BEGIN TRANSACTION") For $i = 1 To $MAX_REC _SQLite_Exec($db, StringFormat("INSERT INTO Test(b,c) VALUES (%f,%d)", Random(88, 888, 1), Random(234, 444))) Next _SQLite_Exec($db, "COMMIT TRANSACTION") $tDiff1 = TimerDiff($tBegin) ConsoleWrite("Phase complete. Time " & Round($tDiff1, 3) & " ms." & @CRLF) ; ; Data phase two ; ConsoleWrite("Building database phase 2 (LiteX Automation)." & @CRLF) $tBegin = TimerInit() $oConnection.Execute("BEGIN TRANSACTION") $oStmt = $oConnection.Prepare ("INSERT INTO Test(b,c) VALUES (:one,:two)") For $i = 1 To $MAX_REC $oStmt.BindParameters (Random(9, 999, 1), Random(432, 555)) $oStmt.Execute() Next $oStmt.Close () $oConnection.Execute("COMMIT TRANSACTION") $tDiff2 = TimerDiff($tBegin) ConsoleWrite("Phase complete. Time " & Round($tDiff2, 3) & " ms." & @CRLF) ConsoleWrite(StringFormat("Phase two was about %.1f times faster than phase one." & @CRLF, $tDiff1 / $tDiff2)) ; ; Query using UDF's ; ConsoleWrite("Executing query using UDF's: " & $DB_QUERY & @CRLF) Dim $hQuery, $aRow _SQLite_Query($db, $DB_QUERY, $hQuery) _SQLite_FetchData($hQuery, $aRow) _SQLite_QueryFinalize($hQuery) ConsoleWrite("Query result #1: " & $aRow[0] & @CRLF) ConsoleWrite("Query result #2: " & $aRow[1] & @CRLF) ConsoleWrite("Query result #3: " & $aRow[2] & @CRLF) ; ; Query using LiteX Automation ; ConsoleWrite("Executing query using LiteX Automation: " & $DB_QUERY & @CRLF) $oStmt = $oConnection.Prepare ($DB_QUERY) $oStmt.Step () ConsoleWrite("Query result #1: " & $oStmt.ColumnValue (0) & @CRLF) ConsoleWrite("Query result #2: " & $oStmt.ColumnValue (1) & @CRLF) ConsoleWrite("Query result #3: " & $oStmt.ColumnValue (2) & @CRLF) $oStmt.Close () $oStmt = 0 ; ; Collections ; ConsoleWrite("Iterating records using collections. " & @CRLF) $oStmt = $oConnection.Prepare ("SELECT a,b,c FROM TEST ORDER BY c DESC LIMIT 3555,30") For $oColumn In $oStmt.Columns ConsoleWrite( "Column #" & $oColumn.Index & @TAB & $oColumn.Value & @CRLF ) Next $nCounter = 0 For $oRow In $oStmt.Rows (True, 20) ; try True or False as first parameter $nCounter += 1 $sRow = "Record #" & $nCounter & @TAB For $oVal In $oRow ; second collection $sRow &= $oVal $sRow &= @TAB Next ConsoleWrite(StringTrimRight($sRow, 1) & @CRLF) Next $oStmt.Close () $oStmt = 0 ; ; Shutdown ; ConsoleWrite("Shutdown." & @CRLF) _SQLite_Close($db) _SQLite_Shutdown() $oConnection.Close () ; ; Clean Up ; FileRecycle($DB_FILE) ; ; Bye ; ConsoleWrite("Bye." & @CRLF) Exit 0 -
SQLite semi Embedded database functionality in AutoIt
Edek replied to ptrex's topic in AutoIt Example Scripts
Yes. All presented UDF's work on the ANSI version without any problems (for me). I think that using theese UDF's in ANSI version isn't effective - many conversions from and to Unicode (UTF-16). But this ensures that text stored in database is encoded in UTF-8 or UTF-16 instead of ANSI that makes database more portable. -
Bellow you can find some additions to _GUICtrlSlider... UDFs. In SliderConstants.au3: New style: Global Const $TBS_ENABLESELRANGE = 0x0020oÝ÷ Ø×°ë,j¬jëh×6Global Const $TBM_SETSEL = ($TWM_USER+10) Global Const $TBM_SETSELSTART = ($TWM_USER+11) Global Const $TBM_SETSELEND = ($TWM_USER+12) Global Const $TBM_GETSELSTART = ($TWM_USER+17) Global Const $TBM_GETSELEND = ($TWM_USER+18) Global Const $TBM_CLEARSEL = ($TWM_USER+19)oÝ÷ Ù«¢+Øìôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôô(ì(ìÍÉ¥ÁÑ¥½¸è$%}U% ÑɱM±¥ÉMÑM±MÑÉÐ(ìAɵÑȡ̤è$$ÀÌØí¡}ͱ¥È´½¹Ñɽ°¡¹±½È%(ì$$$$ÀÌØí¥}ÍÑÉдMÑÉÑ¥¹Á½Í¥Ñ¥½¸½Ñ¡Í±Ñ¥½¸É¹¸(ì$$$$ÀÌØí}ÉÉÜ´IÉܱ(ìIÅեɵ¹Ðè$%9½¹(ìIÑÕɸY±Õ¡Ì¤è%9½¹(ìUÍÈ ±±Q¥Àè$%}U% ÑɱM±¥ÉMÑM±MÑÉÐ ÀÌØí¡}ͱ¥È°ÀÌØí¥}ÍÑÉаÀÌØí}ÉÉܤMÑÌÑ¡ÍÑÉÐÁ½Í¥Ñ¥½¸½Í±Ñ¥½¸¥¸Í±¥È¸¡ÉÅÕ¥Éè±ÐíÕ¥M±¥È¹ÔÌÐì¤(ìÕÑ¡½È¡Ì¤è$%µÕ¹ÐA¥¹½ÝÍä ɽÐÁ½éѽÐÔ¤(ì9½Ñ¡Ì¤è$%Q¡Í±¥ÈµÕÍСÙÑ¡ÀÌØíQ M}9 1M1I9ÍÑå±Ñ¼ÕÍÑ¡¥Ì¸(ì(ìôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôô)Õ¹}U% ÑɱM±¥ÉMÑM±MÑÉÐ ÀÌØí¡}ͱ¥È°ÀÌØí¥}ÍÑÉаÀÌØí}ÉÉÜôĤ(%%9½Ð}%Í ±ÍÍ9µ ÀÌØí¡}ͱ¥È°ÅÕ½ÐíµÍѱÍ}ÑÉÈÌÈÅÕ½Ðì¤Q¡¸IÑÕɸMÑÉÉ½È ´Ä°´Ä°´Ä¤(%%%Í!]¹ ÀÌØí¡}ͱ¥È¤Q¡¸$($%}M¹5ÍÍ ÀÌØí¡}ͱ¥È°ÀÌØíQ 5}MQM1MQIP°ÀÌØí}ÉÉܰÀÌØí¥}ÍÑÉФ(%±Í($%U% ÑɱM¹5Í ÀÌØí¡}ͱ¥È°ÀÌØíQ 5}MQM1MQIP°ÀÌØí}ÉÉܰÀÌØí¥}ÍÑÉФ$$(%¹%)¹Õ¹ìôôÐí}U% ÑɱM±¥ÉMÑM±MÑÉÐoÝ÷ Ù«¢+Øìôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôô(ì(ìÍÉ¥ÁÑ¥½¸è$%}U% ÑɱM±¥ÉMÑM±¹(ìAɵÑȡ̤è$$ÀÌØí¡}ͱ¥È´½¹Ñɽ°¡¹±½È%(ì$$$$ÀÌØí¥}¹´¹¥¹±½¥°Á½Í¥Ñ¥½¸½Ñ¡Í±Ñ¥½¸É¹¸(ì$$$$ÀÌØí}ÉÉÜ´IÉܱ(ìIÅեɵ¹Ðè$%9½¹(ìIÑÕɸY±Õ¡Ì¤è%9½¹(ìUÍÈ ±±Q¥Àè$%}U% ÑɱM±¥ÉMÑM±¹ ÀÌØí¡}ͱ¥È°ÀÌØí¥}ÍѽÀ°ÀÌØí}ÉÉܤMÑÌÑ¡¹¥¹Á½Í¥Ñ¥½¸½Í±Ñ¥½¸¥¸Í±¥È¸¡ÉÅÕ¥Éè±ÐíÕ¥M±¥È¹ÔÌÐì¤(ìÕÑ¡½È¡Ì¤è$%µÕ¹ÐA¥¹½ÝÍä ɽÐÁ½éѽÐÔ¤(ì9½Ñ¡Ì¤è$%Q¡Í±¥ÈµÕÍСÙÑ¡ÀÌØíQ M}9 1M1I9ÍÑå±Ñ¼ÕÍÑ¡¥Ì¸(ì(ìôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôô)Õ¹}U% ÑɱM±¥ÉMÑM±¹ ÀÌØí¡}ͱ¥È°ÀÌØí¥}¹°ÀÌØí}ÉÉÜôĤ(%%9½Ð}%Í ±ÍÍ9µ ÀÌØí¡}ͱ¥È°ÅÕ½ÐíµÍѱÍ}ÑÉÈÌÈÅÕ½Ðì¤Q¡¸IÑÕɸMÑÉÉ½È ´Ä°´Ä°´Ä¤(%%%Í!]¹ ÀÌØí¡}ͱ¥È¤Q¡¸$($%}M¹5ÍÍ ÀÌØí¡}ͱ¥È°ÀÌØíQ 5}MQM19°ÀÌØí}ÉÉܰÀÌØí¥}¹¤(%±Í($%U% ÑɱM¹5Í ÀÌØí¡}ͱ¥È°ÀÌØíQ 5}MQM19°ÀÌØí}ÉÉܰÀÌØí¥}¹¤$$(%¹%)¹Õ¹ìôôÐí}U% ÑɱM±¥ÉMÑM±¹oÝ÷ Ù«¢+Øìôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôô(ì(ìÍÉ¥ÁÑ¥½¸è$%}U% ÑɱM±¥É ±ÉM°(ìAɵÑȡ̤è$$ÀÌØí¡}ͱ¥È´½¹Ñɽ°¡¹±½È%(ì$$$$ÀÌØí}ÉÉÜ´IÉܱ(ìIÅեɵ¹Ðè$$%9½¹(ìIÑÕɸY±Õ¡Ì¤è%9½¹(ìUÍÈ ±±Q¥Àè$%}U% ÑɱM±¥É ±ÉM° ÀÌØí¡}ͱ¥È°ÀÌØí}ÉÉܤ ±ÉÌÑ¡ÕÉɹÐͱѥ½¸É¹¥¸Í±¥È¸¡ÉÅÕ¥Éè±ÐíÕ¥M±¥È¹ÔÌÐì¤(ìÕÑ¡½È¡Ì¤è$%µÕ¹ÐA¥¹½ÝÍä ɽÐÁ½éѽÐÔ¤(ì9½Ñ¡Ì¤è$%Q¡Í±¥ÈµÕÍСÙÑ¡ÀÌØíQ M}9 1M1I9ÍÑå±Ñ¼ÕÍÑ¡¥Ì¸(ì(ìôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôô)Õ¹}U% ÑɱM±¥É ±ÉM° ÀÌØí¡}ͱ¥È°ÀÌØí}ÉÉÜôĤ(%%9½Ð}%Í ±ÍÍ9µ ÀÌØí¡}ͱ¥È°ÅÕ½ÐíµÍѱÍ}ÑÉÈÌÈÅÕ½Ðì¤Q¡¸IÑÕɸMÑÉÉ½È ´Ä°´Ä°´Ä¤(%%%Í!]¹ ÀÌØí¡}ͱ¥È¤Q¡¸$($%}M¹5ÍÍ ÀÌØí¡}ͱ¥È°ÀÌØíQ 5} 1IM0°ÀÌØí}ÉÉܤ(%±Í($%U% ÑɱM¹5Í ÀÌØí¡}ͱ¥È°ÀÌØíQ 5} 1IM0°ÀÌØí}ÉÉܰÀ¤$$(%¹%)¹Õ¹ìôôÐí}U% ÑɱM±¥É ±ÉM°oÝ÷ Ù«¢+Øìôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôô(ì(ìÍÉ¥ÁÑ¥½¸è$%}U% ÑɱM±¥ÉÑM±MÑÉÐ(ìAɵÑȡ̤è$$ÀÌØí¡}ͱ¥È´½¹Ñɽ°¡¹±½È%(ìIÅեɵ¹Ðè$%9½¹(ìIÑÕɸY±Õ¡Ì¤è%9½¹(ìUÍÈ ±±Q¥Àè$%}U% ÑɱM±¥ÉÑM±MÑÉÐ ÀÌØí¡}ͱ¥È¤IÑÉ¥ÙÌÑ¡ÍÑÉÑ¥¹Á½Í¥Ñ¥½¸½Ñ¡ÕÉɹÐͱѥ½¸É¹¥¸Í±¥È¸¡ÉÅÕ¥Éè±ÐíÕ¥M±¥È¹ÔÌÐì¤(ìÕÑ¡½È¡Ì¤è$%µÕ¹ÐA¥¹½ÝÍä ɽÐÁ½éѽÐÔ¤(ì9½Ñ¡Ì¤è$%Q¡Í±¥ÈµÕÍСÙÑ¡ÀÌØíQ M}9 1M1I9ÍÑå±Ñ¼ÕÍÑ¡¥Ì¸(ì(ìôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôô)Õ¹}U% ÑɱM±¥ÉÑM±MÑÉÐ ÀÌØí¡}ͱ¥È¤(%%9½Ð}%Í ±ÍÍ9µ ÀÌØí¡}ͱ¥È°ÅÕ½ÐíµÍѱÍ}ÑÉÈÌÈÅÕ½Ðì¤Q¡¸IÑÕɸMÑÉÉ½È ´Ä°´Ä°´Ä¤(%%%Í!]¹ ÀÌØí¡}ͱ¥È¤Q¡¸$($%IÑÕɸ}M¹5ÍÍ ÀÌØí¡}ͱ¥È°ÀÌØíQ 5}QM1MQIP¤(%±Í($%IÑÕɸU% ÑɱM¹5Í ÀÌØí¡}ͱ¥È°ÀÌØíQ 5}QM1MQIP°À°À¤$$(%¹%)¹Õ¹ìôôÐí}U% ÑɱM±¥ÉÑM±MÑÉÐoÝ÷ Ù«¢+Øìôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôô(ì(ìÍÉ¥ÁÑ¥½¸è$%}U% ÑɱM±¥ÉÑM±¹(ìAɵÑȡ̤è$$ÀÌØí¡}ͱ¥È´½¹Ñɽ°¡¹±½È%(ìIÅեɵ¹Ðè$%9½¹(ìIÑÕɸY±Õ¡Ì¤è%9½¹(ìUÍÈ ±±Q¥Àè$%}U% ÑɱM±¥ÉÑM±¹ ÀÌØí¡}ͱ¥È¤IÑÉ¥ÙÌÑ¡¹¥¹Á½Í¥Ñ¥½¸½Ñ¡ÕÉɹÐͱѥ½¸É¹¥¸Í±¥È¸¡ÉÅÕ¥Éè±ÐíÕ¥M±¥È¹ÔÌÐì¤(ìÕÑ¡½È¡Ì¤è$%µÕ¹ÐA¥¹½ÝÍä ɽÐÁ½éѽÐÔ¤(ì9½Ñ¡Ì¤è$%Q¡Í±¥ÈµÕÍСÙÑ¡ÀÌØíQ M}9 1M1I9ÍÑå±Ñ¼ÕÍÑ¡¥Ì¸(ì(ìôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôô)Õ¹}U% ÑɱM±¥ÉÑM±¹ ÀÌØí¡}ͱ¥È¤(%%9½Ð}%Í ±ÍÍ9µ ÀÌØí¡}ͱ¥È°ÅÕ½ÐíµÍѱÍ}ÑÉÈÌÈÅÕ½Ðì¤Q¡¸IÑÕɸMÑÉÉ½È ´Ä°´Ä°´Ä¤(%%%Í!]¹ ÀÌØí¡}ͱ¥È¤Q¡¸$($%IÑÕɸ}M¹5ÍÍ ÀÌØí¡}ͱ¥È°ÀÌØíQ 5}QM19¤(%±Í($%IÑÕɸU% ÑɱM¹5Í ÀÌØí¡}ͱ¥È°ÀÌØíQ 5}QM19°À°À¤$$(%¹%)¹Õ¹ìôôÐí}U% ÑɱM±¥ÉÑM±¹oÝ÷ Ù«¢+Øìôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôô(ìÑ¡½±±½Ý¥¹Õ¹Ñ¥½¹Ìɽȥ¹Ñɹ°ÕÍ(ìôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôô)Õ¹}}51ÁÉ´ ÀÌØí1½]½É°ÀÌØí!¥]½É¤(%IÑÕɸ ¥Ñ=H ¥Ñ¹ ÀÌØí!¥]½É¨ÁàÄÀÀÀÀ°ÁáÀÀÀÀ¤° ¥Ñ9 ÀÌØí1½]½É°Áᤤ)¹Õ¹ìôôÐí}5%@oÝ÷ Ø2¢ëy©eb~'¶*'±ªÞ§^¶.¦+¶Ç¥yËb¢x§²Xz°'vØ^謱©©æ©¦Xjب«¢+Ø¥¹±Õ±ÐíU% ½¹ÍѹÑ̹ÔÌÐì(¥¹±Õ±ÐíÕ¥M±¥È¹ÔÌÐì((ÀÌØí5¥¹½É´ôU% ÉÑ ÅÕ½ÐíM±¥Èͱѥ½¸ÑÍÐÅÕ½Ðì°ØḬ̀äÔ°Ää̰ÄÄÔ¤(ÀÌØíͱ¥ÉQÍÐôU% Ñɱ ÉÑM±¥È Ð°à°ØÀÔ°Èä° ¥Ñ=H ÀÌØíU%}MM}U1Q}M1%H°ÀÌØí]M}Q MQ=@°ÀÌØíQ M}9 1M1I9¤¤(ÀÌØíѹ ¥¸ôU% Ñɱ ÉÑ ÕÑѽ¸ ÅÕ½Ðí ¥¸ÅÕ½Ðì°Ð°ÐаàİÈÔ°À¤(ÀÌØíѹ¹ôU% Ñɱ ÉÑ ÕÑѽ¸ ÅÕ½Ðí¹ÅÕ½Ðì°äÀ°ÐÔ°àİÈÔ°À¤(ÀÌØíѹ ±ÈôU% Ñɱ ÉÑ ÕÑѽ¸ ÅÕ½Ðí ±ÈÅÕ½Ðì°ÄÜÐ°ÐØ°àİÈÔ°À¤(ÀÌØíѹÉI¹ôU% Ñɱ ÉÑ ÕÑѽ¸ ÅÕ½ÐíIÅÕ½Ðì°ÈÔà°ÐܰàİÈÔ°À¤()U% ÑɱMÑ1¥µ¥Ð ÀÌØíͱ¥ÉQÍаÄÀÀÀ°À¤)}U% ÑɱM±¥ÉMÑM° ÀÌØíͱ¥ÉQÍаÔÄİØÀȰÀ¤)}U% ÑɱM±¥ÉMÑQ¥ÉÄ ÀÌØíͱ¥ÉQÍаÈÀ¤)}U% ÑɱM±¥ÉMÑ1¥¹M¥é ÀÌØíͱ¥ÉQÍаФ)}U% ÑɱM±¥ÉMÑAM¥é ÀÌØíͱ¥ÉQÍаÈÀ¤()U%MÑMÑÑ¡M]}M!=¤)]¡¥±QÉÕ($ÀÌØí¹5ÍôU%Ñ5Í ¤(%MÝ¥Ñ ÀÌØí¹5Í($% ÍÀÌØíU%}Y9Q} 1=M($%á¥Ð($$$($% ÍÀÌØíѹ ¥¸($%}U% ÑɱM±¥ÉMÑM±MÑÉÐ ÀÌØíͱ¥ÉQÍаU% ÑɱI ÀÌØíͱ¥ÉQÍФ¤($$$($% ÍÀÌØíѹ¹($%}U% ÑɱM±¥ÉMÑM±¹ ÀÌØíͱ¥ÉQÍаU% ÑɱI ÀÌØíͱ¥ÉQÍФ¤($$$($% ÍÀÌØíѹ ±È($%}U% ÑɱM±¥É ±ÉM° ÀÌØíͱ¥ÉQÍФ($$$($% ÍÀÌØíѹÉI¹($%5Í ½à À°ÅÕ½ÐíM±¥Èͱѥ½¸ÅÕ½Ðì°|($$%MÑÉ¥¹½ÉµÐ ÅÕ½Ðì´ÅÕ½Ðì°}U% ÑɱM±¥ÉÑM±MÑÉÐ ÀÌØíͱ¥ÉQÍФ°}U% ÑɱM±¥ÉÑM±¹ ÀÌØíͱ¥ÉQÍФ¤¤((%¹MÝ¥Ñ )]¹
-
SQLite semi Embedded database functionality in AutoIt
Edek replied to ptrex's topic in AutoIt Example Scripts
I don't know where is good place to talk about SQLite3 UDF's. Here's a link to my post created in another thread. #378510 Bellow you can find UTF-16 versions of some SQLite3 UDFs. _SQLite_Open16: Func _SQLite_Open16($sDatabase_Filename = ":memory:") Local $avRval If IsKeyword($sDatabase_Filename) Then $sDatabase_Filename = ":memory:" $avRval = DllCall($g_hDll_SQLite, "int:cdecl", "sqlite3_open16", "wstr", $sDatabase_Filename _ ; Database filename , "long_ptr", 0) ; OUT: SQLite db handle If @error > 0 Then Return SetError(1, $SQLITE_MISUSE, 0) ElseIf $avRval[0] = $SQLITE_OK Then $g_hDB_SQLite = $avRval[2] __SQLite_hAdd($avRval[2], $SQLITE_DBHANDLE) Return SetError(0, $avRval[0], $avRval[2]) Else __SQLite_ReportError16($avRval[2],"_SQLite_Open16") _SQLite_Close($avRval[2]) Return SetError(-1, $avRval[0], 0) EndIf EndFunc ;==>_SQLite_OpenoÝ÷ ØKÞ¯'Zµ¦Ú±ç+y«^u¼@¸xê^^¢±DÅ×¢Äzw(uç[É×jém!ü¨ºwuDÅñéÜ¡×u«Zm«Ê¬¥vër^=0§rboÝ÷ Ù´+^Bç«Ë^¿m«¢+ÙÕ¹}ME±¥Ñ}EÕÉäÄØ ÀÌØí¡°ÀÌØíÍME0° åIÀÌØí¡EÕÉä¤(%%9½Ð}}ME1¥Ñ}¡ ¡¬ ÀÌØí¡°ÀÌØíME1%Q} !91¤ôÀÌØíME1%Q}=,Q¡¸IÑÕɸMÑÉÉ½È È°À°ÀÌØíME1%Q}5%MUM¤(%1½°ÀÌØí¥IÙ°($ÀÌØí¥IÙ°ô±± ±° ÀÌØí}¡±±}ME1¥Ñ°ÅÕ½Ðí¥¹Ðé°ÅÕ½Ðì°ÅÕ½ÐíÍű¥ÑÍ}ÁÉÁÉÄÙ}ØÈÅÕ½Ðì°|($$$ÅÕ½ÐíÁÑÈÅÕ½Ðì°ÀÌØí¡°|($$$ÅÕ½ÐíÝÍÑÈÅÕ½Ðì°ÀÌØíÍME0°|($$$ÅÕ½Ðí¥¹ÐÅÕ½Ðì°MÑÉ¥¹1¸ ÀÌØíÍME0¤¨È°|($$$ÅÕ½Ðí±½¹}ÁÑÈÅÕ½Ðì°À°|($$$ÅÕ½Ðí±½¹}ÁÑÈÅÕ½Ðì°À¤(%%ÉɽÈÐìÀQ¡¸($%IÑÕɸMÑÉÉ½È Ä°À°ÀÌØíME1%Q}5%MUM¤(%±Í%ÀÌØí¥IÙ±lÁtôÀÌØíME1%Q}=,Q¡¸($$ÀÌØí¡EÕÉäôÀÌØí¥IÙ±lÑt($%}}ME1¥Ñ}¡ ÀÌØí¥IÙ±lÑt°ÀÌØíME1%Q}EUIe!91¤($%IÑÕɸÀÌØí¥IÙ±lÁt(%±Í($%}}ME1¥Ñ}IÁ½ÉÑÉɽÈÄØ ÀÌØí¡°ÅÕ½Ðí}ME1¥Ñ}EÕÉäÄØÅÕ½Ðì°ÀÌØíÍME0¤($%IÑÕɸMÑÉÉ½È ´Ä°À°ÀÌØí¥IÙ±lÁt¤(%¹%)¹Õ¹ìôôÐí}ME±¥Ñ}EÕÉäoÝ÷ Ù´.+^ë6k^¿m«¢+ÙÕ¹}ME1¥Ñ}Ñ¡ÑÄØ ÀÌØí¡EÕÉä° åIÀÌØíI½Ü°ÀÌØí ¥¹Éäô±Í¤(%%9½Ð}}ME1¥Ñ}¡ ¡¬ ÀÌØí¡EÕÉä°ÀÌØíME1%Q}EUIe!91¤ôÀÌØíME1%Q}=,Q¡¸IÑÕɸMÑÉÉ½È Ü°À°ÀÌØíME1%Q}5%MUM¤(%%9½Ð%ÍÉÉä ÀÌØíI½Ü¤Q¡¸($%¥´ÀÌØíI½ÝlÅt(%¹%(%1½°ÀÌØí¥IÙ±}MÑÀ°ÀÌØí¥IÙ±} ½± ¹Ð°ÀÌØíÍIÙ°°ÀÌØí¤°ÀÌØí¥IÙ±}½±ÑåÁ(%1½°ÀÌØí¥ ½± åÑ̰ÀÌØíÙIÍձаÀÌØíÙIÍÕ±ÑMÑÉÕÐ(%1½°ÀÌØíME1%Q}9U10ôÔ(%%%Í-åÝ½É ÀÌØí ¥¹Éä¤Q¡¸ÀÌØí ¥¹Éäô±Í($ÀÌØí¥IÙ±}MÑÀô±± ±° ÀÌØí}¡±±}ME1¥Ñ°ÅÕ½Ðí¥¹Ðé°ÅÕ½Ðì°ÅÕ½ÐíÍű¥ÑÍ}ÍÑÀÅÕ½Ðì°ÅÕ½ÐíÁÑÈÅÕ½Ðì°ÀÌØí¡EÕÉä¤(%%ÉɽÈÐìÀQ¡¸($%IÑÕɸMÑÉÉ½È Ä°À°ÀÌØíME1%Q}5%MUM¤(%±Í%ÀÌØí¥IÙ±}MÑÁlÁtôÀÌØíME1%Q}I=Q¡¸($$ÀÌØí¥IÙ±} ½± ¹Ðô±± ±° ÀÌØí}¡±±}ME1¥Ñ°ÅÕ½Ðí¥¹Ðé°ÅÕ½Ðì°ÅÕ½ÐíÍű¥ÑÍ}Ñ}½Õ¹ÐÅÕ½Ðì°ÅÕ½ÐíÁÑÈÅÕ½Ðì°ÀÌØí¡EÕÉä¤($%%ÉɽÈÐìÀQ¡¸($$%IÑÕɸMÑÉÉ½È È°À°ÀÌØíME1%Q}5%MUM¤($%¹%($%%ÀÌØí¥IÙ±} ½± ¹ÑlÁtÐìÀQ¡¸($$%I¥´ÀÌØíI½ÝlÀÌØí¥IÙ±} ½± ¹ÑlÁut($$%½ÈÀÌØí¤ôÀQ¼ÀÌØí¥IÙ±} ½± ¹ÑlÁt´Ä($$$%%9½ÐÀÌØí ¥¹ÉäQ¡¸($$$$$ÀÌØí¥IÙ±}½±ÑåÁô±± ±° ÀÌØí}¡±±}ME1¥Ñ°ÅÕ½Ðí¥¹Ðé°ÅÕ½Ðì°ÅÕ½ÐíÍű¥ÑÍ}½±Õµ¹}ÑåÁÅÕ½Ðì°ÅÕ½ÐíÁÑÈÅÕ½Ðì°ÀÌØí¡EÕÉä°ÅÕ½Ðí¥¹ÐÅÕ½Ðì°ÀÌØí¤¤($$$$%%ÉɽÈÐìÀQ¡¸($$$$$%IÑÕɸMÑÉÉ½È Ð°À°ÀÌØíME1%Q}5%MUM¤($$$$%¹%($$$$%%ÀÌØí¥IÙ±}½±ÑåÁlÁtôÀÌØíME1%Q}9U10Q¡¸($$$$$$ÀÌØíI½ÝlÀÌØí¥tôÅÕ½ÐìÅÕ½Ðì($$$$$% ½¹Ñ¥¹Õ1½½À($$$$%¹%($$$$$ÀÌØíÍIÙ°ô±± ±° ÀÌØí}¡±±}ME1¥Ñ°ÅÕ½ÐíÝÍÑÈé°ÅÕ½Ðì°ÅÕ½ÐíÍű¥ÑÍ}½±Õµ¹}ÑáÐÄØÅÕ½Ðì°ÅÕ½ÐíÁÑÈÅÕ½Ðì°ÀÌØí¡EÕÉä°ÅÕ½Ðí¥¹ÐÅÕ½Ðì°ÀÌØí¤¤($$$$%%ÉɽÈÐìÀQ¡¸($$$$$%IÑÕɸMÑÉÉ½È Ì°À°ÀÌØíME1%Q}5%MUM¤($$$$%¹%($$$$$ÀÌØíI½ÝlÀÌØí¥tôÀÌØíÍIÙ±lÁt($$$%±Í($$$$$ÀÌØí¥ ½± åÑÌô±± ±° ÀÌØí}¡±±}ME1¥Ñ°ÅÕ½Ðí¥¹Ðé°ÅÕ½Ðì°ÅÕ½ÐíÍű¥ÑÍ}½±Õµ¹}åÑÌÄØÅÕ½Ðì°ÅÕ½ÐíÁÑÈÅÕ½Ðì°ÀÌØí¡EÕÉä°ÅÕ½Ðí¥¹ÐÅÕ½Ðì°ÀÌØí¤¤($$$$%%ÉɽÈÐìÀQ¡¸($$$$$%IÑÕɸMÑÉÉ½È Ô°À°ÀÌØíME1%Q}5%MUM¤($$$$%¹%($$$$$ÀÌØíÙIÍÕ±Ðô±± ±° ÀÌØí}¡±±}ME1¥Ñ°ÅÕ½ÐíÁÑÈé°ÅÕ½Ðì°ÅÕ½ÐíÍű¥ÑÍ}½±Õµ¹}±½ÅÕ½Ðì°ÅÕ½ÐíÁÑÈÅÕ½Ðì°ÀÌØí¡EÕÉä°ÅÕ½Ðí¥¹ÐÅÕ½Ðì°ÀÌØí¤¤($$$$%%ÉɽÈÐìÀQ¡¸($$$$$%IÑÕɸMÑÉÉ½È Ø°À°ÀÌØíME1%Q}5%MUM¤($$$$%¹%($$$$$ÀÌØíÙIÍÕ±ÑMÑÉÕÐô±±MÑÉÕÑ ÉÑ ÅÕ½ÐíåÑlÅÕ½ÐìµÀìÀÌØí¥ ½± åÑÍlÁtµÀìÅÕ½ÐítÅÕ½Ðì°ÀÌØíÙIÍÕ±ÑlÁt¤($$$$$ÀÌØíI½ÝlÀÌØí¥tô ¥¹É䡱±MÑÉÕÑÑÑ ÀÌØíÙIÍÕ±ÑMÑÉÕаĤ¤($$$%¹%($$%9áÐ($$%IÑÕɸÀÌØíME1%Q}=,($%±Í($$%IÑÕɸMÑÉÉ½È ´Ä°À°ÀÌØíME1%Q}5AQd¤($%¹%(%±Í쥹°¸ÀÌØíME1%Q}=9($%}ME1¥Ñ}EÕÉ她±¥é ÀÌØí¡EÕÉä¤($%%ÀÌØí¥IÙ±}MÑÁlÁt±ÐìÐìÀÌØíME1%Q}=,Q¡¸MÑÉÉ½È ´Ä¤($%IÑÕɸÀÌØí¥IÙ±}MÑÁlÁt(%¹%)¹Õ¹ìôôÐí}ME1¥Ñ}Ñ¡Ñ Using UTF-16 routines may save you with many problems with encodings. What do you think about theese UDF's? -
I've made some modifications in _SQLite_Open UDF: Func _SQLite_Open($sDatabase_Filename = ":memory:") Local $avRval, $bDatabase_Filename If IsKeyword($sDatabase_Filename) Then $sDatabase_Filename = ":memory:" $bDatabase_Filename = StringToBinary($sDatabase_Filename, 4) $avRval = DllCall($g_hDll_SQLite, "int:cdecl", "sqlite3_open", "str", BinaryToString($bDatabase_Filename, 1) _ ; Database filename in UTF-8 , "long_ptr", 0) ; OUT: SQLite db handle If @error > 0 Then Return SetError(1, $SQLITE_MISUSE, 0) ElseIf $avRval[0] = $SQLITE_OK Then $g_hDB_SQLite = $avRval[2] __SQLite_hAdd($avRval[2], $SQLITE_DBHANDLE) Return SetError(0, $avRval[0], $avRval[2]) Else __SQLite_ReportError($avRval[2],"_SQLite_Open") _SQLite_Close($avRval[2]) Return SetError(-1, $avRval[0], 0) EndIf EndFunc ;==>_SQLite_OpenoÝ÷ Ù8^×Ëhq©enÊ¥×·¢§ý¼"¶âéÚç§r^v)ÔL_+"²·ªº*Þu¼²©bµíè¥éÿmû§rب8b²+.±çî'ßW§jg¨Ø«yËh¯'(Ö¢Éè !j¶µêìÞÅ©©æöë]øï~üß¿7Ûöã}¸ßn7Ûöão5ÛÍvóW[ý°%²Þq«¬zz0ëh"Ýâ±Iâr^jeÆÔL]z®w¬~º&²©bµébn¶«Êf²më¬yÑhìZ^jëh×6Func _SQLite_Open16($sDatabase_Filename = ":memory:") Local $avRval If IsKeyword($sDatabase_Filename) Then $sDatabase_Filename = ":memory:" $avRval = DllCall($g_hDll_SQLite, "int:cdecl", "sqlite3_open16", "wstr", $sDatabase_Filename _ ; Database filename , "long_ptr", 0) ; OUT: SQLite db handle If @error > 0 Then Return SetError(1, $SQLITE_MISUSE, 0) ElseIf $avRval[0] = $SQLITE_OK Then $g_hDB_SQLite = $avRval[2] __SQLite_hAdd($avRval[2], $SQLITE_DBHANDLE) Return SetError(0, $avRval[0], $avRval[2]) Else __SQLite_ReportError16($avRval[2],"_SQLite_Open16") _SQLite_Close($avRval[2]) Return SetError(-1, $avRval[0], 0) EndIf EndFunc ;==>_SQLite_Open This example uses sqlite_open16 routine. In fact _SQLite_Open16 function may be used in ANSI version but only in Unicode version filename isn't converted and it is passed directly to sqlite_open16 routine. I added few new UTF-16 bases UDF's for myself. Do you think they may be useful to others?