定义的全局变量值为什么不传递的?(100分)

  • 主题发起人 主题发起人 friendship
  • 开始时间 开始时间
F

friendship

Unregistered / Unconfirmed
GUEST, unregistred user!
我是在unit1(form1)中public中定义的i:string
并赋值i:='aaaaaa';,但在unit2(form2)中调用
j:=form1.i
结果i值并没有传递过来,请问为什么?
已经有过许多这方面的回答了,但我还是试不出,
 
form1沒有引用form2.
 
什么时候赋的值,又是什么时候调用的?
 
应该不会有这样的情况的呀。如果如jeary大侠所言,你的程序都应该不能编译的。
能否把代码贴出来看看。看问题出在哪?
 
在form1中
i:='test';
form1.hide;
form2.show;
在form2中
j:=form1.i;
(没有引用)
 
老大,如果实在作不出来,去书店看一下书本,无需花钱噢^_^!
 
我没钱,空有一番热情,还是拜托各位大虾
 
没说清楚,赋值和引用分别是在哪一个事件里啊?
 
我在unit1(form1)中先赋值,然后在unit2(form2)中调用j:=form1.i,请问写法有问题吗?
结果就是值没有传赋过来,?????
 
你的程序能编译通过吗
 
>> 我在unit1(form1)中先赋值,然后在unit2(form2)中调用j:=form1.i,
你当是你写代码的顺序啊?

是代码执行的顺序。。。
你这些代码是放在 ONFORMCREATE 中或者哪个 BUTTON 被 CLICK 后执行再或者别的“事件”里???
 
把所有代码贴出来,你会得到回答的
 
你在unit1的什么地方赋的值
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, jpeg, ExtCtrls,comobj;

type
TForm1 = class(TForm)
Image1: TImage;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label7: TLabel;
Label8: TLabel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
i_user: TEdit;
i_passwd: TEdit;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
user,name,dept,popedom:string;
end;

var
Form1: TForm1;
Conn1, Rec1 : variant;

implementation

uses Unit2, Unit5;

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Conn1 :=CreateOleObject('ADODB.Connection');
//Conn1.Open('Driver={Microsoft Access Driver (*.mdb)};DBQ=e:/房产管理/system.dat');
Conn1.Open('Driver={SQL Server};server=erp-server;uid=admin1;pwd=admin1;database=企业信息资源');
//driver={SQL Server};server=服务器;uid=用户名;pwd=口令;database=数据库名
{建立一个数据集对象,并从数据表中提取数据}
Rec1 :=CreateOleObject('ADODB.RecordSet');
Rec1.open( 'select * from 用户 where 用户名='''+i_user.text+'''',Conn1,3,3,0001);
if not rec1.eof then
begin
if rec1.fields['密码'].value=i_passwd.Text then
begin
if rec1.fields['职责'].value='车间' then
begin
[red] user:=rec1.fields['用户名'].value;
name:=rec1.fields['姓名'].value;
dept:='asdfasdfasadf';[/black][/red] dept:=rec1.fields['部门'].value ;
popedom:=rec1.fields['职责'].value ;[/b][/b]
form1.Free ;
formB.show;
end ;
end
else
begin
Messagedlg('密码有误,请重新输入', mtInformation,[mbok],0);
end;
end
else
begin
Messagedlg('该用户名不存在,请重新输入', mtInformation,[mbok],0);
end ;
end;
end.
unit Unit4;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, StdCtrls, DB, DBTables, DBCtrls,comobj,unit1;

type
TFormB11 = class(TForm)
GroupBox2: TGroupBox;
Label6: TLabel;
Label9: TLabel;
Label10: TLabel;
Edit2: TEdit;
Edit4: TEdit;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Button8: TButton;
Label5: TLabel;
Edit1: TEdit;
Label1: TLabel;
Label3: TLabel;
Label4: TLabel;
Label7: TLabel;
Label8: TLabel;
Edit5: TEdit;
Edit6: TEdit;
Edit3: TEdit;
Edit7: TEdit;
Edit8: TEdit;
Edit9: TEdit;
Edit10: TEdit;
Label2: TLabel;
ComboBox1: TComboBox;
Label11: TLabel;
ComboBox2: TComboBox;
Label12: TLabel;
Label13: TLabel;
Button1: TButton;
Button2: TButton;
Button7: TButton;
Label14: TLabel;
Edit11: TEdit;
Label15: TLabel;
Edit12: TEdit;
StringGrid1: TStringGrid;
Label16: TLabel;
procedure Button8Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
FormB11: TFormB11;
Conn1, Rec1 : variant;
t,i:integer;

implementation

uses Unit2, Unit6;

{$R *.dfm}


procedure TFormB11.FormCreate(Sender: TObject);
begin
edit1.Text :=formatdatetime('yyyymm',date);
combobox2.Clear ;
Conn1 :=CreateOleObject('ADODB.Connection');
Conn1.Open('Driver={SQL Server};server=erp-server;uid=admin1;pwd=admin1;database=企业信息资源');
{建立一个数据集对象,并从数据表中提取数据}
Rec1 :=CreateOleObject('ADODB.RecordSet');
Rec1.open( 'select * from 部门 where cdepprop=''制造部门'' order by cdepcode' ,Conn1,3,3,0001);
while not Rec1.Eof do
begin
combobox2.Items.Add (rec1.fields['cdepcode'].value+' '+rec1.fields['cdepname'].value);
rec1.movenext;
end;
rec1.close;
[red]combobox2.Text :=copy(form1.user,1,3)+form1.dept+'test'+form1.Label1.Caption ;[/red]combobox1.Clear ;
{建立一个数据集对象,并从数据表中提取数据}
//Rec1 :=CreateOleObject('ADODB.RecordSet');
Rec1.open( 'select * from 工号 order by 工号 desc' ,Conn1,3,3,0001);
while not Rec1.Eof do
begin
combobox1.Items.Add (rec1.fields['工号'].value+' '+rec1.fields['工程名称'].value);
rec1.movenext;
end;
rec1.close ;
conn1.close ;
end;
end.
 
其实是两个独立的unit,请注意红色部分
 
我大致知道什么原因了。你试试看。
你把
user,name,dept,popedom:string
换成
Suser,Sname,dept,popedom:string
然后把相应的地方也都换一换。再运行看看。
可能是你的变量和系统或数据库的关键字冲突。

 
另红色的赋值部分可不可以这样:
[red]Suser[/red]:=rec1.[red]FieldByName('用户名').AsString[/red];
[red]Sname[/red]:=rec1.[red]FieldByName('姓名').AsString[/red];


 
form1.Free
<--- 这个为什么不是 hide ?
formB.show
<--- 这个是 formB11 吗?
 
对呀,你说的不是:
form1.hide;
form2.show;
吗?

 
各位老大:
你们有没认真考虑啊,做过试验吗?
 
后退
顶部