表格和数据表
TablaLanguage.fieldRussian
的数据类型为varbinary(max)
此处存储的数据示例为:0xC3B1C3A0C3B5C3A0C3B0
TableString.fieldRussian
的数据类型为nvarchar(max)
数据
示例数据的英文翻译是酒精
我试过的代码/事情
检索不带0x前缀的varbinary数据我使用以下强制转换
SELECT CONVERT(VARCHAR(1000), language18, 2)
FROM decl_groups
WHERE language1 = 'suiker'
但是,如果我使用ODBC查询在VFP中执行相同的精确转换,我会得到不同的结果。
ODBC查询:
TEXT TO cSQL NOSHOW
select CONVERT(VARCHAR(1000), fieldRussian, 2) as alcohol
from TablaLanguage
where language1 = 'alcohol'
ENDTEXT
ODBC_Query(cSQL, "test")
在vfp中,结果是
'C3A0C3ABC3AAC3AEC3A3C3AEC3ABC3BC20202020202020202020202020202020202020202020202020202020202020202020202020202020202020'
问题:我已经尝试了各种STRCONV()和SYS(),但我似乎没有让它工作..我想我甚至没有得到正确的输入开始到SRTCONV()开始,因为它与我在DB中的目标不一样。有人知道如何进行这种转换,并且可以向我解释这一点,这将是一个很大的帮助。
答案 0 :(得分:1)
在您上一篇文章中,我向您推荐了Rick Strahl(Using Unicode in Vfp)的一篇有用的文章,其中他谈到了VPF和Unicode。
在这里考虑你的问题是我如何解决它:
** Selection from Binary table **
TEXT TO cSQL NOSHOW
select fieldRussian as alcohol
from TablaLanguage
where language1 = 'alcohol'
ENDTEXT
CURSORSETPROP("MapBinary",.t.,0)
ODBC_Query(cSQL, "cBinaryData")
lcBinaryString = cBinaryData.alcohol
** Insert into nVarchar table **
TEXT TO cSQL_Vc NOSHOW
INSERT INTO TableString(fieldRussian) VALUES (CAST(?lcBinaryString as nVarchar(MAX)))
ENDTEXT
ODBC_Query(cSQL_Vc, "cData")
将光标的属性MapBinary设置为.T。我将SQL Varbinary映射到VPF blob类型。
正如他所说,不幸的是,Vpf本身并不支持Unicode,所以如果你在VPF表单中的UNICODE中显示somenthing,你应该使用一些ActiveX控件。
答案 1 :(得分:0)
所以经过大量的搜索,这就是我的工作方式。似乎不可能将varbinary字段作为nvarchar存储到另一个表中,只有SQL。所以foxpro需要使用activeX Control。 一个真实的表达,为什么它以这种方式工作我无法给予,但如果有人能帮助我理解它总是我们的结果。
IF!EMPTY(cexport_ingred_decl.declaratie_blob)
&安培;&安培;作为varbinary存储在db中的字段,需要作为nvarchar存储在另一个表中
写给cSQL NOSHOW
选择代码页作为codepagina
来自代码页
WHERE language =?ccur_talen.taalnummer
ENDTEXT
ODBC_Query(cSQL,' ccur_codepages')
SYS(3101, ccur_codepages.codepagina)
oform.addobject("oletextbox1","recoletextbox")
test = STRCONV(cexport_ingred_decl.declaratie_blob,9)
oform.oletextbox1.text = STRCONV(test,11)
SYS(3101,0)
USE IN ccur_codepages
SYS(987,.F.)
SYS(3101,65001)
*** Convert UTF-8 to Unicode and store as BINARY string!!!
pcSavedDescription = STRCONV(oform.oletextbox1.text,12)
pcSavedDescription = CREATEBINARY(pcSavedDescription)
oform.removeobject("oletextbox1")
ENDIF
INSERT IN DB如下: INSERT INTO tablename(字段) VALUES(CAST(?pcSavedDescription as nvarchar(max)))