不会吧,你在涮我们? ADO动态设置路径的话,ODBC又跑出来?也就是说你用了两种引擎技术?有必要用两种吗?一般情况下没有必要用两种的,你要是用ODBC的话,就用ODBC,不要用ADO,但是你要是用了ADO,就不要用ODBC,没有特殊的情况,不要将两种引擎技术一起用,还有一点,你动态设置了路径,想看一看,你是如何设置路径的如何?还有,你在这儿翻了一个很大的错误,为什么离开Delphi之后就不能用了呢?并不是ODBC的错,而是BDE的错,也就是说,你用了TQuery or TTable or TDataBase or 一些数据库敏感组件,这样,你就根本没有必要用ADO,同时,你也要乖乖的将BDE都给用户端装上,可能17M左右吧,不过,还行,可以精简到10M左右,或更少,至于如何精简 www.nxit.net/bbs里边有方法; 我不知道你是否现在知道了你的错误,用了ADO,就可以不用ODBC,你是否清楚了一些?还有,说实话,不知道你是如何用ADO连接的,不是你指一路径就可以了,给你点代 码,你可以参考一下: DataBaseName:=OpenDialog1.FileName; ConnectStr:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+DataBaseName+';'; ProjectDatamodule.ProjectConnection.Connected:=false; ProjectDatamodule.ProjectConnection.ConnectionString:=''; ProjectDatamodule.ProjectConnection.ConnectionString:=ConnectStr+'Persist Security Info=true'; ProjectDatamodule.ProjectConnection.Connected:=true; projectdatamodule.Projectconnection.GetTableNames(listbox1.Items,false); 参考------------------------------------------------------------- www.nxit.net/bbs 期待您的加入; 我们一起交流
动态设置ado的connectstring不行吗?
在有装Delphi的的状态下可以正常的运行,但该程序在离开Delphi的状态下,运行的时候就会出现过于ODBC的错误: use runtime directroy:procedure TForm1.BitBtn1Click(Sender: TObject); var aStrDir,aStrTBN:String; begin aStrDir:=ExtractFilePath(Application.ExeName); aStrTBN:=aStrDir+'YourTable.dbf'; //Or Your Table Name //or: aStrTBN:='c:\YourTable.dbf'; try
if aStrTBN<>'' then begin if FileExists(aStrTBN) then begin aStrDir:=ExtractFilePath(aStrTBN); with Table1 do begin if Active then Close; DatabaseName :=aStrDir; TableName:=aStrTBN; Active:=True;
end; end else begin showmessage('File Not Fond! '+aStrTBN); end; end; except on E:Exception do begin ShowMessage(E.Message); end; end; end;{ 不要用ado,odbc,用bde 的TTable可以,何以舍近求遠?
ADO动态设置路径的话,ODBC又跑出来?也就是说你用了两种引擎技术?有必要用两种吗?一般情况下没有必要用两种的,你要是用ODBC的话,就用ODBC,不要用ADO,但是你要是用了ADO,就不要用ODBC,没有特殊的情况,不要将两种引擎技术一起用,还有一点,你动态设置了路径,想看一看,你是如何设置路径的如何?还有,你在这儿翻了一个很大的错误,为什么离开Delphi之后就不能用了呢?并不是ODBC的错,而是BDE的错,也就是说,你用了TQuery or TTable or TDataBase or 一些数据库敏感组件,这样,你就根本没有必要用ADO,同时,你也要乖乖的将BDE都给用户端装上,可能17M左右吧,不过,还行,可以精简到10M左右,或更少,至于如何精简 www.nxit.net/bbs里边有方法;
我不知道你是否现在知道了你的错误,用了ADO,就可以不用ODBC,你是否清楚了一些?还有,说实话,不知道你是如何用ADO连接的,不是你指一路径就可以了,给你点代 码,你可以参考一下:
DataBaseName:=OpenDialog1.FileName;
ConnectStr:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+DataBaseName+';';
ProjectDatamodule.ProjectConnection.Connected:=false;
ProjectDatamodule.ProjectConnection.ConnectionString:='';
ProjectDatamodule.ProjectConnection.ConnectionString:=ConnectStr+'Persist Security Info=true';
ProjectDatamodule.ProjectConnection.Connected:=true;
projectdatamodule.Projectconnection.GetTableNames(listbox1.Items,false);
参考-------------------------------------------------------------
www.nxit.net/bbs 期待您的加入;
我们一起交流
use runtime directroy:procedure TForm1.BitBtn1Click(Sender: TObject);
var aStrDir,aStrTBN:String;
begin
aStrDir:=ExtractFilePath(Application.ExeName);
aStrTBN:=aStrDir+'YourTable.dbf'; //Or Your Table Name
//or: aStrTBN:='c:\YourTable.dbf';
try
if aStrTBN<>'' then
begin
if FileExists(aStrTBN) then
begin
aStrDir:=ExtractFilePath(aStrTBN);
with Table1 do
begin
if Active then Close;
DatabaseName :=aStrDir;
TableName:=aStrTBN;
Active:=True;
end;
end else
begin
showmessage('File Not Fond! '+aStrTBN);
end;
end;
except
on E:Exception do
begin
ShowMessage(E.Message);
end;
end;
end;{ 不要用ado,odbc,用bde 的TTable可以,何以舍近求遠?
}