小弟我自学Delphi,刚上手,下面的问题我琢磨不出来了。
有两个Table: T_Table1(ADOQuery1)和T_Table2(ADOQuery2),DBGridEh1,btnShow,btnSave
T_Table1的字段:name depart age salary
T_Table2的字段:name depart age salary fee(支出费用,货币格式)
我的目的:点击show按钮,把T_Table1的信息只显示在DBGridEh1中,不保存进T_Table2,
----------------------------------------
|name | depart | age | salary | fee |
|————————————————————-
| | | | | |
然后在fee字段里敲入数据,再点保存按钮,此时再把DBGridEh1中的数据保存进T_Table2中。
我的代码是这样的:
procedure TFrom.btnShowClick(Sender: TObject);
begin
//打开ADOQuery1(省略);
//打开ADOQuery2
with ADOQuery2 do
begin
Append;
FieldByName('name').asstring:=ADOQuery1.FieldByName('name').asstring;
FieldByName('depart').asstring:=ADOQuery1.FieldByName('depart').asstring;
FieldByName('age').asstring:=ADOQuery1.FieldByName('age').asstring;
FieldByName('salary').asstring:=ADOQuery1.FieldByName('salary').asstring;
Post;
end;
end;procedure TFrom.btnSaveClick(Sender: TObject);
begin
//打开ADOQuery1(省略);
//打开ADOQuery2
with ADOQuery2 do
begin
Append;
FieldByName('name').asstring:=ADOQuery1.FieldByName('name').asstring;
FieldByName('depart').asstring:=ADOQuery1.FieldByName('depart').asstring;
FieldByName('age').asstring:=ADOQuery1.FieldByName('age').asstring;
FieldByName('salary').asstring:=ADOQuery1.FieldByName('salary').asstring;
FieldByName('fee').asstring:=DBGridEh1.Columns[4];//把输入的fee存进T_Table2
Post;
end;
end;1.结果FieldByName('fee').asstring:=DBGridEh1.Columns[4];报错,
2.屏蔽掉FieldByName('fee').asstring:=DBGridEh1.Columns[4];这句后,程序通过,但保存的时候
fee字段保存不了,而且在DBGridEh1中出现两行同样的数据。
请问各位师兄,如何解决???是不是我的方法错了??有更优化的代码更好。谢谢
有两个Table: T_Table1(ADOQuery1)和T_Table2(ADOQuery2),DBGridEh1,btnShow,btnSave
T_Table1的字段:name depart age salary
T_Table2的字段:name depart age salary fee(支出费用,货币格式)
我的目的:点击show按钮,把T_Table1的信息只显示在DBGridEh1中,不保存进T_Table2,
----------------------------------------
|name | depart | age | salary | fee |
|————————————————————-
| | | | | |
然后在fee字段里敲入数据,再点保存按钮,此时再把DBGridEh1中的数据保存进T_Table2中。
我的代码是这样的:
procedure TFrom.btnShowClick(Sender: TObject);
begin
//打开ADOQuery1(省略);
//打开ADOQuery2
with ADOQuery2 do
begin
Append;
FieldByName('name').asstring:=ADOQuery1.FieldByName('name').asstring;
FieldByName('depart').asstring:=ADOQuery1.FieldByName('depart').asstring;
FieldByName('age').asstring:=ADOQuery1.FieldByName('age').asstring;
FieldByName('salary').asstring:=ADOQuery1.FieldByName('salary').asstring;
Post;
end;
end;procedure TFrom.btnSaveClick(Sender: TObject);
begin
//打开ADOQuery1(省略);
//打开ADOQuery2
with ADOQuery2 do
begin
Append;
FieldByName('name').asstring:=ADOQuery1.FieldByName('name').asstring;
FieldByName('depart').asstring:=ADOQuery1.FieldByName('depart').asstring;
FieldByName('age').asstring:=ADOQuery1.FieldByName('age').asstring;
FieldByName('salary').asstring:=ADOQuery1.FieldByName('salary').asstring;
FieldByName('fee').asstring:=DBGridEh1.Columns[4];//把输入的fee存进T_Table2
Post;
end;
end;1.结果FieldByName('fee').asstring:=DBGridEh1.Columns[4];报错,
2.屏蔽掉FieldByName('fee').asstring:=DBGridEh1.Columns[4];这句后,程序通过,但保存的时候
fee字段保存不了,而且在DBGridEh1中出现两行同样的数据。
请问各位师兄,如何解决???是不是我的方法错了??有更优化的代码更好。谢谢
解决方案 »
- 怎样从mpg4视频文件中截图和截取一段视频?求助!!
- 一直在向大家求教,今天贡献一个在线升级的东东回报,顺便散点分,呵呵 (申明下自己搞的D版)
- 求大家给些组件...
- 如何重载IsCustomDrawn函数
- 从文本文件中取一段文本?
- MS Sql 的索引和触发器的使用和编程(delphi) 下的
- 兄弟门谁知道CreateUDLFile是哪的函数,怎么声明啊?
- dbchart
- wise8.12序列号!
- 如何使用UrlDownloadtoFile下载文件使用进度条?
- 一台Linux的机器如何通过一台Windows的机器访问局域网内的其他机器。
- 请问在网页里面的activex控件如何能控制该网页里面的脚本呢?
但你的数据来源是表T_Table1,而你希望更新到T_Table2
这种方式是行不通的除非你不用数据感知控件,也就是说你不要用DBGrid
改用StringGrid这样,你就可以用一个按钮来实现将T_Table1中的数据填充到
StringGrid中,然后让用户编辑
之后,再通过Save按钮来保存用户的编辑数据
然后直接用DBGrid来编辑T_Table2即可如:
with AdoQuery1 do
begin
Close;
SQL.Text := 'Insert into T_Table2(name,depart,age,salary,fee) ' +
'select name,depart,age,salary, 0 from T_Table1';
ExecSQL;
end;
StringGrid我没用过啊,等我试试看
然后直接用DBGrid来编辑T_Table2s时,fee字段的金额如何保存?
FieldByName('fee').asstring:=DBGridEh1.Columns[4];这句行吗?
试:
FieldByName('fee').asstring:=DBGridEh1.Columns[4].asstring
根本不需要你写SQL语句的另外
FieldByName('fee').asstring:=DBGridEh1.Columns[4].asstring
这种写法,是有很大的依赖性的
如:
select name,fee,depart,age,salary from T_Table2
将会出错
我先将T_Table1中的数据全部增加到T_Table2中
然后直接用DBGrid来编辑T_Table2,
T_Table1的数据的确更新到T_Table2中了,但还有个问题:
此时,保存在T_Table2中出现了两条记录呀,
但你的代码已经把table1的内容保存到table2中了啊,你不是只显示就够了嘛?
我先将T_Table1中的数据全部增加到T_Table2中
with AdoQuery1 do
begin
Close;
SQL.Text := 'Insert into T_Table2(name,depart,age,salary,fee) ' +
'select name,depart,age,salary, 0 from T_Table1';
ExecSQL;
end;
然后直接用DBGrid来显示(此时不保存进Table2中),
在修改了DBGridEh中的fee字段后,点保存按钮保存将信息存进Table2中。
(请问是不是要用到缓存更新??我没接触过呀,请高人尽量给点代码参考学习!谢谢!)
我倒是作过把所有项都显示在StringGrid里的!