本帖最后由 kk_lee69 于 2016-6-24 09:53 编辑
回复 18# mikezunya
問題解決了 幫你測試出來了
注意聽好了 要改寫 SQLITE 的UDF
因為 原本的 _SQLite_Exec 會將你輸入的SQL語法轉成 UTF-8 因此 不能用這個
需要自己建立一個 _SQLite_Exec2 然後將裡面 轉換成 UTF-8 的語法 改成 另外一個函數
建立一個 __SQLite_StringToUtf8Struct2 由 _SQLite_Exec2 呼叫這個
然後再將 __SQLite_StringToUtf8Struct2 裡面的 65001 改成 936
然後就可以成功了~~~ 細節我沒測試 你在 自行修改與測試 方向應該沒錯
附上幾段我改的地方
_SQLite_Exec2($barserverdb, "INSERT INTO tbl_ProcessDenySecurity (Name,Desc,MD5,Size,Type) VALUES ('" & $linshi2[1] & "','" & $linshi2[2] & "','" & $linshi2[3] & "','2048','16');")
GUICtrlCreateListViewItem($linshi2[1] & "|" & $linshi2[2] & "|" & $linshi2[3], $ListView1)
If @error Then
MsgBox(48, "", "數據庫寫入失敗,原因" & @error)
Exit
EndIf
Func _SQLite_Exec2($hDB, $sSQL, $sCallBack = "")
If __SQLite_hChk($hDB, 2) Then Return SetError(@error, 0, $SQLITE_MISUSE)
If $sCallBack <> "" Then
Local $iRows, $iColumns
Local $aResult = "SQLITE_CALLBACK:" & $sCallBack
Local $iRval = _SQLite_GetTable2d($hDB, $sSQL, $aResult, $iRows, $iColumns)
If @error Then Return SetError(3, @error, $iRval)
Return $iRval
EndIf
Local $tSQL8 = __SQLite_StringToUtf8Struct2($sSQL)
If @error Then Return SetError(4, @error, 0)
Local $avRval = DllCall($g_hDll_SQLite, "int:cdecl", "sqlite3_exec", _
"ptr", $hDB, _ ; An open database
"ptr", DllStructGetPtr($tSQL8), _ ; SQL to be executed
"ptr", 0, _ ; Callback function
"ptr", 0, _ ; 1st argument to callback function
"long*", 0) ; Error msg written here
If @error Then Return SetError(1, @error, $SQLITE_MISUSE) ; Dllcall error
__SQLite_szFree($avRval[5]) ; free error message
If $avRval[0] <> $SQLITE_OK Then
__SQLite_ReportError($hDB, "_SQLite_Exec", $sSQL)
SetError(-1)
EndIf
Return $avRval[0]
EndFunc ;==>_SQLite_Exec
; #INTERNAL_USE_ONLY# ===========================================================================================================
; Name...........: __SQLite_StringToUtf8Struct
; Description ...: UTF-16 to UTF-8 (as struct) conversion
; Syntax.........: __SQLite_StringToUtf8Struct($sString)
; Parameters ....: $sString - String to be converted
; Return values .: Success - Utf8 structure
; Failure - Set @error
; Author ........: jchd
; Modified.......: jpm
; ===============================================================================================================================
Func __SQLite_StringToUtf8Struct2($sString)
Local $aResult = DllCall("kernel32.dll", "int", "WideCharToMultiByte", "uint", 54936, "dword", 0, "wstr", $sString, "int", -1, _
"ptr", 0, "int", 0, "ptr", 0, "ptr", 0)
If @error Then Return SetError(1, @error, "") ; Dllcall error
Local $tText = DllStructCreate("char[" & $aResult[0] & "]")
$aResult = DllCall("Kernel32.dll", "int", "WideCharToMultiByte", "uint", 54936, "dword", 0, "wstr", $sString, "int", -1, _
"ptr", DllStructGetPtr($tText), "int", $aResult[0], "ptr", 0, "ptr", 0)
If @error Then Return SetError(2, @error, "") ; Dllcall error
Return $tText
EndFunc ;==>__SQLite_StringToUtf8Struct
附上 我編譯的程式 你可以測試看看 寫入後 會有錯誤訊息 我沒時間找問題在哪
因為 我的是繁體 測試 還得找 簡體系統 很麻煩
但是 字的編碼問題應該解決了 細節 可能您要研究看看
|