用adoquery删除记录的问题(10分)

嫩手

Unregistered / Unconfirmed
GUEST, unregistred user!
我再想问一下非常简单的问题:怎么用adoquery删除记录?我是这样写的:
ADOQuery.Delete
刚开始可以删除,也许删除一条,也许删除多条后,它就开始提示:
无法为更新定位行,一些值可能己在最后一次读取后己更改
 
删除后,将数据库更新一下,试试。
 
还是出错,只不过提示错误信息不一样了
对了,是用adoquery.refresh更新吗?
 
with adoquery1 do
begin
close;
sql.clear;
sql.add('delete from 表名 where 条件');
execsql;
end;
或用ADODataSet查到后再删除
with DM1.ds_code do
begin
if locate('subjectid', fctreeview1.selected.stringdata, []) then
delete;
end;
 
这是因为增加了Lookup字段的原因吧!
将Lookup字段的LookupCache属性设为True就行了
 
delete 前进行检查:是否是有效记录!
delete 后 post;
 
这个问题在D5中是存在的,解决办法现在我只知道是删除、保存后都
刷新一下(refresh),这样问题可以解决,但如果记录较多时可能
效率就会很低,我现在也在为这个愁,一直找不到好的方法,不过听说
在D6下面就不会有这种情况,如果可能就转到D6下去
 
我用的是d7+winxp,谁有好办法?
 
with adoquery do
begin
if not isempty then
try
delete;
post;
except
raise;
end;

end;
 
Lookup字段是什么东西啊?
 
难道ado中删除一条记录这么麻烦?bde多方便呀
 
同意sun22029的方法。
 
有可能是Delphi与你用的数据库兼容性不太好,我也常遇到这个问题![:)]
 
是不是数据表结构里有时间记录?如果有,把它的时间间隔改得尽量小,比如1分钟的改成15秒。

呵呵,看门绝技!
 
我也正在写一个把SQL中的数据转化成DBF文件。
现在程序快编完了。可是有个问题还特烦的。我开始是用ADOTable1连DBF文件。用
TADODataSet1连SQL 的。可是在删除记录时,我不知道用什么删除。就用ADOQuery1
连DBF了。删除代码:
MessageInt:=MessageBox(0,'DBF文件中已存在数据,是否覆盖其数据?','导出数据',MB_YESNO);
If MessageInt=6 then //是
begin
MessageBool:=True;
DataModule2.ADOQuery1.SQL.Clear ;
DataModule2.ADOQuery1.SQL.Add('delete * from yjf_2211test');
DataModule2.ADOQuery1.ExecSQL ;
     end
不过这样删除后。我不知是什么原因。我的TDBGrid中还有数据。我再导SQL数据进去。
在程序中,依然有以前的记录。可是我把文件用EXCEL之类的打开时,只有后面加
进去的记录了。这可能汲及一个压缩的问题。
现在我用文件模板,没有涉及删除记录了不知你用不用得到。呵呵 ,我就再占点空间吧:

procedure TForm1.Button2Click(Sender: TObject);
var
SQLString:String;
NString,YString:String;
FilePath:String;
File1,File2:String;
SqlUdlFile,DbfUdlFile:String;
begin
NString:=Edit1.Text ;
YString:=Edit2.Text ;
if Edit1.Text ='' then
begin
ShowMessage('请输入年份');
exit;
end;
if Edit2.Text ='' then
begin
ShowMessage('请输入份');
exit;
end;
//********************转卡数据:Zksj.dbf******************//
FilePath:=ExtractFilePath(Application.ExeName);
File1:=FilePath+'模板/Zksj.dbf';
File2:=FilePath+'导出的数据库/Zksj.dbf';
SqlUdlFile:=FilePath+'Sql.udl';
DbfUdlFile:=FilePath+'Dbf.udl';
//showmessage(File1);
//showmessage(File2);
//showmessage(SqlUdlFile);
//showmessage(DbfUdlFile);
CopyFile(pChar(File1), pChar(File2),false);
SqlUdlFile:='FILE NAME='+SqlUdlFile;
DbfudlFile:='FILE NAME='+DbfudlFile;
//showmessage(SqlUdlFile);
//***********连接本文件夹下的SQL文件********************//
DataModule2.ADODataSet1.ConnectionString:=SqlUdlFile;
//showmessage('ok');
//exit;

//***********SQL语句********************//
SQLString:='SELECT TABLE_ZGJBXX.ZGBH, TABLE_ZGJBXX.XM, ';
SQLString:=SQLString+'TABLE_ZGGZ.ZKGZE, TABLE_GZZZ.ZZMC,';
SQLString:=SQLString+'TABLE_ZZ.ZZMC, TABLE_ZGGZ.ZJZH ';
SQLString:=SQLString+' FROM TABLE_ZGJBXX, TABLE_ZGGZ, TABLE_GZZZ,';
SQLString:=SQLString+' TABLE_ZZ ';
SQLString:=SQLString+' WHERE TABLE_ZGGZ.RYID = TABLE_ZGJBXX.RYID ';
SQLString:=SQLString+' AND TABLE_GZZZ.ZZBM = TABLE_ZGGZ.BZ1 ';
SQLString:=SQLString+' AND TABLE_ZZ.ZZBM = TABLE_ZGJBXX.GZDW ';
SQLString:=SQLString+' AND TABLE_ZGGZ.N = '''+NString+'''';
SQLString:=SQLString+' AND TABLE_ZGGZ.Y = '''+YString+'''';
SQLString:=SQLString+' ORDER BY TABLE_ZGJBXX.ZGBH ';


DataModule2.ADODataSet1.CommandText:=SQLString;
DataModule2.ADODataSet1.Active :=True;

//***********连接本文件夹下的BDF文件********************//
DataModule2.ADOTable1.Active :=False;
DataModule2.ADOTable1.ConnectionString:=DbfUdlFile;
DataModule2.ADOTable1.TableName :='Zksj'; //转达卡数据
DataModule2.ADOTable1.Active :=True;

DataModule2.ADODataSet1.First ;
DataModule2.ADOTable1.First ;
//****************赋值********************//
while not DataModule2.ADODataSet1.Eof do
begin
DataModule2.ADOTable1.Append ;
DataModule2.ADOTable1.FieldByName('ZGBH').value:= DataModule2.ADODataSet1.FieldByName('ZGBH').Value ;
DataModule2.ADOTable1.FieldByName('GZZH').value:=DataModule2.ADODataSet1.FieldByName('ZJZH').Value ;
DataModule2.ADOTable1.FieldByName('CKCS').value:='热电厂';//DataModule2.ADODataSet1.FieldByName('XM').Value;
DataModule2.ADOTable1.FieldByName('UNIT1').value:=DataModule2.ADODataSet1.FieldByName('ZZMC_1').Value ;
DataModule2.ADOTable1.FieldByName('UNIT2').value:=DataModule2.ADODataSet1.FieldByName('ZZMC').Value ;
DataModule2.ADOTable1.FieldByName('XM').value:=DataModule2.ADODataSet1.FieldByName('XM').Value ;
DataModule2.ADOTable1.FieldByName('CRJE').value:=DataModule2.ADODataSet1.FieldByName('ZKGZE').Value ;
DataModule2.ADOTable1.UpdateRecord ;
DataModule2.ADODataSet1.Next ;
end;
ShowMessage('转卡数据导出完毕,'#13#10+'下面将导出转卡工资汇总数据');
 
删除数据后一定要将信息提交到数据库中
根据情况有两种解决方法:
1.refresh
2.update;
 
有refresh方法,但没有update呀?只有updaterecord,但还是不行,提示:不在编辑或
插入状态
 
顶部