我做的是一个医院系统
想要实现在 门诊排班 模块中单击某个医生的工号 就显示他的具体信息
代码如下
unit OutArra;interfaceuses
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;interfaceuses
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
请高手指点
想要实现在 门诊排班 模块中单击某个医生的工号 就显示他的具体信息
代码如下
unit OutArra;interfaceuses
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;interfaceuses
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
请高手指点
解决方案 »
- cxgrid 单元格值随着另一单元格值变化而变化
- Delphi7 高手进!!!求帮助 各位大侠
- 如何让 主线程 等待 一个指定 的 子线程 ?????, 注:等待期间不可 堵塞主线程 !!!!!
- TcxGrid中的boolean数据列的疑惑?
- 奇怪的for 循环问题.
- 判断
- 哪里有ERWIN的质料下载?
- 我想在ie的右键菜单中增加一项,执行一个脚本对ie中选择的文本进行处理,如flashget目录中的jc_link.htm,该怎么取得文本,好像不能直接
- 帮帮忙啊,谁有关于软件测试的论文啊,我正在写毕业论文。好难写啊。
- 下一场什么时候踢!多谢赐教!第一个给分!
- 求做毕业设计
- 我做了一个界面程序,系统开始运行后是在等待有鼠标点击某个任务,才会有响应,可不可以系统开始运行时,自动加载某个特定的任务?
FieldValues地方全都改成ADOQuery1.filename('字段名').asstring;
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再处理。