2017-04-12 90 views
0

TABLES和数据类型如何在俄语/阿拉伯语单词(存储在SQL Server VARBINARY)用VFP转换到另一个表中的SQL Server作为为nvarchar(最大)

  • TablaLanguage.fieldRussian是数据类型的varbinary(max)
  • 这里存储的数据的一个例子是:0xC3B1C3A0C3B5C3A0C3B0

  • TableString.fieldRussian是数据类型nvarchar(max)

  • 和E这里存储xample应该是:алкоголь

数据

英文译名为示例数据是酒精

CODE /事情我已经试过

没有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()的所有种类,但是我不” t似乎得到它的工作..我想我甚至没有得到正确的输入开始到SRTCONV()开始,因为它是不一样的,因为我已经盯着DB.Does任何人都知道如何做到这一点的转换,并可以向我解释这一点,这将是一个很大的帮助。

回答

1

在你之前写过的文章中,我向你推荐了一篇由Rick Strahl撰写的有用文章(Using Unicode in Vfp),其中他谈到了VPF和Unicode。

这里Considerating你的问题是我如何解决它:

** 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,所以如果您要在UNICODE中显示SoF,那么您应该使用一些ActiveX控件。

+0

我尝试了你给解决问题的方式。不幸的是,它并没有为我工作。结果是一些中国人看起来很帅的时候,应该是阿拉伯语或俄语。 所以建议我使用OLE文本框和soms SYS()方法来更改COM页面,最终给了我想要的结果。 我不明白的是这些ActiveX控件究竟是什么使它能够显示所需的文本? – Laura

0

所以经过大量的搜索这是我如何使它的工作。似乎不可能将varbinary字段作为仅包含SQL的nvarchar存储到另一个表中。所以foxpro需要使用一个activeX控件。 为什么它以这种方式工作,我不能给,但如果有人可以帮助我了解它永远是我们的。

IF!EMPTY(cexport_ingred_decl。declaratie_blob)这是存储在数据库为varbinary和需要被存储在另一个表为nvarchar的 文本cSQL NOSHOW SELECT代码页为codepagina FROM代码页 其中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表名称(字段) VALUES(CAST(?pcSavedDescription as nvarchar(max)))

相关问题