奇怪,ADO+DBF摆脱不了BDE? (重申说明问题),诚请各大侠看看 (50分)

  • 主题发起人 主题发起人 flyat
  • 开始时间 开始时间
F

flyat

Unregistered / Unconfirmed
GUEST, unregistred user!
一个ADOTable1连接DBF表的程序,当移动BDE所在目录,
然后运行时发现数据只能浏览,修改报错;移回BDE就正常?
 
不要用bde了,启动时重新构造connectionstring中的字符串.用odbc什么的都行.
 
to zhengct
先谢谢你第一个回答了我的问题,但你搞错了,当然是用odbc连接。 审题
 
你通过ole db再去连odbc,然后odbc在去连你的数据库驱动。
你如果这样做的话,就是多此一举了。
搞不懂为什么需要这样。
 
用Access + ADO
Prodax + BDE
 
ado+BDE 特别不稳定,在新的环境里可能会出错,
建议不要用,各地的客户不时的来投诉。
 
我想ADO连接DBE还不至于那么菜。但事实上建立的连接出现了问题。

to shangshang
请告诉我用什么办法连接,谢谢!
 
因什么我用ADO去连DBF?

从需求上:
当发布一个很小很小的,太不象数据库而又带数据库的程序,我真不想带BDE驱动引擎。
当然可以用ADO+ACCESS,但也不是绝对不用额外开销。

从技术上:
既然mdb可以这样进行,OLE DB->ODBC->ACCESS数据驱动的话
DBF当然可以用同样方式:OLE DB->ODBC->dBASE等DBF数据驱动。
因为ADO理论上可以通过ODBC连接任何所提供或安装的任何数据驱动。
按理说好象跟BDE谈不上任何关系,最痛恨的是失去BDE却问题多多??
如果这个问题有价值的话,将公布我所用的对ConnectionString的几种配置方法及
几种DBF格式的测试结果。若根本不值一提,只好结束问题了:(

我确实不想带着阴影学习或者理解ADO。
 
你是说ado+odbc+dbf,连接不成功,跟bde有什么关系呀.
理论上这样应该是可以的,你说移动BDE目录,结果导致
数据只能浏览不能修改,你是不是用ODBC连接DBF的文件用到了
BORLAND的文件,你换成foxpro的试试.
//希望与你讨论这个问题直到水落石出,
hbezwwl@163.com
53320295
 
to hbezwwl
首先用视图提供:Provider=MSDASQL.1;Persist Security Info=False;Data Source=dBASE Files连接
dBase数据库,结果出现如题情况,出现一个update错误,所以一开如怀疑可能用到BORLAND文件。
但从出错信讯看来又不象,如下:
[Microsoft][ODBC dBase Driver] Operation must use an updateable query
是不是参数有问题,换做:
Provider=MSDASQL.1;Persist Security Info=False;Extended Properties=[CollatingSequence=ASCII;
DBQ=位置;DefaultDir=位置;Deleted=0;Driver={Microsoft dBase Driver (*.dbf)};FIL=dBase 5.0;]
也不行,干脆
Driver={Microsoft dBase driver (*.dbf)};FIL=dBASE Files;
出局。看来只有寻求另外方式连接:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=位置;Extended Properties='dbase 5.0 Persist Security Info=False';
结果都是同种错误,真怀疑它们的底层都是一致的。

最后我如hbezww所说的用FOXPRO,参数如下:
Provider=MSDASQL.1;Extended Properties="Driver={Microsoft Visual Foxpro Driver};SourceType=DBF;SourceDB=位置";
这个也搞得我一肚苦水,但至少还有点意思
dBase3.5 修改失败,
dBase4 修改可以,添加失败;出错:无效值
dBase5 修改可以,添加可以,但新记录不可以空值,出错为不可空值,界面虽如此,
但其实数据(包括空值)已经填充在表中。

上面用的都是平面表,不敢用关系表测之,惨不忍睹。
 
ADO+DBF, 干BDE何事?
我觉得这之间没有什么关系~

继续关注!
 
这样吧,你能不能把你的DBF文件发给我,让我也试试.
//晚上可能有时间的,
 
不知道你在ODBC里面用的是那个Driver呢?。。

建议检查一下。。。DBF也有多个Driver可以进行选择的。。。[:)]
 
发现:
所有对ODBE用dBase驱动连接请求都居然用到BDE下的Iddbas32.dll驱动函数库?
(更改Iddbas32.dll名称时触动权限保护而移动BDE时不会?)
那Microsof的odbcjt32.dll驱动函数库用来干什么?两者居然很相好,
BORLAND的Iddbas32.dll和MICROSOF的odbcjt32.dll相互调用,缺一不可?
一个负责更新,一个负责查询。
ADO究竟是怎么搞的?ADO究竟在搞什么?
 
ado连接dbf,给你一段code。你去试试看!
//ado创建dbf
procedure TForm1.Button1Click(Sender: TObject);
var
DBPath: String;
begin
DBPath:='e:/dfwtest/test7';//你的数据库路径目录;
ADOConnection1.ConnectionString:='Provider=MSDASQL.1;'
+'Persist Security Info=False;'
+'Extended Properties='
+'"Driver={Microsoft Visual FoxPro Driver};'
+'UID=;'
+'SourceDB='+ DBPath + ';'
+'SourceType=DBF;'
+'Exclusive=No;'
+'BackgroundFetch=Yes;'
+'Collate=Machine;'
+'Null=Yes;'
+'Deleted=Yes;"';
AdoConnection1.Open;
AdoQuery1.Sql.Text := 'create table "aaa.dbf" (aaa char(2))';
//AdoQuery1.Sql.Text := 'create table "ddd.dbf" (aaa char(2)),fff float(3),eee numeric (4,1),torf boolean ,rdate date)';
AdoQuery1.ExecSql;
end;
//ado打开dbf
procedure TForm1.Button3Click(Sender: TObject);
var
DBPath: String;
begin
DBPath:='e:/dfwtest/test7';//你的数据库路径;
ADOConnection1.ConnectionString:='Provider=MSDASQL.1;'
+'Persist Security Info=False;'
+'Extended Properties='
+'"Driver={Microsoft Visual FoxPro Driver};'
+'UID=;'
+'SourceDB='+ DBPath + ';'
+'SourceType=DBF;'
+'Exclusive=No;'
+'BackgroundFetch=Yes;'
+'Collate=Machine;'
+'Null=Yes;'
+'Deleted=Yes;"';
AdoQuery1.close;
AdoQuery1.sql.clear;
AdoQuery1.sql.Text := 'select * from ddd.dbf';
adoquery1.Open;
end;
//修改,更换路径后要改上面代码中的DBPath变量值
procedure TForm1.Button4Click(Sender: TObject);
begin
AdoQuery1.insert;
AdoQuery1.FieldByName('aa').Value := 'bb';
AdoQuery1.Post;
end;

 
to GanQuan
跟我那个 foxpro形式的结果是一样的。


hbezww你好,e好久前发了,收到了吗?
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
952
SUNSTONE的Delphi笔记
S
I
回复
0
查看
908
import
I
I
回复
0
查看
688
import
I
后退
顶部