我想做个判断,dbedit1.text是否已经存在于ACCESS中的'工号'字段中,该怎样写,我用的是ADO.

解决方案 »

  1.   


     if not ADOQuery1.Locate() then//看Delphi帮助,内有一详例
      

  2.   

    create Table test (a int)Delphi(Pascal) code
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, DB, ADODB;type
      TForm1 = class(TForm)
        ADOConnection1: TADOConnection;
        ADOQuery1: TADOQuery;
        Button1: TButton;
        Edit1: TEdit;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure ADOQuery1BeforeInsert(DataSet: TDataSet);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.ADOQuery1BeforeInsert(DataSet: TDataSet);
    var
      qry : TADOQuery;
    begin
      qry := TADOQuery.Create(nil);
      try
        qry.Clone(ADOQuery1);
        if qry.Locate('a',Trim(Edit1.Text),[]) then
        begin
          Application.MessageBox(pchar('已經存在'),'提示',MB_OK+MB_ICONWARNING);
          abort;
        end;
      finally
        FreeAndNil(Qry);
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      adoquery1.Append;
      adoquery1.FieldByName('a').Value := Edit1.Text;
      ADOQuery1.Post;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      ADOQuery1.Close;
      adoquery1.sql.Text := 'select * from test';
      ADOQuery1.Open;
    end;end.
      

  3.   

    Locate是定位当前的数据集吧,如果你别的地方又更新了数据还不行
    最好用Select查找一下有没这个记录,  with  TempADO2 do
      begin
        Close;
        SQL.Clear;
        sqlstr := 'Select 1 from SoftTicketTB '
                 +'  where SoftTicketC_ID='+Quotedstr(AdoC.FieldByName('ID').AsString)
                 +'  and   UseState<>'+Quotedstr('D');
        SQL.Add(sqlstr);
        Open ;    if TempADO2.RecordCount >0 then
        begin
          MsShow('某些票号已经存在!');
          Abort;
        end;
      end;
      

  4.   

    LS说的很对   我用Locate的时候别的地方一调用就会出现一些历史数据,可你的程序我没看明白......
      

  5.   


      with  TempADO2 do 
      begin 
        Close; 
        SQL.Clear; 
        sqlstr := 'Select 1 from SoftTicketTB ' 
                +'  where SoftTicketC_ID='+Quotedstr(AdoC.FieldByName('ID').AsString) 
                +'  and  UseState <>'+Quotedstr('D'); 
        SQL.Add(sqlstr); 
        Open ;     if TempADO2.RecordCount >0 then 
        begin 
          MsShow('某些票号已经存在!'); 
          Abort; 
        end; 
      end;
      

  6.   

    select * from 表 where 工号=trim(dbedit1.text)
    if not query.empty then
     showmessage('存在');
      

  7.   

    写一个用来判断"工号"是否已经存在的函数function IsGHExsist(num:string);
    var
      q: TADOQuery;
    begin
      
      q := TADOquery.Create(nil);
      q.Connection := 你的数据链接;
      try
        q.Sql.Text := 'select * from 表 where 字段='+QuotedStr(dbedit1.text);
        q.Open;
        if q.IsEmpty then
          Result := False
        else
          Result := True;
      finally
        q.Free;
      end;
    end;另外建议不要用dbedit1,用普通的edit,db控件尽量不用