新手求助简单问题!如何在数据库中查询多个记录,动态的(50分)

  • 主题发起人 主题发起人 ccmm
  • 开始时间 开始时间
C

ccmm

Unregistered / Unconfirmed
GUEST, unregistred user!
我是这样写的,要删除的变量在SelFiles是一个TStringList类型变量,
我想把它指向的所有记录都删除,如何做呢?
with myQuerydo
begin
Close;
DatabaseName := 数据库名;
SQL.Clear;
for i := 0 to SelFiles.Count - 1do
//这里采用这样的赋值方法,不对 :o(
begin
SQL.Add( 'DELETE * FROM 数据库名.表名 WHERE 字段名=:SelFiles');
Params.AsString := SelFiles.Strings ;
end;

ExecSQL;

Close;

end;
 
大概是这个意思:
var
tempstr:string;
....
with myQuerydo
begin
Close;
DatabaseName := 数据库名;
SQL.Clear;
SQL.Add( 'DELETE * FROM 数据库名.表名')
for i := 0 to SelFiles.Count - 1do
//这里采用这样的赋值方法,好象是不对 :)
begin
if length(tempstr)<>0 then
tempstr:=tempstr+' and ';
tempstr:=tempstr+' 字段名=SelFiles';
Params.AsString := SelFiles.Strings ;
end;
sql.add('WHERE '+tempstr);

ExecSQL;

Close;

end;
 
with myQuerydo
begin
Close;
DatabaseName := 数据库名;
SQL.Clear;
for i := 0 to SelFiles.Count - 1do

begin
SqlStr:='DELETE * FROM 数据库名.表名 WHERE 字段名='''+SelFiles.Strings+'''';
SQL.Add(Sqlstr);
ExecSQL;

end;

Close;

end;
 
with myQuerydo
begin
Close;
DatabaseName := 数据库名;
// SQL.Clear;
for i := 0 to SelFiles.Count - 1do

begin
Close;
Sql.Text:='DELETE * FROM 数据库名.表名 WHERE 字段名='''+SelFiles.Strings+'''';
// SQL.Add(Sqlstr);
ExecSQL;

end;

Close;

end;
 
看起来不知道哪个对
我得先试试,稍等 :P
大虾能不能告诉我为什么?给我讲讲原理行不行 :)
 
上面的做法效率比较低,因为需要多次 SQL 提交过程,写成下面的一次提交就好多了:
var
S: string
begin
with Querydo
begin
SQL.Add('Delete From TableName Where FieldName In (');
S := '';
for i := 0 to SelFiles.Count - 1do

S := S + ','''+SelFiles.Strings+'''';
if S<>'' then
Delete(S,1,1);
// 删除第一个逗号
SQL.Add(S+')')
ExecSQL;
end;
end;
 
OK了 ^_^
能不能再问jqw一个问题:
我实际上需要这样:选中一批文件后,先查询数据库,找到文件路径,删除文件,
然后删除文件在数据库中的记录.
怎么做?参考 jqw的回答,我准备这样写
for i := 0 to SelFiles.Count - 1do

begin
Close;
SQL.Text := 'SELECT 路径 FROM 数据库名.表名 WHERE 文件名=''' + SelFiles.Strings + '''';
Open;

path := myQuery.FieldByName(路径').AsString ;
DeleteFile( path + SelFiles.Strings );
//先查询以后再删除,这样是不是很笨笨的 :P
SQL.Text := 'DELETE * FROM '+ DBName + '.FILELISTVIEW WHERE 文件名=''' + SelFiles.Strings + '''';
// SQL.Add(Sqlstr);
ExecSQL;

end;

但是我看了jqw大虾的回答以后,就觉得肯定还有好方法,我用SQL的水平太差:P
 
各位真是让我大长见识!
小小的50分显得太寒酸了,众位大虾就当是提挈后进,索性让我弄个明白吧 //bow
 
多人接受答案了。
 
后退
顶部