急急急,数据库问题。。。。。。 (100分)

  • 主题发起人 主题发起人 den yin chang
  • 开始时间 开始时间
D

den yin chang

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure Tprform.Button1Click(Sender: TObject);
var tablename,filepath:string;

begin

filepath:=filelistbox1.directory; //filepath为任意目录路径变量
tablename:=fileedit.text; //tablename为任意数据库名变量
with query1 do
begin
close;
databasename:=filepath;
sql.Clear;
sql.add('select * from '+tablename);
prepare;
open;
end;
end;
我用以上程序来打开任意路径的数据库,在运行过程中,第一次打开同一目录中的任意数据库,
可以通过,但当改变目录路径打开数据库时,运行出错,出错信息为raised exception class EdatabaseError with
message'Query1:cannot perform this operation on an open database'请问是什么原因?怎样可以解决此问题?请
各位高手帮忙,多谢!
 
先将query1关闭,即在with query1 do begin后加一句:close;
 
filepath:=filelistbox1.directory; //filepath为任意目录路径变量
tablename:=fileedit.text; //tablename为任意数据库名变量
with query1 do
begin

Close;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
databasename:=filepath;
sql.Clear;
sql.add('select * from '+tablename);
prepare;
open;
 
同意 wind_cloudy
 
也同意 wind_cloudy
 
关闭query就没事了
 
To:wind_cloudy and TYzhang
我按照你们的方法,增加close语句,但运行结果还是和以前一样,出现同样的出错信息请问
怎样才可解决此问题?
 
你是通过什么连接到数据库的.
不管什么.
目录代表数据库,象dbf
所以要改变目录重新设置数据库连接即,
if bde then
tdatabase.connected:=FALSE
if ado then
tadoconnect.connect:=FALSE;
你的query1.这样写是可以的只不过在最后退出application时应该close

 
我试过好象就MS Access会出错.
 
To: cnaoszh
我是通过BDE连接到数据库的,你给予的语句是怎样增加到程序里的,请给予解答多谢!
 
ok
procedure Tauditdata.ModifySes(var CurValues:String);
var
Str:String;
List:TStrings;
begin
List := TStringList.Create;
Str:='DATABASE NAME='+CurValues;
with List do begin
Clear;
Add(Str);
end;
Session.ModifyAlias('dbtaraudit', List);
Session.SaveConfigFile;
List.Free;
end;


procedure Tprform.Button1Click(Sender: TObject);
var tablename,filepath:string;

begin

filepath:=filelistbox1.directory; //filepath为任意目录路径变量
Database1.Connected:=FALSE;
ModifySes(filepath);
Database1.connected:=TRUE;
tablename:=fileedit.text; //tablename为任意数据库名变量
with query1 do
begin
close;
databasename:=filepath;
sql.Clear;
sql.add('select * from '+tablename);
prepare;
open;
end;
end;
 
TO:cnaoszh
您好!很高兴得到你详细的解答,但我在运行中还是出错,提示数据表找不到。可否
说明一下调用ModifySes(filepath)过程的作用?
 
ModifySes(filepath)是更改tdatabase连接的路径,对于容器型数据库路径不就是数据库吗。
其中
Session.ModifyAlias('dbtaraudit', List);
要将‘dbtaraudit’改为你自己的别名;
filepath:=filelistbox1.directory; //filepath为任意目录路径变量
//断开数据库连接
Database1.Connected:=FALSE;
//连接到新的数据库
ModifySes(filepath);
//连接数据库
Database1.connected:=TRUE;
//选择表名称
tablename:=fileedit.text; //tablename为任意数据库名变量
//
with query1 do
begin
close;
databasename:=filepath;
sql.Clear;
sql.add('select * from '+tablename);
prepare;
open;


 
To:cnaoszh
我把过程ModifySes(filepath)中的语句直接增加到程序中,该程序如下:
procedure Tprform.Button1Click(Sender: TObject);
var tablename,filepath:string;
Str:String;
List:TStrings;

begin

filepath:=filelistbox1.directory;
database1.connected:=false;
List := TStringList.Create;
Str:='DATABASE NAME='+filepath;
with List do begin
Clear;
Add(Str);
end;
Session.ModifyAlias('dbtaraudit', List);
Session.SaveConfigFile;
List.Free;
database1.connected:=true;
tablename:=fileedit.text;
with query1 do
begin
close;
databasename:=filepath;
sql.Clear;
sql.add('select * from '+tablename);
prepare;
open;
但运行该程序,试图打开 (C盘根目录的学生档案.dbf)的FOXBAS数据库文件时,出现出错信息:
raised exception class EdatabaseError with Message'Invalid alias name dbtaraudit'
可否给予解答?多谢!
 
To:cnaoszh
很多谢得到你的解答,我的问题运行已通过了,请你接受我的100分。我也很想与你交个
朋友,可否给予邮箱地址?我的是d81@163.net
 
后退
顶部