新建窗体的问题,请高手指教

pladxhy 2011-08-19 02:59:07
小弟现在有一个子窗体,子窗体上放了一些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;

interface

uses
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}
...全文
156 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
pladxhy 2011-08-19
  • 打赏
  • 举报
回复
照样出错。。。我觉得是窗体创建的时候带入的参数估计有问题。。。
pladxhy 2011-08-19
  • 打赏
  • 举报
回复
好的,我来试试看,但是我想应该不是这个问题,这只是一套皮肤控件。。。
funxu 2011-08-19
  • 打赏
  • 举报
回复
你前面的代码我还真没看出问题
我看你用了一个第三方控件
plantno: TRzEdit;这个我没用过,不知道特点是什么
你尝试把他换成一个tedit看看会赋值还会报错么?
pladxhy 2011-08-19
  • 打赏
  • 举报
回复
绝对不是数据库的问题,事实上,我子窗体有一个dbgrid,数据库的查询我是先显示在dbgrid里的,如果数据库查询有问题,那么不会再这个DBGRID的点击事件里报错了!!!这个我非常确定,
这里不好发图,请高手加我QQ:826746124
funxu 2011-08-19
  • 打赏
  • 举报
回复
很奇怪的问题啊
var
str:string;

str:=ADOQuery1.Fieldbyname('planno').AsString;
plantno.Text:= str;
你看看报错是在第一句还是在第二句,反正先排除是不是数据库的问题
pladxhy 2011-08-19
  • 打赏
  • 举报
回复
缺点字符串够长,绝对够。。。
错误信息如下:
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.
funxu 2011-08-19
  • 打赏
  • 举报
回复
把你的错误代码帖上来看一下啊,另外你这句
unitname.Text:=copy(LINENAME2.Text,1,8);
确定字符串够长么?
pladxhy 2011-08-19
  • 打赏
  • 举报
回复
求高手指点错误在哪里。。。
naiter 2011-08-19
  • 打赏
  • 举报
回复
同意楼上的说法
pladxhy 2011-08-19
  • 打赏
  • 举报
回复
plantno.Text:=ADOQuery1.Fieldbyname('planno').AsString;
一执行到这句就报内存错,但是忽略在继续执行,其实值已经赋给了这些edit
pladxhy 2011-08-19
  • 打赏
  • 举报
回复
赋值在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;
bdmh 2011-08-19
  • 打赏
  • 举报
回复
你的赋值在哪,你用的好像都是局部变量,出了方法就无法访问了

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧