下面是我的代码 
  mainf.Free;
  Application.Initialize;
  Application.ShowMainForm:=false; //程序不显示主窗口
  Application.Title := '管理系统';
  Application.CreateForm(Tdmf, dmf);
  Application.CreateForm(Tmainf, mainf);
  Application.CreateForm(Tloginf, loginf);
  //Application.CreateForm(Twptz_b, wptz_b);
  Application.Run;
我搞不明白的是为什么从新注销后,在登录程序后,所有涉及到query的用法都不可以了

解决方案 »

  1.   

    明白了,下面是我的注销代码  
      mainf.Free;
      Application.Initialize;
      Application.ShowMainForm:=false; //程序不显示主窗口
      Application.Title := '管理系统';
      Application.CreateForm(Tdmf, dmf);
      Application.CreateForm(Tmainf, mainf);
      Application.CreateForm(Tloginf, loginf);
      //Application.CreateForm(Twptz_b, wptz_b);
      Application.Run;
    我搞不明白的是为什么从新注销后,在登录程序后,所有涉及到query的用法都不可以了
    比方说我注销后,在登录程序后要查询一个表
    var
       sqltxt:string;
    begin
       sqltxt := 'select * from jebg_table where wpsyr like ''%'+rzedit1.Text+'%''' ;
       openadoquery(dmf.ADOQuery3, sqltxt);
    end;
    openadoquery这个过程是调用mylib.pas的
    procedure openAdoQuery(ADOqry1: TADOquery; sqltxt: string);
    begin
      with ADOqry1 do
      begin
        close;
        SQL.clear;
        SQL.add(sqltxt);
        open;
      end;
    end;
    居然没有查询到内容,感觉ADoquery好用没有调用似的,一点反应也没有
      

  2.   

    跟踪一下看看
    首先看看数据库连接是否正常
    if adoquery1.state = dsinactive then
    begin
      showmessage('数据库未连接');
      exit;
    end;如果正常,看看有没有数据
    showmessage(inttostr(dmf.ADOQuery3.recordcount));
      

  3.   

    我用showmessage(inttostr(dmf.ADOQuery3.recordcount));试了一下返回为2,就是说明有两天记录,
    可是dbgrid确没有显示结果
      

  4.   

    procedure Tsakxf.FormCreate(Sender: TObject);
    var
      sqltxt:string;
    begin
         sqltxt := 'select * from jebg_table order by id' ;
         openadoquery(dmf.ADOQuery3, sqltxt);
         dbgrid1.DataSource:=dmf.DataSource2;//就是这句话,如果没有则不显示内容     
         dbgrid1.Columns.Items[0].FieldName:='wpsyr';
         dbgrid1.Columns.Items[0].Width:=100;
         dbgrid1.Columns.Items[1].FieldName:='sfzh';
         dbgrid1.Columns.Items[1].Width:=64;
         dbgrid1.Columns.Items[2].FieldName:='kykje';
         dbgrid1.Columns.Items[2].Width:=64;
         dbedit1.DataField:='wpsyr';
         dbedit2.DataField:='sfzh';
         dbedit3.DataField:='kykje';
    end;
    我发现了一个问题,这个表在窗体创建的时候dbedit6.DataSource我必须在代码里写上dbedit6.DataSource:=dmf.DataSource1;dbgrid1才能显示数据,可是我已经在opject inspector里已经设置好数据源了dmf.DataSource1,不是很理解为什么
      

  5.   

    应该可以
    是不是你还是设置的不对啊,怎么一会dbgrid1.DataSource:=dmf.DataSource2,一会又在opject inspector里已经设置好数据源了dmf.DataSource1
    到底是DataSource2还是1Datasource2的DataSet设置为ADOQuery3
    DbGrid1的Datasource设置为dmf.DataSource2
    procedure Tsakxf.FormCreate(Sender: TObject);
    var
      sqltxt:string;
    begin
      dbgrid1.Columns.Items[0].FieldName:='wpsyr';
      dbgrid1.Columns.Items[0].Width:=100;
      dbgrid1.Columns.Items[1].FieldName:='sfzh';
      dbgrid1.Columns.Items[1].Width:=64;
      dbgrid1.Columns.Items[2].FieldName:='kykje';
      dbgrid1.Columns.Items[2].Width:=64;  sqltxt := 'select * from jebg_table order by id' ;
      openadoquery(dmf.ADOQuery3, sqltxt);
      end;