Delphi新手,做数据库程序时,删除按钮功能无法实现,求指点

u010587619 2014-09-08 02:43:41
RT,照着别人写好的删除功能,自己复制的,仅仅把窗口名改了。编译的时候没有任何报错,但是运行的时候点删除按钮却无效,只提示是否删除的对话框,数据仍然在表格了。
代码如下
procedure TFormBillMain.RzTbtnDeleteClick(Sender: TObject);
var
sqlstr: string;
strSeq: string;
i: integer;
begin
if CDMain.RecordCount > 0 then begin
if Application.MessageBox('确定删除吗?', '询问', MB_ICONQUESTION + MB_YESNO) = ID_YES then begin
if dgMultiSelect in DBGMain.Options then begin
DBGMain.DataSource.DataSet.DisableControls ;
for i := 0 to DBGMain.SelectedRows.Count - 1 do begin
DBGMain.DataSource.DataSet.GotoBookmark(Pointer(DBGMain.SelectedRows.Items[i]));
strSeq := DBGMain.DataSource.DataSet.FieldByName('fbill_no').AsString;

// 先删除本身 和由本身附带产生的

sqlstr := '';
sqlstr := sqlstr + 'delete from cx_bill_main where fbill_no = ' + strSeq;

end;
DBGMain.DataSource.DataSet.EnableControls;
end
else begin
strSeq := DBGMain.DataSource.DataSet.FieldByName('fbill_no').AsString;

// 先删除本身 和由本身附带产生的
sqlstr := '';
sqlstr := sqlstr + 'delete from cx_bill_main where fbill_no = ' + strSeq;

end;
GetMainData('');
end;
end;
end;

复制的原代码
procedure TFormMain.N8Click(Sender: TObject);
var
sqlstr: string;
strSeq: string;
i: integer;
begin
if adoMainData.RecordCount > 0 then begin
if Application.MessageBox('确定删除吗?', '询问', MB_ICONQUESTION + MB_YESNO) = ID_YES then begin
if dgMultiSelect in DBGrid1.Options then begin
DBGrid1.DataSource.DataSet.DisableControls;
for i := 0 to DBGrid1.SelectedRows.Count - 1 do begin
DBGrid1.DataSource.DataSet.GotoBookmark(Pointer(DBGrid1.SelectedRows.Items[i]));
strSeq := DBGrid1.DataSource.DataSet.FieldByName('seq').AsString;

// 先删除本身 和由本身附带产生的
sqlstr := '';
sqlstr := sqlstr + 'delete from pay_bill where par_seq = ' + strSeq;
ExecSQL(ADOQry, sqlstr, 2);
end;
DBGrid1.DataSource.DataSet.EnableControls;
end
else begin
strSeq := DBGrid1.DataSource.DataSet.FieldByName('seq').AsString;

// 先删除本身 和由本身附带产生的
sqlstr := '';
sqlstr := sqlstr + 'delete from pay_bill where par_seq = ' + strSeq;
ExecSQL(ADOQry, sqlstr, 2);
end;
GetData('', -1);
N23.Click;
end;
end;
end;

求高手指点,谢谢
...全文
208 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lhy 2014-09-11
  • 打赏
  • 举报
回复
引用 7 楼 u010587619 的回复:
[quote=引用 6 楼 lhylhy 的回复:] [quote=引用 5 楼 u010587619 的回复:] [quote=引用 2 楼 lhylhy 的回复:] 是不是数据库结构有所不同?
有可能 之前的是是链接access,这回的是Oracle[/quote] 拿着两个差别挺大的,两个的SQL在很多细节上不同。access和SQL Server都有不少不同。[/quote] 但是我其他调用Oracle的语句也是用sql来直接写的,可以正常读取和修改,就是这个删除出现了问题[/quote] SQL规定并不详细,很多都是厂商自定义的。
u010587619 2014-09-11
  • 打赏
  • 举报
回复
引用 9 楼 gykthh 的回复:
ExecSQL(ADOQry, sqlstr, 2); 没有执行这个 怎么会删除呢 你只是组合成字符串了
谢谢指点,我知道解决了问题
u010587619 2014-09-11
  • 打赏
  • 举报
回复
引用 9 楼 gykthh 的回复:
ExecSQL(ADOQry, sqlstr, 2); 没有执行这个 怎么会删除呢 你只是组合成字符串了
这句我添加上去了,但是提示“Undeclared identifier” 该如何定义ExecSQL呢?
Blessed_Chuan 2014-09-09
  • 打赏
  • 举报
回复
ExecSQL(ADOQry, sqlstr, 2); 没有执行这个 怎么会删除呢 你只是组合成字符串了
程晨c 2014-09-09
  • 打赏
  • 举报
回复
将sql语句取出来在查询分析器里执行试试
u010587619 2014-09-09
  • 打赏
  • 举报
回复
引用 6 楼 lhylhy 的回复:
[quote=引用 5 楼 u010587619 的回复:] [quote=引用 2 楼 lhylhy 的回复:] 是不是数据库结构有所不同?
有可能 之前的是是链接access,这回的是Oracle[/quote] 拿着两个差别挺大的,两个的SQL在很多细节上不同。access和SQL Server都有不少不同。[/quote] 但是我其他调用Oracle的语句也是用sql来直接写的,可以正常读取和修改,就是这个删除出现了问题
lhy 2014-09-09
  • 打赏
  • 举报
回复
引用 5 楼 u010587619 的回复:
[quote=引用 2 楼 lhylhy 的回复:] 是不是数据库结构有所不同?
有可能 之前的是是链接access,这回的是Oracle[/quote] 拿着两个差别挺大的,两个的SQL在很多细节上不同。access和SQL Server都有不少不同。
u010587619 2014-09-09
  • 打赏
  • 举报
回复
引用 2 楼 lhylhy 的回复:
是不是数据库结构有所不同?
有可能 之前的是是链接access,这回的是Oracle
u010587619 2014-09-09
  • 打赏
  • 举报
回复
引用 1 楼 knife_s 的回复:
一,网格重新刷新试试,如果确定SQL语句正确的话,是因为数据在数据库中已删除, 二、跟踪执行的SQL语句,看是否正确及已执行
数据库里数据还是存在的 跟踪了一下,执行时直接从 if dgMultiSelect in DBGMain.Options then begin 跳到 strSeq := DBGMain.DataSource.DataSet.FieldByName('fbill_no').AsString; 中间删除语句并没有执行 之前的代码是链接access的,这回的是Oracle,会不会是因为这个,语句有问题?
ptvbs 2014-09-09
  • 打赏
  • 举报
回复
提示框下还有一个IF,在那里找毛病
lhy 2014-09-08
  • 打赏
  • 举报
回复
是不是数据库结构有所不同?
knife_s 2014-09-08
  • 打赏
  • 举报
回复
一,网格重新刷新试试,如果确定SQL语句正确的话,是因为数据在数据库中已删除, 二、跟踪执行的SQL语句,看是否正确及已执行

2,495

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧