Delphi 7,ADO,读取" DBase IV"中的BLOB字段中的二进制数据。表。如何禁用音译?

时间:2014-04-01 14:07:52

标签: delphi blob ado dbase bde

我正在使用Delphi 7和ADO(TAdoTable组件)。

我需要使用ADO从“DBase IV”表(dbf / dbt)读取二进制数据。二进制数据存储在BLOB字段中。

此表先前由BDE以编程方式创建(使用了TTable组件)。 BLOB字段的“Transliterate”属性设置为false,因此该表中的二进制数据存储没有变化,“按原样”(我通过HexEdit检查)。

我所需要的只是通过NO TRANSLITERATION读取这个二进制数据。

我的步骤:

Source   : TADOTable;
prepList : TBlobField;
str      : string;
...

Source.Open;  //Open table
prepList:=source.FieldByName('PREPLIST') as TBlobField;  //Get BLOB field
prepList.Transliterate:=false; //No need to transliterate
...

str:=prepList.AsString;  //Reading data
...

“str”中的数据有时与实际存储的数据不同。 例如,我得到:

$AF $67

而不是实际数据,因为它存储在表的DBT部分中:

$F4 $67

当我以完全相同的方式使用BDE和TTable组件时(Transliterate:= false),这没关系。但是对于ADO,尽管有音译价值,它总是音译数据。如果将Transliterate设置为true,也可以使用BDE获得相同的结果。

也许我需要在ConnectionString中设置一些参数?

我尝试了这些ConnectionStrings(%s - 表目录的路径):

//Using provider JET 4.0
cConnectionString=
'Provider=Microsoft.Jet.OLEDB.4.0;'+
'User ID=Admin;'+
'Data Source=%s;'+
'Mode=Share Deny None;'+
'Extended Properties=DBASE IV;'+
'Jet OLEDB:System database="";'+
'Jet OLEDB:Registry Path="";'+
'Jet OLEDB:Database Password="";'+
'Jet OLEDB:Engine Type=17;'+
'Jet OLEDB:Database Locking Mode=0;'+
'Jet OLEDB:Global Partial Bulk Ops=2;'+
'Jet OLEDB:Global Bulk Transactions=1;'+
'Jet OLEDB:New Database Password="";'+
'Jet OLEDB:Create System Database=False;'+
'Jet OLEDB:Encrypt Database=False;'+
'Jet OLEDB:Don''t Copy Locale on Compact=False;'+
'Jet OLEDB:Compact Without Replica Repair=False;'+
'Jet OLEDB:SFP=False;';

//Using ODBC driver
cConnectionString=
'Driver={Microsoft dBASE Driver (*.dbf)};'+
'DriverID=277;'+
'Dbq=%s;';

两种方式 - 结果相同。

如何让ADO不在BLOB字段中音译二进制数据?

更新: 我只能使用默认情况下可用的数据提供程序或ODBC驱动程序(程序将在虚拟用户计算机上运行)。所以我不能使用例如VFPOLEDB或其他需要安装的提供程序。另外,据我所知,VFPOLEDB仅适用于FoxPro,而不适用于DBase表。

0 个答案:

没有答案