A
a_ying
Unregistered / Unconfirmed
GUEST, unregistred user!
环境:
用paradox建二张表,一张基本表1,一张只有字段名的应用表2。
基本表1 (应用)表2
工号 姓名 住 址 电 话 技术等级 工号 姓 名 技术等级 出勤天数
0001 张三 南京路 36546 5级 (输入) (自动)(自动) (输入)
0002 李四 中山路 56987 4级
0003 王二 华工路 26545 6级
... ... ... ... ...
0900
1.在form1中添加table1,datasource1,DBgrid1 (指向表2);table2,datasource2,DBgrid2(指向表1)。
2.在dbgrid1中建立永久字段名:工号 姓 名 技术等级 出勤天数 。
3. 我想实现这样目的(运行期):在表中(DBGRID1)手工输入“工号”,如0003,
程序实现自动填写“姓名”,“技术等级”,而且“姓名”,“技术等级”能 改 写。
而“出勤天数”由手工输入,如30天 ,一行输入(自动填写)完毕后回车或按向下方向键,
表格自动换行(增加一行),继续完成类似输入,如0008,25天。直到满足需要,
并打印此表。
4.我试着使用下面办法(不使用查找字段方法,不增加其它控件),代码如下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBTables, Grids, DBGrids;
type
TForm1 = class(TForm)
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Table1: TTable;
Table2: TTable;
DataSource2: TDataSource;
DBGrid2: TDBGrid;
procedure DBGrid1Enter(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.DBGrid1Enter(Sender: TObject);
var
i:string;
begin
with table1 do
begin
last;
edit;
i:=dbgrid1.selectedfield.AsString ;
post;
edit;
table1.fieldbyname('工号').AsString :=i ;
table1.fieldbyname('姓名').AsString :=table2.fieldbyname('姓名').AsString ;
table1.fieldbyname('技术等级').AsString :=table2.fieldbyname('技术等级').AsString ;
post;
end;
end;
end.
5. 问:上述方法错在哪?比较好的方法是。。。?如果用query控件,sql语句如何写,通过什么事件触发较好?
烦请大侠指点,原闻其详! 最好有代码提示。先谢谢了![][green][/green]
用paradox建二张表,一张基本表1,一张只有字段名的应用表2。
基本表1 (应用)表2
工号 姓名 住 址 电 话 技术等级 工号 姓 名 技术等级 出勤天数
0001 张三 南京路 36546 5级 (输入) (自动)(自动) (输入)
0002 李四 中山路 56987 4级
0003 王二 华工路 26545 6级
... ... ... ... ...
0900
1.在form1中添加table1,datasource1,DBgrid1 (指向表2);table2,datasource2,DBgrid2(指向表1)。
2.在dbgrid1中建立永久字段名:工号 姓 名 技术等级 出勤天数 。
3. 我想实现这样目的(运行期):在表中(DBGRID1)手工输入“工号”,如0003,
程序实现自动填写“姓名”,“技术等级”,而且“姓名”,“技术等级”能 改 写。
而“出勤天数”由手工输入,如30天 ,一行输入(自动填写)完毕后回车或按向下方向键,
表格自动换行(增加一行),继续完成类似输入,如0008,25天。直到满足需要,
并打印此表。
4.我试着使用下面办法(不使用查找字段方法,不增加其它控件),代码如下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBTables, Grids, DBGrids;
type
TForm1 = class(TForm)
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Table1: TTable;
Table2: TTable;
DataSource2: TDataSource;
DBGrid2: TDBGrid;
procedure DBGrid1Enter(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.DBGrid1Enter(Sender: TObject);
var
i:string;
begin
with table1 do
begin
last;
edit;
i:=dbgrid1.selectedfield.AsString ;
post;
edit;
table1.fieldbyname('工号').AsString :=i ;
table1.fieldbyname('姓名').AsString :=table2.fieldbyname('姓名').AsString ;
table1.fieldbyname('技术等级').AsString :=table2.fieldbyname('技术等级').AsString ;
post;
end;
end;
end.
5. 问:上述方法错在哪?比较好的方法是。。。?如果用query控件,sql语句如何写,通过什么事件触发较好?
烦请大侠指点,原闻其详! 最好有代码提示。先谢谢了![][green][/green]