Delphi ADOQuery查询用户是否存在

procedure TForm1.Bt_findClick(Sender: TObject);
var
  i,count:Integer;
  result:Boolean;
begin
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('select * from user where id=:m_id') ;  //查找表中所有内容
  ADOQuery1.Parameters.ParamByName('m_id').Value:=trim(Edit1.Text);   //将Edit1.Text的值赋给m_id
  ADOQuery1.Open;
  //以上close、clear、open是经典的语句,在每次查询之前先把上次查询之前的内容给关了
  //如果不关,第一次查询是没问题的,可如果adoqury1再用一次的话,就可能与上次发生冲突
  ADOQuery1.First;
  count:=ADOQuery1.RecordCount; //得到数据库中数据的数目
  result:=true;

  for  i:=0 to count do
  begin
     if ADOQuery1.FieldByName('password').AsString=Edit2.Text then
        //将password值转换为字符串后判断是否等于Edit2.Text的值,因为Edit2.Text是字符串类型的
     begin
       Label3.Caption:='存在用户';
       result:=false;
       break;
     end;
     ADOQuery1.Next;
  end;

  if result then
  begin
      Label3.Caption:='不存在用户';
  end;
end;

总结:

Close是因为之前有对ADOQuery1进行OPEN,当在OPEN状态下对数据集进行操作是不行的,就像你想删除一个正在打开的EXCEL文档无法执行一样,这里也是一样,想要对ADOQuery1进行操作,前提必须是它要在关闭状。

.sql.clear 清除原来的sql语句

FieldByName是根据名字获取字段 如 数据库表 学生 设计了个字段 学号 
ParamByName是取sql语句中的参数 如 select *from table where no = :studentNo

First:将记录指针置於数据集第一记录处;
Next:将记录指针移至下一条记录处;
Prior:将记录指针移置前一条记录处;Last:将记录打针移到数据集最后一条记录处;

ExecSQL 与 open的区别在于:
exec 是执行不且不返回结果集。 通常用于 增删改
open 返回结果集,通常用于查询

猜你喜欢

转载自blog.csdn.net/kisssfish/article/details/88741117