窗体间共享变量

asymmetric 2008-05-17 05:57:27
我做的是一个医院系统
想要实现在 门诊排班 模块中单击某个医生的工号 就显示他的具体信息
代码如下
unit OutArra;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, DB, ADODB, Buttons, ComCtrls, StdCtrls, ExtCtrls;

type
TOutArraForm = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Label1: TLabel;
Label2: TLabel;
ComboBox1: TComboBox;
DateTimePicker1: TDateTimePicker;
SpeedButton1: TSpeedButton;
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
procedure FormActivate(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure DBGrid1CellClick(Column: TColumn);
private
{ Private declarations }
public
{ Public declarations }
end;

var
OutArraForm: TOutArraForm;

implementation
uses MainDataModu,DateUtils,DoctBrie;
{$R *.dfm}

procedure TOutArraForm.FormActivate(Sender: TObject);
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select distinct 科室 from 医师,门诊排班 where 医师.工号=门诊排班.医师工号');
ADOQuery1.Open;
ComboBox1.Clear;
while not ADOQuery1.eof do
begin
ComboBox1.Items.Add(ADOQuery1.fieldByname('科室').asstring);
ADOQuery1.Next;
end;
Datetimepicker1.date:=now();
end;

procedure TOutArraForm.SpeedButton1Click(Sender: TObject);
var s,t:string;
var ind:integer;
begin
s:='select 午别,医师工号,姓名,看诊限额,已挂人数,是否停诊 from 医师,门诊排班 where 医师.工号=门诊排班.医师工号';
if ComboBox1.ItemIndex>=0 then s:=s+' and 医师.科室='''+ComboBox1.Items.Strings[ComboBox1.ItemIndex]+'''';
ind:=DayOfTheWeek(DateTimePicker1.DateTime);
case ind of
1:t:='星期一';
2:t:='星期二';
3:t:='星期三';
4:t:='星期四';
5:t:='星期五';
6:t:='星期六';
7:t:='星期天';
end;
s:=s+' and 门诊排班.午别 like '''+t+'%''';
DBGrid1.DataSource:= DataSource1;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(s);
ADOQuery1.Open;

end;

procedure TOutArraForm.DBGrid1CellClick(Column: TColumn);
begin
DoctBrie.ss:= DBGrid1.SelectedField.FieldName;
DoctBrie.tt:= DBGrid1.SelectedField.AsString;
Application.createForm(TDoctBrieForm,DoctBrieForm);
DoctBrieForm.ShowModal;
DoctBrieForm.Free;
end;

end.


unit DoctBrie;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, StdCtrls, ExtCtrls;

type
TDoctBrieForm = class(TForm)
Image1: TImage;
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Edit2: TEdit;
Label3: TLabel;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Label4: TLabel;
Label5: TLabel;
DataSource1: TDataSource;
ADOQuery1: TADOQuery;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
DoctBrieForm: TDoctBrieForm;
var
ss,tt:string;
implementation
uses MainDataModu,OutArra,dateUtils;
{$R *.dfm}

procedure TDoctBrieForm.FormCreate(Sender: TObject);
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from 医师 where ');
if ss='医师工号' then
begin
ADOQuery1.SQL.Add('工号='''+tt+'''');
end
else
begin
ADOQuery1.SQL.Add('姓名='''+tt+'''');
end;
ADOQuery1.Open;
Edit1.Text:=ADOQuery1.FieldValues['工号'];
Edit2.Text:=ADOQuery1.FieldValues['姓名'];
Edit3.Text:=IntTostr(yearof(now)-yearof(ADOQuery1.FieldValues['出生日期']));
Edit4.Text:=ADOQuery1.FieldValues['科室'];
Edit5.Text:=ADOQuery1.FieldValues['职称'];
end;

end.
但是运行的时候 查询出的记录为空,错误信息为 couid convert variant of type null into type string
请高手指点
...全文
71 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangj_0520 2008-05-20
  • 打赏
  • 举报
回复
联系我.
帮你调试.
QQ:150101097
studyrandy 2008-05-20
  • 打赏
  • 举报
回复
好像fieldvalues[]的地方没问题吧
shuihan20e 2008-05-20
  • 打赏
  • 举报
回复
ADOQuery.FieldByName('字段名').AsString
gzmhero 2008-05-20
  • 打赏
  • 举报
回复
ADOQuery1.Open;
Edit1.Text:=ADOQuery1.FieldValues['工号'];
Edit2.Text:=ADOQuery1.FieldValues['姓名'];
Edit3.Text:=IntTostr(yearof(now)-yearof(ADOQuery1.FieldValues['出生日期']));
Edit4.Text:=ADOQuery1.FieldValues['科室'];
Edit5.Text:=ADOQuery1.FieldValues['职称'];

一定是这里转换的问题,都换成 ADOQuery.FieldByName('工号').AsString 等的形式。
最好ADOQuery.Open后判断下ADOQuery.RecordCount再处理。
dd_zhouqian 2008-05-18
  • 打赏
  • 举报
回复
ADOQuery1.FieldValues['工号'];
FieldValues地方全都改成ADOQuery1.filename('字段名').asstring;
woniugongzuoshi 2008-05-17
  • 打赏
  • 举报
回复
sql中有结果值为null,不能赋给edit.text,如果不是数据表没有建约束的话,就是年龄计算那里出了问题。

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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