PurchaseFrm.Query2.Active := False;
PurchaseFrm.Query2.Active := True;
Close;
PurchaseRecordFrm.Free;
先释放了父窗体,哪来的Query2啊

解决方案 »

  1.   

    首先,必须使用Use 将PurchaseFrm加入第一个窗体。然后你才可以在第一个窗体中引用第二个窗体里的控件,其次,在第一个窗体中确定数据是被写入到表中,而不是只是留在内存里。如果数据确实被写入表中那么刷新应该是没问题的。你可以分步看看问题出在哪里。
      

  2.   

    我想你可能在主程序中还有其他地方用到了PurchaseRecordFrm吧。
    那就在关闭按钮里不Free,在程序主窗体关闭时再Free也可以。
    ...//Query2的设置
    PurchaseFrm.Query2.Execute;
    Close;
      

  3.   

    我看过了,没有你们说的问题,我现在把程序调整:
    PurchaseFrm.Query2.Active := False;
    PurchaseFrm.Query2.Active := True;
    Close;
    PurchaseRecordFrm.Free;
    可是调试的时候,PurchaseFrm.Query2.Active := False;该语句就发生错误,
    Access Violation...我查过了,好像是指针发生错误,如何解决该问题?
      

  4.   

    你试着不用Active看还有没有问题,窗体关闭按钮的Click事件这样写呢:
    procedure TPurchaseRecordFrm.Button3Click(Sender: TObject);
    begin
      with PurchaseFrm.Query2 do
      begin
        Close;
        SQL.Clear;
        SQL.Add('select ...'); //刷新PurchaseFrm中的相关数据
        Open;
      end;
      Close;
      Free;
    end;
      

  5.   

    我试过了,好像主要的问题是我引用PurchaseFrm.Query2时会发生错误,为什么会发生该引用错误,请大家帮我分析一下。
      

  6.   

    在implementation中进行引用,不要在interface中引用
      

  7.   

    先在implementation中进行引用PurchaseFrm;
    然后再procedure TPurchaseRecordFrm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);中打开PurchaseFrm.Query2
    PurchaseFrm.Query2.active:=false;
    PurchaseFrm.Query2.active:=true;再在procedure TPurchaseRecordFrm.Button3Click(Sender: TObject);
    中关闭窗口就好了
    close;
    PurchaseRecordFrm.Free;的工作不应该在Button3Click中来做
      

  8.   

    我发现问题了,原来PurchaseFrm在调试的时候为nil,所以取不到值,我两个单元都是在Implementation中声明的,是不是这里面有什么错误。请帮我提供一个解决方法。
      

  9.   

    PurchaseFrm你create了没有啊,程序运行的时候能不能看到这个窗体呢?
    拜托了,这绝对是个很简单的问题,不要打哑谜了。
      

  10.   

    PurchaseFrm要么系统自动创建,要么在引用前必须手工创建
    在Project-》Options-》左边有没有PurchaseFrm?
    或者PurchaseFrm在什么地方被你Free了
      

  11.   

    这两个窗口我都创建了,PurchaseRecordFrm能够使用PurchaseFrm单元文件的其他变量,但是无法调用PurchaseFrm,不知道为什么。
      

  12.   

    你真是很奇怪,看看你的两个unit文件什么都解决了,你叫大家给你猜什么呀?做游戏么?
      

  13.   

    你可把
      PurchaseFrm.Query2.Active := False;
      PurchaseFrm.Query2.Active := True;
    写在PurchaseRecordFrm的onclosequery的事件中在PurchaseRecordFrm的onclose写action:= cafree;procedure TPurchaseRecordFrm.Button3Click(Sender: TObject);
    begin
      Close;
    end;
    这样应该没有问题了
      

  14.   

    Access Violation...
    的问题
    可能是你没有创建窗体
    有没有使用application.creatform(tform,form)创建你要使用的窗体