小弟现在有一个子窗体,子窗体上放了一些edit框和dbgrid以及按钮,现在想把这个子窗体创建在主窗体的一个tabsheet上,但是创建后发现了一个很奇怪的问题,当点击菜单,点开那个子窗体后,想给子窗体上得某个edit框赋值,就报内存错,很神奇,请教高手错在哪里创建子窗体的程序如下:
procedure TFrmMain.donodeselect(nodestr: string);
var newform:tform;
    str1,str2: string;
begin
  if nodestr='东区铁前生产实绩录入' then
  begin
  OpenFormPage('东区铁前生产实绩录入', TFrm_Result_Plan_LT,newform,Frm_Result_Plan_LT);
  end;
end;procedure TFrmMain.OpenFormPage(TabCaption: string;
  Formclass: TFormClass; var Myform; AOwner: Tcomponent);
var
  i:Integer;
  Found:Boolean;
  ATab:TRzTabSheet;
  AForm:TForm;
begin
  Found:=False;
  for i:=0 to FormPage.PageCount-1 do
  if FormPage.Pages[i].ControlCount>0 then
  begin
    if FormPage.Pages[i].Controls[0].ClassName=Formclass.ClassName then
    begin
      FormPage.ActivePageIndex:=i;
      Found:=True;
    end;
  end;
  if not Found then
  begin
    ATab:=TRzTabSheet.Create(FormPage);
    ATab.PageControl:=FormPage;
    AForm:=TForm(Formclass.Create(self));
    ATab.Caption:=TabCaption;
    AForm.Parent:=ATab;
    AForm.Align:=alclient;
    AForm.BorderStyle:=bsNone;
    AForm.Visible:=True;
    FormPage.ActivePage:=ATab;
    AForm.Show;
  end;
end;以下是子窗体定义的内容
unit ResultOfPlan_LT;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids, RzDBGrid, RzTabs, ImgList, StdCtrls, RzLabel,
  RzPanel, RzDBNav, Mask, RzEdit, RzButton, ExtCtrls, DB, DBClient, ADODB,
  RzCmboBx, RzRadChk, Buttons, ComCtrls;type
  TFrm_Result_Plan_LT = class(TForm)
    ImageList1: TImageList;
    Panel2: TPanel;
    DS1: TDataSource;
    ADOQuery1: TADOQuery;
    RzPanel1: TRzPanel;
    RzPanel2: TRzPanel;
    RzPanel3: TRzPanel;
    RzPanel4: TRzPanel; 
    RzPanel5: TRzPanel;
    RzBitBtn1: TRzBitBtn;
    RzGroupBox1: TRzGroupBox;
    RzDBGrid1: TRzDBGrid;
    Timer1: TTimer;
    DateTimePicker2: TDateTimePicker;
    RzLabel8: TRzLabel;
    RzLabel9: TRzLabel;
    DateTimePicker3: TDateTimePicker;
    RzCheckBox1: TRzCheckBox;
    RzCheckBox2: TRzCheckBox;
    RzLabel5: TRzLabel;
    Cod_LineName: TRzComboBox;
    RzLabel13: TRzLabel;
    material2: TRzEdit;
    RzBitBtn6: TRzBitBtn;
    RzGroupBox3: TRzGroupBox;
    RzPanel6: TRzPanel;
    RzGroupBox2: TRzGroupBox;
    RzDBGrid2: TRzDBGrid;
    RzBitBtn3: TRzBitBtn;
    RzLabel15: TRzLabel;
    DateTimePicker4: TDateTimePicker;
    RzLabel16: TRzLabel;
    RzLabel17: TRzLabel;
    shift2: TRzComboBox;
    RzLabel18: TRzLabel;
    material3: TRzEdit;
    RzBitBtn4: TRzBitBtn;
    DataSource2: TDataSource;
    steelgrade2: TRzComboBox;
    RzCheckBox3: TRzCheckBox;
    RzPanel7: TRzPanel;
    RzLabel7: TRzLabel;
    wll: TRzEdit;
    RzLabel6: TRzLabel;
    RzLabel4: TRzLabel;
    RzLabel10: TRzLabel;
    DateTimePicker1: TDateTimePicker;
    RzLabel12: TRzLabel;
    SHIFTID: TRzComboBox;
    RzLabel1: TRzLabel;
    plantno: TRzEdit;
    RzBitBtn20: TRzBitBtn;
    LINENAME2: TRzEdit;
    RzLabel2: TRzLabel;
    tcbz: TRzComboBox;
    RzBitBtn2: TRzBitBtn;
    RzBitBtn5: TRzBitBtn;
    RzLabel3: TRzLabel;
    LineCode: TRzEdit;
    RzLabel11: TRzLabel;
    unitno: TRzEdit;
    unitname: TRzEdit;
    RzLabel14: TRzLabel;
    CDS2: TClientDataSet;
    matno: TComboBox;
    RzLabel19: TRzLabel;
    procedure FormShow(Sender: TObject);
    procedure RzBitBtn20Click(Sender: TObject);
    procedure comb3KeyPress(Sender: TObject; var Key: Char);
    procedure RzBitBtn22Click(Sender: TObject);
    procedure RzBitBtn6Click(Sender: TObject);
    procedure RzBitBtn21Click(Sender: TObject);
    procedure RzCheckBox1Click(Sender: TObject);
    procedure RzCheckBox2Click(Sender: TObject);
    procedure RzBitBtn1Click(Sender: TObject);
    procedure plantnoChange(Sender: TObject);
    procedure NOKeyPress(Sender: TObject; var Key: Char);
    procedure RzDBGrid1CellClick(Column: TColumn);
    procedure RzEdit2KeyPress(Sender: TObject; var Key: Char);
    procedure RzBitBtn4Click(Sender: TObject);
    procedure RzCheckBox3Click(Sender: TObject);
    procedure wllKeyPress(Sender: TObject; var Key: Char);
    procedure tcbzChange(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Frm_Result_Plan_LT: TFrm_Result_Plan_LT;
  sqlstr : string;
  v_material,v_steelgrade,v_spec,v_material_type,v_material_txt,v_length,v_FormName : string;
  v_plantno:string;
implementation
uses udm, ULogin,Unit_Find_Mat,Umain;
{$R *.dfm}

解决方案 »

  1.   

    赋值在TFrm_Result_Plan_LT这个窗体的这个事件里procedure TFrm_Result_Plan_LT.RzDBGrid1CellClick(Column: TColumn);
    var
      sql:string;
    begin
      if (RzDBGrid1.SelectedRows.Count>0) and (matno.Text='') then
      begin
        plantno.Text:=ADOQuery1.Fieldbyname('planno').AsString;
        LINENAME2.Text:=ADOQuery1.Fieldbyname('LINENAME').AsString;
        LINECODE.Text:=ADOQuery1.Fieldbyname('LINECODE').AsString;
        unitname.Text:=copy(LINENAME2.Text,1,8);
      end;
    end;
      

  2.   

    plantno.Text:=ADOQuery1.Fieldbyname('planno').AsString;
    一执行到这句就报内存错,但是忽略在继续执行,其实值已经赋给了这些edit
      

  3.   

    把你的错误代码帖上来看一下啊,另外你这句
    unitname.Text:=copy(LINENAME2.Text,1,8);
    确定字符串够长么?
     
      

  4.   

    缺点字符串够长,绝对够
    错误信息如下:
    Project Pjgdd.exe raised exception class EAccessViolation with message 'Access violation at address 0060E94E in module 'Pjgdd.exe'.Read of address 00000304'.Process stopped.Use Step or Run to continue.
      

  5.   

    很奇怪的问题啊
    var
    str:string;str:=ADOQuery1.Fieldbyname('planno').AsString;
    plantno.Text:= str;
    你看看报错是在第一句还是在第二句,反正先排除是不是数据库的问题
      

  6.   

    你前面的代码我还真没看出问题
    我看你用了一个第三方控件
    plantno: TRzEdit;这个我没用过,不知道特点是什么
    你尝试把他换成一个tedit看看会赋值还会报错么?