我沒用過 SQLLITE只是看到 說明內定是 UTF-8 那就表示 內定是採UNZICODE 方式
如果無法改ANSI
那我就更肯定 存在資料庫上的東西與 UNCODE 或者 ANSI 無關才對.......
話說回來方便提供 資料庫與 你的程式與法 我測試看看嗎?? 本帖最后由 mikezunya 于 2016-6-24 13:36 编辑
回复 17# kk_lee69
这是数据库与源码,解压密码我私聊发给你了 本帖最后由 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 & "','" & $linshi2 & "','" & $linshi2 & "','2048','16');")
GUICtrlCreateListViewItem($linshi2 & "|" & $linshi2 & "|" & $linshi2, $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) ; free error message
If $avRval <> $SQLITE_OK Then
__SQLite_ReportError($hDB, "_SQLite_Exec", $sSQL)
SetError(-1)
EndIf
Return $avRval
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 & "]")
$aResult = DllCall("Kernel32.dll", "int", "WideCharToMultiByte", "uint", 54936, "dword", 0, "wstr", $sString, "int", -1, _
"ptr", DllStructGetPtr($tText), "int", $aResult, "ptr", 0, "ptr", 0)
If @error Then Return SetError(2, @error, "") ; Dllcall error
Return $tText
EndFunc ;==>__SQLite_StringToUtf8Struct
附上 我編譯的程式你可以測試看看寫入後 會有錯誤訊息我沒時間找問題在哪
因為 我的是繁體測試 還得找 簡體系統 很麻煩
但是字的編碼問題應該解決了細節 可能您要研究看看
回复 18# mikezunya
剛剛再仔細的分析一下 資料其實不太一樣但是我覺得應該是 用936 的號碼不對
回复 18# mikezunya
參考一下這個網頁
https://msdn.microsoft.com/zh-tw/library/windows/desktop/dd317756(v=vs.85).aspx 回复 19# kk_lee69
找到正確編碼了 54936
GB18030 Windows XP and later: GB18030 Simplified Chinese (4 byte); Chinese Simplified (GB18030) 回复 19# kk_lee69
無法解決你的問題嗎我認為應該是可以解決才是?? 本帖最后由 mikezunya 于 2016-6-24 13:29 编辑
回复 23# kk_lee69
可以解决,非常感谢。但是程序会有报错,我想应该问题不大,我正在看你写的那个代码的意思。{:face (88):}
页:
1
[2]