ado动态改变路径时出的问题(10分)

  • 主题发起人 主题发起人 嫩手
  • 开始时间 开始时间

嫩手

Unregistered / Unconfirmed
GUEST, unregistred user!
我用的是adoquery+access2000
在程序中写代码动态设置数据源,程序完成后,把它放到其它目录中突然不能用了,然后
再放回原目录也不行,请帮忙看看:
(用断点调试时第一行出错!)
DM.ADOQry.SQL.Clear;
DM.ADOQry.ConnectionString := 'Provider = Microsoft.jet.OLEDB.4.0;Data Source= '+
ExtractFilePath(ParamStr(0))+'Dll 说明.mdb;Persist Security Info=False';
Dm.AdoQry.SQL.Add('Select * From '+Cmb.Text);
try
DM.AdoQry.Open;
except
MessageBox(0,'无法打开数据库,请检查数据库是否存在!','错误',MB_OK);
end;
 
怎么没人回答呀?
 
Dll 说明.mdb是放在同级目录下面吧?
 
是同一级目录,都没错
 
我都不知道第一行为什么会出错?
 
1.用 Access 打开数据一下。有时数据库可以会损坏。:)
压缩一下,就好了。
2.你在IDE下,用控件直接打开那个数据库试试看,可以吗?
 
我在IDE下打开没事
 
建议你先用Ado直接连接!
然后把字符窜和你现在的比较一下!
还有不要用绝对路径!
 
还是不行呀?我已经改成了,还是不行:
DM.ADOQry.ConnectionString := 'Provider = Microsoft.jet.OLEDB.4.0;Data Source= '+
'./Dll 说明.mdb;Persist Security Info=False';
 
改用TADOConnection试试
 
错误对话框是:
Access violation at address 004B8949 in moudle 'dll_readme.exe'. Read of
address 00000058
这是什么意思?
 
还有,我再新建一个工程,把这几句代码拷进去执行都不出错,这会是哪的问题?
 
好了,没事儿了,不过我想再问一下问题:虽然是没事儿了,但我想知道为什么,我是这
样解决的,新建一个工程,把窗体上所有的控件都拷到新工程中,然后再把所有的代码
都拷过去,就没事儿了。现在都是小东西,如果以后做大的工程不会都这样吧?那学这
个都有什么用?没事儿光重做了!有谁知道是为什么?什么原因?(里面的控件一个属性
也没多,一个也没少,代码也都是拷的)
 
对于一个应用程序,最好只用一个adoconnection来建立连接,
然后设置adoquery的connection属性,这样比较方便,并且在主窗体初始化时建立一次连接
就行了,至于连 不上的问题,你最好先手动连接,然后复制过去,这样 不易出错。
 
to idym:
是不是每个用ado的程序最好都用一个adoconnection组件呀?我这个程序没用,只用了
adoquery和datasource?
 
使用一个adoconnection组件有两个含义:
1)只使用一个adoconnection组件,避免使用多个adoconnection组件造成混乱,操作上容易出错
2)使用一个adoconnection组件进行与数据库的连接,特别是在大型程序中可以将多个ADODATASET类
组件与之相连,而且操作时不易发生错误
 
我给你一个我自己写的连接ACCESS数据库文件的例子:

function tfrmain.dbopen:boolean;
var s,ss:string;
begin
ss:=ExtractFileDir(application.ExeName);
if copy(ss,length(ss),1)<>'/' then ss:=ss+'/';
if not fileexists(ss+'/data/pmis.mdb') then
begin
application.MessageBox('找不到PMIS数据库!','错误信息',48);
application.Terminate;
result:=false;
exit;
end;
try
adodb.close;
s:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+ss+'data/pmis.mdb';
s:=s+';Persist Security Info=false';
adodb.ConnectionString:=s;
adodb.Open();
except
try
adodb.close;
s:='Provider=Microsoft.Jet.OLEDB.3.51;Data Source='+ss+'data/pmis.mdb';
s:=s+';Persist Security Info=False';
adodb.ConnectionString:=s;
adodb.Open();
except
on e:exception do
begin
application.MessageBox(pchar('无法连接数据库!'+#13+#13+e.Message),'错误信息',16);
application.Terminate;
exit;
end;
end;
end;
end;
 
你跟踪一下
DM.ADOQry.ConnectionString
看看就知道了
 
没错的,把它放到其它工程里就没事了,我想知道为什么,现在已经没事了,只是想知道,
我下回该怎么避免
 
Delphi中莫名其妙的事情一向来很多,在一个窗口里死活弄不好的同一个问题,其他
窗口里却没有。我想问题在除了PAS的另外几个文件中,我不知道怎么去分析他们而已。

我也经常碰到你这样的问题,有些是因为对象不正常删除,有些是程序误把代码拷贝
成为对象拷贝,还删不干净。重新建一个了,就这样了。以后多编译,好的就存盘,
并且尽快备份到其他目录。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部