

AdoQuery控件的使用
不同与AdoTable使用同一个Connection连接,否则出错,原因未知
例1:
procedure TDenLFrm.Button1Click(Sender: TObject);
var
Query : TADOQuery;
begin
try
Query := TADOQuery.Create(nil); //有这句代码不需要拖入AdoQuery控件了
Query.Connection := AcPer1 ;
Query.SQL.Add('select * from users where yhmc=:yhmc and yhkl=:yhkl'); //**特别要注意这里的yhmc与yhkl是变量,它的赋值是等+冒号,而delphi是冒号+等号
Query.Parameters.ParamByName('yhmc').Value := 'admin' ;//给上面的变量赋值
Query.Parameters.ParamByName('yhkl').Value := Edpass.Text ;//输入的密码
Query.Open;
if Query.RecordCount = 0 then
begin
MessageDlg('请输入正确的用户名和密码',mtError,[mbok],0);
//如果查到总数为0 ,就弹出"请输入正确的用户名和密码"
Exit;
end;
if query.FieldByName('yhqx').AsInteger =0 then //查询出的数据,yhqx那个字段的值如果为0
begin
。。。。。。。
end;
if query.FieldByName('yhqx').AsInteger =1 then
begin
。。。。
end;
Query.Close;
Query.Free; //在按钮中创建表是一个局部的,必须在按钮里释放
Mmain.Showmodal;
DenLfrm.close; //关闭登录对话窗体
except
MessageDlg('连接数据库出错!',mtError,[mbok],0);
end;
end;
例2:
adoquery2.close;
adoquery2.SQL.clear;
adoquery2.SQL.Add('select b.姓名,a.* from 工资发放历史表 a,职员基本信息表 b');
adoquery2.SQL.add('where (a.职员编号=b.职员编号)and((b.姓名 like''%'+edit29.Text+'%'')and');
adoquery2.sql.add('(a.日期 like ''%'+edit28.Text+'%''))');
adoquery2.Open;//开始由于没写这句,郁闷了一下午.总是提示列索引超出范围.
for i:=3 to 29 do
dbgrid6.Columns[i].width:=64;
例3:AdoQuery连续执行多条语句,以及ExeSQL与open的区别
DataFrm.qry3.Close;
DataFrm.qry3.SQL.Clear; //使用该语句后AdoQuery查询在左侧SQL属性中设置的SQL语句将被清空,不是执行你的要执行的语句后它又恢复,要下次启动程序才恢复
DataFrm.qry3.SQL.Add('insert into salesdata (shopname,salesday,salesmoney,updatetime) values (''抖音小店2'',''2023-05-06'',2233,getdate())');
DataFrm.qry3.ExecSQL; //使用ExeSQL查询执行后处理关闭状态,就是其属性Active:=false,如查询下连接的DbGrid就不显示内容
//由于前面执行了其它语句,默认的SQL语句被清空,需要再次添加语句,下面的DBgrid才会显示
DataFrm.qry3.Close;
DataFrm.qry3.SQL.Clear;
DataFrm.qry3.SQL.Add('select * from salesdata');
DataFrm.qry3.open; //使用OPEN查询执行后处理开启状态,就是其属性Active:=false,如查询下连接的DbGrid会显示内容