我遇到了使用LiveCode的問題,但我不知道問題出在哪裏,或者是否與ODBC驅動程序有關。使用LiveCode通過ODBC從SQL Server檢索unicode數據
LiveCode中內置的應用程序通過ODBC定期連接到SQL Server數據庫,以檢索各種數據。
負責該數據庫的應用程序正在升級,並作爲其中的一部分,所有的文本字段都被轉化爲Unicode文本字段。實質上,這意味着之前定義爲varchar的字段現在被定義爲nvarchar,而之前定義爲文本的字段現在定義爲ntext。 (這是順便說一下SQL Server 2008中。)
使用我們一直在過去使用的查詢,我們現在得到一個字符(在該領域的第一個字符),而不是整個文本。我可以解決這個現在在選擇查詢指定轉換爲varchar,例如當用來製造像 SELECT ID的請求的應用程序,名字從TAB1 現在使得像 SELECT ID的請求,轉換(VARCHAR (255),name)AS name FROM tab1
這就行得通 - 我找回了我以前得到的東西 - 但(a)它很笨拙,(b)現在很好,當客戶端正在遷移所有現有的數據存入數據庫,但遲早他們可能會利用這種升級的方式在字段中輸入一些Unicode字符,然後我大概不會把它們拿出來。
不幸的是我沒有訪問數據庫或應用程序,以便插入測試數據 - 但我假設會出現這樣的問題 - 最有可能不會很明顯,即有將只是一個微妙的問題,我的應用程序不處理輸入的數據(但認爲是)。
所以:是有辦法,一個LiveCode應用程序,使用當前的ODBC驅動程序,可以從一個nvarchar或ntext字段檢索正確完整的數據?
您目前使用哪些代碼從數據庫中提取數據? – runrevmark 2013-03-20 13:11:55
查看以下Monte的答案 - 真正使用'revdb_query','revdb_movenext'和'revdb_columnbynumber',但是嘗試使用'revQueryDatabase' /'revMoveToNextRecord' /'revDatabaseColumnNumbered'來代替,並且產生了相同的(錯誤的)結果。 在同一數據庫的測試應用程序中使用'revDataFromQuery'確實會檢索完整的數據,但不幸的是在這個應用程序中不是一個簡單的選項。 – 2013-03-21 12:39:21
你在使用revDatabaseColumnNumbered()的結果,還是在第三個參數中使用「持有者變量」?由於UTF-16是二進制數據,因此不能使用結果。 – runrevmark 2013-03-21 13:22:32