求救:在delphi程序中,用adoquery把dbf文件导入到access数据库,中文字段会出现乱码

woshisqlaihaozhe2 2012-03-12 08:42:15
各位大侠,小弟刚接触dbf文件不久,出现上面的问题,请赐教
dbf表结构与access表结构是一样的
如果字段是中文,导入到access表中字段就变成乱码
前台delphi程序调用access数据库的时候字段也是乱码

//复制一个空的access数据库到data目录下面
CopyFile(PChar(gExePath + 'DataModle\ItemDistribute.mdb'), PChar(gExePath + 'Data\ItemDistribute.mdb'), False);
MemInfor.Lines.Add('开始把上传数据导入到access数据库...');
qrydistribute.ConnectionString :=
'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='''+PChar(gExePath + 'Data\ItemDistribute.mdb')+''';Persist Security Info=False';
qrydistribute.Close;
//导入考场表
qrydistribute.SQL.Clear;
qrydistribute.SQL.Add('insert into 考场表(Kc_h,Ss_h,Ss_rs,Bz) select Kc_h,Ss_h,Ss_rs,Bz from 考场表 in '''+PChar(sourcenew)+''' ''dbase 5.0;''');
qrydistribute.ExecSQL;
...全文
143 点赞 收藏 20
写回复
20 条回复
wwwwb 2012年03月12日

上传你的DBF到www.access911.net/csdn
,用WINRAR压缩
回复 点赞
woshisqlaihaozhe2 2012年03月12日
[Quote=引用 16 楼 woshisqlaihaozhe2 的回复:]
引用 14 楼 apple_8180 的回复:
你改用:
用oledb for vfp(如9.0 Microsoft OLE DB Provider for Visual FoxPro 9.0)连接,可支持vfp的大部分命令
不是oledb for odbc

oledb for vfp下载地址:
http://www.microsoft.com/download/en/details……
[/Quote]
写错了,是oledb for vfp用户端必须要安装吗?
回复 点赞
十豆三 2012年03月12日
[Quote=引用 16 楼 woshisqlaihaozhe2 的回复:]
十分感谢
我这个程序做好之后发给用户
用户端需要安装oledb for odbc吗?
这个程序是发给用户使用的
[/Quote]需要安装
回复 点赞
woshisqlaihaozhe2 2012年03月12日
[Quote=引用 14 楼 apple_8180 的回复:]
你改用:
用oledb for vfp(如9.0 Microsoft OLE DB Provider for Visual FoxPro 9.0)连接,可支持vfp的大部分命令
不是oledb for odbc

oledb for vfp下载地址:
http://www.microsoft.com/download/en/details.aspx?displaylang=en&……
[/Quote]

十分感谢
我这个程序做好之后发给用户
用户端需要安装oledb for odbc吗?
这个程序是发给用户使用的
回复 点赞
woshisqlaihaozhe2 2012年03月12日
[Quote=引用 12 楼 wwwwb 的回复:]
SQL中的内容是什么,直接在ACCESS中运行结果,sourcenew是什么内容
[/Quote]

sourcenew是当前要操作dbf文件的路径
回复 点赞
十豆三 2012年03月12日
你改用:
用oledb for vfp(如9.0 Microsoft OLE DB Provider for Visual FoxPro 9.0)连接,可支持vfp的大部分命令
不是oledb for odbc

oledb for vfp下载地址:
http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=14839
Version: 1.2
Date Published: 5/16/2008
Language: English

File Name Size
vfpoledb.msm 829 KB
VFPOLEDBSetup.msi 1.0 MB (安装此项)

安装完oledb for vfp后,建一ado连接,选oledb for vfp,如果是数据库,连接到数据库,如果是自由表,连接到自由表所在目录,然后建一ado command或用ado连接的execute方法

然后用
Select a.Ks_h,b.Xm,a.Zx_h From 考生信息表 a Left Join 考生姓名表 b On a.ks_h=b.ks_h

Select a.Ks_h,b.Xm,a.Zx_h From 考生信息表 a Inner Join 考生姓名表 b On a.ks_h=b.ks_h
试试,即不用 Access 中转了。
回复 点赞
十豆三 2012年03月12日
你的写法不懂,vfp 中可以直接:
Select a.Ks_h,b.Xm,a.Zx_h From 考生信息表 a Left Join 考生姓名表 b On a.ks_h=b.ks_h

Select a.Ks_h,b.Xm,a.Zx_h From 考生信息表 a Inner Join 考生姓名表 b On a.ks_h=b.ks_h
回复 点赞
wwwwb 2012年03月12日
SQL中的内容是什么,直接在ACCESS中运行结果,sourcenew是什么内容
回复 点赞
woshisqlaihaozhe2 2012年03月12日
[Quote=引用 8 楼 wwwwb 的回复:]
直接运行:
select * from [dbase 5.0;database=r:\temp].a a1 left join
[dbase 5.0;database=r:\temp].b a2 on a1.id=a2.id
[/Quote]

qrydistribute.SQL.Clear; qrydistribute.SQL.Add(' select * from [dbase 5.0;database='+PChar(sourcenew)+'].考生信息表 ');
qrydistribute.Open;
ShowMessage(IntToStr(qrydistribute.RecordCount));

这样直接回报错误:
project raised exception class eoleexception with message '不正常地定义参数对象,提供了不一致或不完整的信息‘

回复 点赞
woshisqlaihaozhe2 2012年03月12日
[Quote=引用 8 楼 wwwwb 的回复:]
直接运行:
select * from [dbase 5.0;database=r:\temp].a a1 left join
[dbase 5.0;database=r:\temp].b a2 on a1.id=a2.id
[/Quote]
谢谢
我试一下
我的adoquery连接的是access数据库
回复 点赞
woshisqlaihaozhe2 2012年03月12日
[Quote=引用 7 楼 apple_8180 的回复:]
sql语句可以直接操作多个dbf表关联查询
可以的,你说一下要求
[/Quote]
我是这样写的,无法执行
就是2个表根据考生号关联,取出b表的考生姓名
你帮忙看下哪里的错误?

qrydistribute.ConnectionString :=
'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='''+PChar(gExePath + 'Data\ItemDistribute.mdb')+''';Persist Security Info=False';
qrydistribute.Close;

//导入考生信息表
qrydistribute.SQL.Clear;
qrydistribute.SQL.Add('insert into 考生信息表(Ks_h,Xm,Kc_h) select a.Ks_h,b.Xm,a.Zx_h from 考生信息表 in '''+PChar(sourcenew)+''' ''dbase 5.0;'' a,'+'考生姓名表 in '''+PChar(sourcenew)+''' ''dbase 5.0;'' b where a.ks_h=b.ks_h');
qrydistribute.ExecSQL;
回复 点赞
wwwwb 2012年03月12日
直接运行:
select * from [dbase 5.0;database=r:\temp].a a1 left join
[dbase 5.0;database=r:\temp].b a2 on a1.id=a2.id
回复 点赞
十豆三 2012年03月12日
sql语句可以直接操作多个dbf表关联查询
可以的,你说一下要求
回复 点赞
woshisqlaihaozhe2 2012年03月12日
[Quote=引用 4 楼 apple_8180 的回复:]
看一下从 dbf 读出,导入 Access 之前是不是乱码。
[/Quote]
是正常的,不是乱码
回复 点赞
woshisqlaihaozhe2 2012年03月12日
[Quote=引用 3 楼 wwwwb 的回复:]
DBF是怎么建立的,直接在ACCESS中运行结果如何
[/Quote]
你好,wwwb
dbf是通过vf程序建立的
直接在access中运行没有乱码

还有一个问题:
如果sql语句可以直接操作多个dbf表关联查询的话,我就不用把dbf导入到access数据库中了
现在就是由于要对多个表关联查询并处理,所以我的想法是:
1.把dbf导入到access数据库中
2.在access中把数据处理好
3.再把access数据导入到dbf文件中
4.完成
你看这样对吗?
回复 点赞
十豆三 2012年03月12日
看一下从 dbf 读出,导入 Access 之前是不是乱码。
回复 点赞
wwwwb 2012年03月12日
DBF是怎么建立的,直接在ACCESS中运行结果如何
回复 点赞
woshisqlaihaozhe2 2012年03月12日
[Quote=引用 1 楼 xuzuning 的回复:]
access数据库的字段类型有问题吧?
存放中文的只能是 char、text 而不能是 nchar、ntext
[/Quote]
你好,xuzuning
我刚查看了access数据库,中文字段的数据类型都设置的是文本
回复 点赞
xuzuning 2012年03月12日
access数据库的字段类型有问题吧?
存放中文的只能是 char、text 而不能是 nchar、ntext
回复 点赞
woshisqlaihaozhe2 2012年03月12日
[Quote=引用 19 楼 wwwwb 的回复:]
上传你的DBF到www.access911.net/csdn
,用WINRAR压缩
[/Quote]
多谢了
我现在采用直接操作dbf的方法暂时没有发现有乱码
可能是dbf和access表转换的时候由于字段编码的问题导致的
回复 点赞
发动态
发帖子
VFP
创建于2007-09-28

2283

社区成员

2.9w+

社区内容

VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区公告
暂无公告