我用ADO连接数据库,现在要插入数据。判断条件是日期和仪表号,如果数据库里
没有该仪表号和这一天的数据,就直接插入数据。如果有了数据就更新数据,这个如何实现?

解决方案 »

  1.   

    with adoquery1 do
    begin
      close;
      sql.clear;
      sql.text := 'select * from yourtable ' +
                  'where datefield = yourdate and number = yournumber ';
      open;
      if recordcount = 0 then
      begin
        //插入操作;
      end
      else begin
        //更新操作;
      end;
    end;
      

  2.   

    with adodataset1 do
    begin
      active:=false;
      commandtext:= 'select * from yourtable ' +
                  'where datefield = yourdate and number = yournumber ';
      active:=true;
      if recordcount = 0 then
      begin
        //insert操作;
      end
      else begin
        //update操作;
      end;
    end;
      

  3.   

    var rq,bh:string;
    begin
    rq:=datetostr(now);
    bh:=bedit.Text;
    data.nengyuanTable.Close;
    data.nengyuanTable.open;
      if messagedlg('请您确认你填入的今日该表号的数据正确吗?',mtconfirmation,[mbyes,mbno],0)=mryes then
        begin
         with data.nyq do
           begin
               close;
               data.nyq.SQL.Clear;
               data.nyq.SQL.text := 'select * from nengyuan ' +
                  'where riqi=rq and biaohao=bh';
               data.nyq.Open;
               if recordcount = 0 then
               begin
      data.nengyuanTable.last;
     data.nengyuanTable.Append;
     data.nengyuanTable.FieldByName('pname').AsString:=nyedit.Text;
     data.nengyuanTable.FieldByName('chejian').AsString:=cjedit.Text;
     data.nengyuanTable.FieldByName('biaohao').AsString:=bedit.Text;
     data.nengyuanTable.FieldByName('biaoshu').AsString:=duedit.Text;
     data.nengyuanTable.FieldByName('riqi').AsString:=timeedit.Text;
     data.nengyuanTable.FieldByName('beizhu').AsString:=memo1.Lines.Text;
     data.nengyuanTable.FieldByName('rname').AsString:=redit.Text;
     data.nengyuanTable.post;
     end
     else begin
     data.nengyuanTable.FieldByName('biaoshu').AsString:=duedit.Text;
     data.nengyuanTable.UpdateRecord;
     end;
     end;
     //except
     //showmessage('产生错误!!!')
     //end;
     end;
     showmessage('添加数据成功,请返回');
     close;
    end;现在还报错,说rq无效
      

  4.   

    with adoquery1 do
    begin
      close;
      sql.clear;
      sql.text := 'if Exists(select * from yourtable 
                  where datefield = yourdate and number = yournumber)
                  update YourTable set AA1=:AA1,..... where datefield = yourdate and number = yournumber
                 else insert into YourTable values (DateField,.....) ';
      ExecSQL;
    end;
      

  5.   

    可以这样:
    ADODataSet.close;
    ADODataSet.commandText:='select * from yourtable';
    ADODataSet.open;然后用locate的方法,
    if ADODataSet.locate(字段名,字段值,[])=true then
      ADODataSet.edit
    else
      ADODataSet.insert;这样可以减少打开数据库的次数,加快查询速度。
      

  6.   

    data.nyq.SQL.text := 'select * from nengyuan ' +
                  'where riqi='+ QuotedStr(rq)+' and biaohao='+ QuotedStr(bh);
      

  7.   

    怎么又出现从字符串到DATETIME转换出现语法错误???救命啊
      

  8.   

    data.nengyuanTable.FieldByName('biaoshu').AsString:=duedit.Text;
     data.nengyuanTable.UpdateRecord;《--------------在这里说nengyuantable:dataset not in edit or insert mode
    救命啊
      

  9.   

    else begin
     data.nengyuantable.Edit;
     data.nengyuanTable.FieldByName('biaoshu').AsString:=duedit.Text;
     data.nengyuanTable.UpdateRecord;
      

  10.   

    with adodataset1 do
    begin
      active:=false;
      commandtext:= 'select * from yourtable ' +
                  'where datefield = yourdate and number = yournumber ';
      active:=true;
      if recordcount = 0 then
      begin
        //insert操作;
      end
      else begin
        //update操作;
      end;
    end;可以的!