在程序中加入了一个DataModule,在DataModule上加入一个adoquery,设置好后,在别的窗体引用,为什么会出错
with DataModule1.ADOQuery1 do
begin
close;
sql.Clear;
sql.Add('select * from 管理员表 where 用户='''+combobox1.text+'''');
open;
if FieldByName('密码').AsString=edit1.Text then
begin
frm_main.Show;
frm_dl.Hide;
end;
end;

解决方案 »

  1.   

    frm_main.edit1.Text 
    ^^^^^^^
    1 要写全
    2 在DataModule中要能访问edit.text,换句话,DataModule要包含frm_main的单元。----这不是循环包含了么?
    对!所以建议你在DataMoudel写一个函数比如:procedure DataModule1.EXECSQL(s:string);
    begin
    with DataModule1.ADOQuery1 do
    begin
    close;
    sql.Clear;
    sql.Add(s);
    open;
    end;
    end;然后再frm_main的单元中调用:
    with DataModule1 do
    begin
    EXECSQL('select * from 管理员表 where 用户='''+combobox1.text+'''');
    if ADOQuery1.FieldByName('密码').AsString=edit1.Text then
    begin
    frm_main.Show;
    frm_dl.Hide;
    end;
    end;
      

  2.   

    在这个单元里面引用DataModule所在的单元。
      

  3.   

    如果Query查询结果为空
    if FieldByName('密码').AsString=edit1.Text then
    也会出错,所以前面最好加上判断。
      

  4.   

    在sql.Add('select * from 管理员表 where 用户='''+combobox1.text+'''');
    这句中掉了一个单引号:应为:用户=''''.....
      

  5.   

    利用query1在窗体中进行查询
    并且要判断是否记录为空