ADOQuery2
DataSource1
DBGridEh1
procedure Tgift.spSkinSpeedButton2Click(Sender: TObject);
begin
IF application.MessageBox('你确认要删除该数据吗?','系统提示',MB_YesNo or mb_defbutton2 or mb_iconstop or mb_applmodal)=IdYes then
begin
with adoquery2 do
begin
try
delete;
showmessage('数据删除成功!');
except
showmessage('数据删除失败!');
end;
end;
end;
end;adoquery2.SQL.Clear;
ADOQuery2.SQL.Add('select b.bm_name,a.gh,a.name from rs a,bm b where a.bm_no=b.bm_no' );
adoquery2.Open;这样是不行的,但是如果这样就可以!
ADOQuery2.SQL.Add('select bm_no,gh,name from rs');我显示的数据集是要关联其他表;或者也可以这样删除呢ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add('delete from rs  where  gh=当前行gh列的值);
ADOQuery2.ExecSQL;当前行gh列的值要如何求得啊???
第一次用DELPHI,请大家帮帮忙~

解决方案 »

  1.   

    dbgrideh.datasource.dataset.fieldbyname('gh').asstring;
      

  2.   

    delete from rs  where  gh=dg.datasource.datase.fieldByName('gh').astring;
      

  3.   

    var
    sqlstr:string;
    begin
    sqlstr:='delete from rs  where  gh='+QuotedStr(dg.datasource.datase.fieldByName( 'gh ').astring);
    ....
    end;
      

  4.   

    procedure Tgift.spSkinSpeedButton2Click(Sender: TObject); 
    begin 
    IF application.MessageBox( '你确认要删除该数据吗? ', '系统提示 ',MB_YesNo or mb_defbutton2 or mb_iconstop or mb_applmodal)=IdYes then 
    begin 
    with adoquery2 do 
    begin 
    try 
    adoDelete.close;
    adoDelete.sql.text := 'delete from rs  where  gh='''+dg.datasource.datase.fieldByName( 'gh ').astring;+'''';
    adoDelete.ExecSQL; delete; 
    showmessage( '数据删除成功! '); 
    except 
    showmessage( '数据删除失败! '); 
    end; 
    end; 
    end; 
    end; 
      

  5.   

    dbgrideh也是感知控件..你直接用的adoquery.fieldbyname('你在dbgrideh里显示出来的字段名字').value
    你当前选中的某个行就是这个数据了。..你showmessage()出来看看就知道了
      

  6.   

    adoDelete.close; 
    adoDelete.sql.text :=  'delete from rs  where  gh= ' ' '+ADOXXX.fieldByName(  'gh  ').astring;+ ' ' ' '; 
    adoDelete.ExecSQL;  ADOXXX就是你用来显示在dbgrideh的数据源联接的ADOQuery或者ADOTable
      

  7.   

    ADOQuery1.clear;
    ADOQuery1.SQL.Add( 'delete from rs  where  gh='+quotedStr(adoquery2.FieldByName('GH').AsString));
    ADOQuery1.ExecSQL; 
      

  8.   

    试试看这种方法:
    1、设置记录集更新方式
    ADOQuery2.LockType = ltBatchOptimistic 
    (目的是对记录集删除或者更新等,不会直接影响到数据库,数据库操作采用SQL直接处理)2、执行删除
    procedure Tgift.spSkinSpeedButton2Click(Sender: TObject);
    var
      strSql: string;
    begin
      if application.MessageBox( '你确认要删除该数据吗? ', '系统提示 ',MB_YesNo or mb_defbutton2 or mb_iconstop or mb_applmodal)=IDYES then
      begin
        with adoquery2 do
        begin
          try
            strSql := 'delete from rs where gh='''+adoquery2.FieldByName('gh').AsString+'''';
            if 执行SQL成功 then
            begin
              delete;   //此时删除操作,目的是把界面记录删除,实际记录删除是在执行SQL里头。
              showmessage( '数据删除成功! ');
            end
            else ShowMessage('异常,删除失败!');
          except
            showmessage( '数据删除失败! ');
          end;
        end;
      end;
    end;