在Unit2中,你应该在implementation
uses Unit1;

解决方案 »

  1.   

    UNIT 1 --> unit 2 ??---> unit 1 ---> unit2!!假如unit2可调用unit 1, 因unit1是可调用unit2,所以unit2可因unit1关系而
    调用unit2自已
      

  2.   

    TO zx_wang(wzx):谢谢
    可是,我在Unit1;中已经在
    inplementation中uses Unit2了,还可以在unit2里
    implementation
    uses Unit1;吗?
    请告诉我啊
      

  3.   

    为了避免窗体互相调用时出现错误,Unit1调用Unit2时,在Unit1的Interface中加入Uses子句,而在Unit2的implementation中加入Uses子句,比如:
    Unit1;
    interface
    uses unit2;
    ....
    end;
    Unit2;.....
    implementation
    uses
    unit1;
    end;
      

  4.   

    TO erickleung()
    你说的是什么意思啊?就是自己调用自己?
    我听不懂啊?
      

  5.   

    TO ningmei() (  ) 
    我就是那样做的啊,可是还是出错了啊
      

  6.   

    关于单元之间的循环引用问题:你经常会碰到这样的情况,在UnitA中调用UnitB并在UnitB中调用UnitA,
    这就被称为循环单元引用。循环单元引用的出现表明了程序设计有缺陷,
    应该在程序中避免使用循环单元引用。比较好的解决方法是把UnitA和UnitB
    共有的代码移到第三个单元中。然而,有时确实需要用到循环单元引用,
    这时就必须把一个uses子句移到implementation部分,而把另一个留在
    interface部分,这样就能解决问题。
      

  7.   

    你们都说的是书上的啊,可是,我真不能解决啊;
    如果用第三个Unit的话,所有的都要重来;
    我加分
      

  8.   

    建议你作一个公共单元,将那些要被循环调用的东东放在里面,如:
    unit3  为公共单元Unit1;
    ...
    implementation
    uses
      Unit3;

    end.Unit2;
    uses
    Unit3;
      

  9.   

    (2002-04-12 16:38:27)   一侠
    unit Unit1;interfaceuses
       Windows, Messages, SysUtils, Variants,Classes, Graphics,Controls, Forms,Dialogs,unit2;
    unit unit2
    .....
    ......
    implementation
      uses unit1;
    必须交叉调用 
    (通过服务器中转)
    或者用dll
      

  10.   

    我很奇怪,你为什么要把由你自己编写的单元放在Interface部分的uses中引用呢?
    难道放在implementation的uses中引用不好吗?我的做法是:Delphi系统中已经有的unit单元,
    全部放在interface段引用,自己编写的unit单
    元,全部放在implementation段引用,同时在
    implementation尽量采用层次化引用方式,防止
    循环引用的发生。我从来没有出过你这种错误。
      

  11.   

    其实,问题的实质是如何每次都可以通过query取得sql selver的最新数据
    我在另一个窗体想通过query改变dbgrid里的数据

    form2:=Tform2.create(application);
    form2.showmodal;
    query1.close;
    query1.open;form2进行数据更新;
    可是这样form2退出来后不是最新的数据
      

  12.   

    TO TommyTong(童童) 
    这样什么不可以?为什么不能这样做?现在是两个窗体要循环调用,按你的方法,你会如何办?
      

  13.   

    TO StarRains谢谢你,我把代码都贴子出来,就下边了
    unit w_gbzwbddj;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, Mask, DBCtrls, Grids, DBGrids, Db, DBTables, ImgList, ComCtrls,
      ExtCtrls, Buttons,w_gbbdedt,gagl_main;type
      Tm_gbzwbddj = class(TForm)
        ImageList1: TImageList;
        Query1: TQuery;
        DataSource2: TDataSource;
        Panel1: TPanel;
        Label1: TLabel;
        Label2: TLabel;
        Label3: TLabel;
        Label7: TLabel;
        Label8: TLabel;
        Label9: TLabel;
        Label10: TLabel;
        Label11: TLabel;
        Label12: TLabel;
        Label13: TLabel;
        Label14: TLabel;
        Shape1: TShape;
        Shape2: TShape;
        Shape3: TShape;
        Shape5: TShape;
        Shape6: TShape;
        Shape9: TShape;
        Shape10: TShape;
        Shape11: TShape;
        Shape12: TShape;
        Shape13: TShape;
        Shape14: TShape;
        Shape4: TShape;
        Shape7: TShape;
        DBEdit1: TDBEdit;
        DBEdit2: TDBEdit;
        DBEdit3: TDBEdit;
        DBEdit4: TDBEdit;
        DBEdit5: TDBEdit;
        DBEdit6: TDBEdit;
        DBEdit7: TDBEdit;
        DBEdit8: TDBEdit;
        DBEdit9: TDBEdit;
        DBEdit10: TDBEdit;
        DBEdit11: TDBEdit;
        DBGrid1: TDBGrid;
        Panel3: TPanel;
        SpeedButton1: TSpeedButton;
        SpeedButton4: TSpeedButton;
        Label4: TLabel;
        Label5: TLabel;
        SpeedButton6: TSpeedButton;
        SpeedButton5: TSpeedButton;
        SpeedButton2: TSpeedButton;
        SpeedButton3: TSpeedButton;
        BitBtn4: TBitBtn;
        BitBtn5: TBitBtn;
        BitBtn6: TBitBtn;
        ComboBox1: TComboBox;
        Shape8: TShape;
        Edit1: TEdit;
        DateTimePicker1: TDateTimePicker;
        procedure BitBtn4Click(Sender: TObject);
        procedure BitBtn5Click(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure SpeedButton3Click(Sender: TObject);
        procedure BitBtn6Click(Sender: TObject);
        procedure SpeedButton1Click(Sender: TObject);
        procedure SpeedButton4Click(Sender: TObject);
        procedure ComboBox1Change(Sender: TObject);
        procedure SpeedButton6Click(Sender: TObject);
        procedure SpeedButton5Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      m_gbzwbddj: Tm_gbzwbddj;
      str:string;implementation
    uses
      dy_gbrmcbUnit;{$R *.DFM}procedure Tm_gbzwbddj.BitBtn4Click(Sender: TObject);
    var
      gbbdform: Tgbbdform;
    begin
      gbbdform:=Tgbbdform.Create(application);
      gbbdform.SpeedButton2.Enabled :=false;
      gbbdform.SpeedButton3.Enabled :=false;
      gbbdform.combobox1.Enabled :=false;
      gbbdform.Edit7.ReadOnly:=true;
       gbbdform.combobox1.Text :=query1.fieldbyname('rydm').asstring;
       gbbdform.edit7.Text :=query1.fieldbyname('jh').asstring;
       gbbdform.edit6.text:=query1.fieldbyname('xm').asstring;
       gbbdform.edit5.Text :=query1.fieldbyname('nrzw').asstring;
       gbbdform.edit4.Text :=query1.Fieldbyname('nmzw').asstring;
       if  dbedit7.Text<>'' then
         gbbdform.datetimepicker1.DateTime:=strtodate(query1.fieldbyname('cbsj').asstring);
       gbbdform.edit3.text:=query1.fieldbyname('zybx').asstring;
       gbbdform.edit2.text:=query1.fieldbyname('cbdwyj').asstring;
       gbbdform.edit1.Text :=query1.fieldbyname('spjd').asstring;
       gbbdform.edit8.Text :=query1.fieldbyname('sftg').asstring;
       gbbdform.richedit1.Text:=query1.fieldbyname('bz').asstring;
      gbbdform.Showmodal;
      query1.Close;
      query1.Open;
    end;procedure Tm_gbzwbddj.BitBtn5Click(Sender: TObject);
    var
      gbbdform: Tgbbdform;
    begin
      gbbdform:=Tgbbdform.Create(application);
      with gbbdform do
      begin
       query2.Close;
       query2.sql.clear;
       query2.SQL.Add('select rydm from m_jbqk where rydm like :rydm');
       query2.params.items[0].asstring:=dwbm+'%';
       query2.Prepare;
       query2.Open;
       query2.First;
       combobox1.Clear;
       while not (query2.Eof) do
       begin
         combobox1.Items.Add(copy(query2.fieldbyname('rydm').asstring,5,(length(query2.fieldbyname('rydm').asstring)-4)));
         query2.next;
       end;
      end;
      gbbdform.Showmodal;
      query1.Close;
      query1.Open;
    end;procedure Tm_gbzwbddj.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
       action:=cafree;
    end;procedure Tm_gbzwbddj.SpeedButton3Click(Sender: TObject);
    begin
      close;
    end;procedure Tm_gbzwbddj.BitBtn6Click(Sender: TObject);
    begin
      if query1.RecordCount=0 then
         exit;
      if application.MessageBox('您确认要删除当前记录吗?','提示',mb_okcancel+mb_iconinformation)=mrok then
         query1.Delete ;
    end;procedure Tm_gbzwbddj.SpeedButton1Click(Sender: TObject);
    begin
      if not (query1.bof) then
       begin
        query1.Prior ;
        speedbutton4.Enabled :=true;
        if query1.Bof then
        speedbutton1.Enabled :=false;
       end;
    end;procedure Tm_gbzwbddj.SpeedButton4Click(Sender: TObject);
    begin
      if not (query1.Eof) then
       begin
        query1.Next ;
        speedbutton1.Enabled :=true;
        if query1.Eof then
        speedbutton4.Enabled :=false;
       end;
    end;procedure Tm_gbzwbddj.ComboBox1Change(Sender: TObject);
    var
      str1:string;
    begin
      if combobox1.Text='' then
       begin
        datetimepicker1.visible:=false;
        speedbutton6.Enabled :=false ;
        exit;
       end else
       begin
         speedbutton6.Enabled :=true;
         if combobox1.Text='人员编号' then
          begin
           DateTimepicker1.Visible :=false;
           edit1.visible:=true;
           str:='rydm';
          end;
          if combobox1.Text ='全部信息' then
           begin
             dateTimepicker1.Visible :=false;
             edit1.Visible :=true;
           end;
         if combobox1.Text='警号' then
          begin
           DateTimepicker1.Visible:=false;
           edit1.visible:=true;
           str:='jh';
          end;
         if combobox1.Text ='姓名' theN
          begin
            dateTimepicker1.Visible :=false;
            edit1.Visible :=true;
            str:='xm';
          end;
         if combobox1.Text='呈报时间' then
          begin
            dateTimepicker1.Visible :=true;
            edit1.Visible :=false;
            str:='cbsj';
          end;
       end;
    end;procedure Tm_gbzwbddj.SpeedButton6Click(Sender: TObject);
    var
      sqltext:string;
    begin
     if combobox1.Text <>'' then
       begin
         if (combobox1.Text='呈报时间')  then
          begin
           with query1 do
             begin
               close;
               sql.Clear ;
               sql.add('select * from m_gbrmcb where '+ str +'=:Date1');
               ParamByName('Date1').value:=datetimepicker1.DateTime ;
               open;
             end;
          end else
          if combobox1.Text ='全部信息' then
          begin
           with query1 do
            begin
              close;
              sql.Clear ;
              sql.Add('select * from m_gbrmcb');
              open;
            end;
          end else
           with query1 do
            begin
              close;
              sql.Clear ;
              sqltext:='select * from m_gbrmcb where  '+str+'='+''''+trim(edit1.text)+'''';
              sql.Add(sqltext);
              open;
            end;
       end;
    end;procedure Tm_gbzwbddj.SpeedButton5Click(Sender: TObject);
    var
      dy_gbrmcbform: Tdy_gbrmcbform;
    begin
      if (query1.RecordCount<1) or (query1.Active=false) then
      begin
        application.MessageBox('没有信息可供您打印、浏览,请您重新选择','提示',mb_ok+mb_iconinformation);
        exit;
      end;
      dy_gbrmcbform:=Tdy_gbrmcbform.Create(application);
      dy_gbrmcbform.rydm :=dbedit1.Text ;
      dy_gbrmcbform.ShowModal;
    end;procedure Tm_gbzwbddj.FormCreate(Sender: TObject);
    begin
     with query1 do
     begin
       close;
       sql.clear;
       sql.Add('select * from m_gbrmcb where rydm like :rydm');
       params.items[0].asstring:=dwbm+'%';
       Prepare;
       open;
     end;
    end;end.
      

  14.   

    unit w_gbbdedt;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      Buttons, ExtCtrls, StdCtrls, ComCtrls, Db, DBTables,gagl_main;type
      Tgbbdform = class(TForm)
        Label1: TLabel;
        Label2: TLabel;
        Label3: TLabel;
        Label7: TLabel;
        Label8: TLabel;
        Label9: TLabel;
        Label10: TLabel;
        Label11: TLabel;
        Label12: TLabel;
        Label13: TLabel;
        Label14: TLabel;
        Shape2: TShape;
        Shape3: TShape;
        Shape5: TShape;
        Shape6: TShape;
        Shape7: TShape;
        Shape9: TShape;
        Shape10: TShape;
        Shape11: TShape;
        Shape13: TShape;
        Shape14: TShape;
        Shape4: TShape;
        Shape8: TShape;
        Shape15: TShape;
        Shape16: TShape;
        Shape1: TShape;
        Shape12: TShape;
        Edit1: TEdit;
        Edit2: TEdit;
        Edit3: TEdit;
        Edit4: TEdit;
        Edit5: TEdit;
        Edit6: TEdit;
        Edit7: TEdit;
        Edit8: TEdit;
        ComboBox1: TComboBox;
        DateTimePicker1: TDateTimePicker;
        RichEdit1: TRichEdit;
        Bevel1: TBevel;
        SpeedButton1: TSpeedButton;
        SpeedButton2: TSpeedButton;
        SpeedButton3: TSpeedButton;
        SpeedButton5: TSpeedButton;
        SpeedButton6: TSpeedButton;
        Query1: TQuery;
        Query2: TQuery;
        procedure SpeedButton6Click(Sender: TObject);
        procedure SpeedButton1Click(Sender: TObject);
        procedure SpeedButton3Click(Sender: TObject);
        procedure SpeedButton2Click(Sender: TObject);
        procedure Edit8Exit(Sender: TObject);
        procedure ComboBox1Change(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      gbbdform: Tgbbdform;implementation
    uses
     w_gbzwbddj;{$R *.DFM}procedure Tgbbdform.SpeedButton6Click(Sender: TObject);
    begin
      close;
    end;procedure Tgbbdform.SpeedButton1Click(Sender: TObject);
    begin
      if (combobox1.Text='') and (edit7.text='') then
      BEGIN
        EXIT;
      END;
      //if speedbutton2.Enabled =false then
      //begin
       //if m_gbzwbddj.Query1.Locate('rydm',dwbm+'-'+combobox1.text,[]) then
       //m_gbzwbddj.query1.edit else
       //exit;
      //end else
      //m_gbzwbddj.query1.Append ;
      //begin
       //m_gbzwbddj.query1.fieldbyname('rydm').asstring:=dwbm+'-'+combobox1.Text ;
       //m_gbzwbddj.query1.fieldbyname('jh').asstring :=edit7.Text;
       //m_gbzwbddj.query1.fieldbyname('xm').asstring:=edit6.text;
       //m_gbzwbddj.query1.fieldbyname('nrzw').asstring :=edit5.Text;
       //m_gbzwbddj.query1.Fieldbyname('nmzw').asstring:=edit4.Text ;
       //m_gbzwbddj.query1.fieldbyname('cbsj').value:=datetimepicker1.DateTime;
       //m_gbzwbddj.query1.fieldbyname('zybx').asstring:=edit3.text;
       //m_gbzwbddj.query1.fieldbyname('cbdwyj').asstring:=edit2.text;
       //m_gbzwbddj.query1.fieldbyname('spjd').asstring:=edit1.Text ;
       //m_gbzwbddj.query1.fieldbyname('sftg').asstring :=edit8.Text;
       //m_gbzwbddj.query1.fieldbyname('bz').asstring:=richedit1.Text;
       //m_gbzwbddj.query1.post;
       query1.Close;
       query1.SQL.Clear ;
       query1.sql.Add('select * from m_gbrmcb where rydm like :rydm');
       query1.params.items[0].asstring:=dwbm+'%';
       query1.Prepare;
       query1.open;
      if speedbutton2.Enabled =false then
      begin
       if Query1.Locate('rydm',dwbm+'-'+combobox1.text,[]) then
       query1.edit else
       exit;
      end else
      query1.Append ;
      begin
        query1.fieldbyname('rydm').asstring:=dwbm+'-'+combobox1.Text ;
       query1.fieldbyname('jh').asstring :=edit7.Text;
       query1.fieldbyname('xm').asstring:=edit6.text;
       query1.fieldbyname('nrzw').asstring :=edit5.Text;
       query1.Fieldbyname('nmzw').asstring:=edit4.Text ;
       query1.fieldbyname('cbsj').value:=datetimepicker1.DateTime;
       query1.fieldbyname('zybx').asstring:=edit3.text;
       query1.fieldbyname('cbdwyj').asstring:=edit2.text;
       query1.fieldbyname('spjd').asstring:=edit1.Text ;
       query1.fieldbyname('sftg').asstring :=edit8.Text;
       query1.fieldbyname('bz').asstring:=richedit1.Text;
       query1.post;
      end;
      close;
    end;procedure Tgbbdform.SpeedButton3Click(Sender: TObject);
    begin
      if (combobox1.Text<>'') and (edit7.text<>'') then
      Query1.Cancel ;
      close;
    end;procedure Tgbbdform.SpeedButton2Click(Sender: TObject);
    begin
       {if (combobox1.Text<>'') and (edit7.text<>'') then
       begin
       m_gbzwbddj.query1.Append ;
       begin
       m_gbzwbddj.query1.fieldbyname('rydm').asstring:=dwbm+'-'+combobox1.Text ;
       m_gbzwbddj.query1.fieldbyname('jh').asstring :=edit7.Text;
       m_gbzwbddj.query1.fieldbyname('xm').asstring:=edit6.text;
       m_gbzwbddj.query1.fieldbyname('nrzw').asstring :=edit5.Text;
       m_gbzwbddj.query1.Fieldbyname('nmzw').asstring:=edit4.Text ;
       m_gbzwbddj.query1.fieldbyname('cbsj').value:=datetimepicker1.DateTime;
       m_gbzwbddj.query1.fieldbyname('zybx').asstring:=edit3.text;
       m_gbzwbddj.query1.fieldbyname('cbdwyj').asstring:=edit2.text;
       m_gbzwbddj.query1.fieldbyname('spjd').asstring:=edit1.Text ;
       m_gbzwbddj.query1.fieldbyname('sftg').asstring :=edit8.Text;
       m_gbzwbddj.query1.fieldbyname('bz').asstring:=richedit1.Text;
       m_gbzwbddj.query1.post;  }
       query1.Close;
       query1.SQL.Clear ;
       query1.sql.Add('select * from m_gbrmcb where rydm like :rydm');
       query1.params.items[0].asstring:=dwbm+'%';
       query1.Prepare;
       query1.open;
       if (combobox1.Text<>'') and (edit7.text<>'') then
       begin
       query1.Append ;
       begin
       query1.fieldbyname('rydm').asstring:=dwbm+'-'+combobox1.Text ;
       query1.fieldbyname('jh').asstring :=edit7.Text;
       query1.fieldbyname('xm').asstring:=edit6.text;
       query1.fieldbyname('nrzw').asstring :=edit5.Text;
       query1.Fieldbyname('nmzw').asstring:=edit4.Text ;
       query1.fieldbyname('cbsj').value:=datetimepicker1.DateTime;
       query1.fieldbyname('zybx').asstring:=edit3.text;
       query1.fieldbyname('cbdwyj').asstring:=edit2.text;
       query1.fieldbyname('spjd').asstring:=edit1.Text ;
       query1.fieldbyname('sftg').asstring :=edit8.Text;
       query1.fieldbyname('bz').asstring:=richedit1.Text;
       query1.post;
       end;
       end;
       combobox1.Text :='';
       edit7.Text :='';
       edit6.text:='';
       edit5.Text :='';
       edit4.Text :='';
       datetimepicker1.DateTime:=date;
       edit3.text:='';
       edit2.text:='';
       edit1.Text :='';
       edit8.Text :='';
       richedit1.Clear ;
    end;procedure Tgbbdform.Edit8Exit(Sender: TObject);
    begin
       if edit8.Text='是' then
       begin
         if application.MessageBox('','',mb_okcancel+mb_iconinformation)=mrok  then
           begin
           end;
       end
    end;procedure Tgbbdform.ComboBox1Change(Sender: TObject);
    begin
      with query2 do
      begin
        close;
        sql.clear;
        sql.add('select * from m_jbqk where rydm =:rydm');
        params.items[0].asstring:=dwbm+'-'+combobox1.text;
        prepare;
        open;
        edit7.text:=fieldbyname('jh').asstring;
        edit6.text:=fieldbyname('xm').asstring;
      end;
    end;end.
      

  15.   

    自己写的单元都放在implementation下面引用是对的,就算交叉引用也没有问题!!
    代码就懒得看了,我想你是不是注意一下窗体的创建顺序以及窗体是否该及时释放
      

  16.   

    TO bosshawk(BossHawk)
    我想你是不是注意一下窗体的创建顺序//能不能说清楚一点?
    谢谢
      

  17.   

    我比较同意changeway() 的意见,大家可以参考他的意见,这样的却比较好的
      

  18.   

    其实如果用unit3的话
    我就会应该用dll
    可是不行啊
      

  19.   

    unit1 or unit2不要都创建就可以
      

  20.   

    就是有一个放到auto-create里;
    程序法过去了
      

  21.   

    implementation
    uses UNIT2;var
    Aunit : Tunit2;
    ....try
    Aunit := Tunit2.create(self);
    .........
    finally
    Aunit.free
    end;