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 返回结果集,通常用于查询