100分,大哥们都近来帮忙解决我的难题。。。。

yaccor 2005-06-22 10:04:00
小弟我自学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中出现两行同样的数据。
请问各位师兄,如何解决???是不是我的方法错了??有更优化的代码更好。谢谢

...全文
122 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
duanhai 2005-06-23
  • 打赏
  • 举报
回复
to楼主,如果你用的是C/S结构,且没有用缓存更新的话
根本不需要你写SQL语句的

另外
FieldByName('fee').asstring:=DBGridEh1.Columns[4].asstring
这种写法,是有很大的依赖性的
如:
select name,fee,depart,age,salary from T_Table2
将会出错
yaccor 2005-06-23
  • 打赏
  • 举报
回复
统计一下以上的问题,归纳如以下:
我先将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中。
(请问是不是要用到缓存更新??我没接触过呀,请高人尽量给点代码参考学习!谢谢!)
yaccor 2005-06-23
  • 打赏
  • 举报
回复
我就是不知道怎么让他显示而不保存啊,不知道怎么写
tbarce 2005-06-23
  • 打赏
  • 举报
回复
你的目的:点击show按钮,把T_Table1的信息只显示在DBGridEh1中,不保存进T_Table2
但你的代码已经把table1的内容保存到table2中了啊,你不是只显示就够了嘛?
yaccor 2005-06-23
  • 打赏
  • 举报
回复
以上的各位谢谢了,
我先将T_Table1中的数据全部增加到T_Table2中
然后直接用DBGrid来编辑T_Table2,
T_Table1的数据的确更新到T_Table2中了,但还有个问题:
此时,保存在T_Table2中出现了两条记录呀,
fansnaf 2005-06-23
  • 打赏
  • 举报
回复
sql语句更新
tbarce 2005-06-23
  • 打赏
  • 举报
回复
你是想一下子把table1里面的所有项都显示在DBgrid里,还是每次选择一项显示在里面?
我倒是作过把所有项都显示在StringGrid里的!
yaccor 2005-06-23
  • 打赏
  • 举报
回复
自己顶
steelxu5 2005-06-22
  • 打赏
  • 举报
回复
结果FieldByName('fee').asstring:=DBGridEh1.Columns[4];报错,
试:
FieldByName('fee').asstring:=DBGridEh1.Columns[4].asstring
lovend 2005-06-22
  • 打赏
  • 举报
回复
帮你顶
yaccor 2005-06-22
  • 打赏
  • 举报
回复
将T_Table1中的数据全部增加到T_Table2中
然后直接用DBGrid来编辑T_Table2s时,fee字段的金额如何保存?
FieldByName('fee').asstring:=DBGridEh1.Columns[4];这句行吗?
yaccor 2005-06-22
  • 打赏
  • 举报
回复
谢谢 duanhai(段海)
StringGrid我没用过啊,等我试试看
duanhai 2005-06-22
  • 打赏
  • 举报
回复
另外一种方式:就是先将T_Table1中的数据全部增加到T_Table2中
然后直接用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;
duanhai 2005-06-22
  • 打赏
  • 举报
回复
首先楼主希望通过一个DBGrid来实现数据的编辑
但你的数据来源是表T_Table1,而你希望更新到T_Table2
这种方式是行不通的

除非你不用数据感知控件,也就是说你不要用DBGrid
改用StringGrid

这样,你就可以用一个按钮来实现将T_Table1中的数据填充到
StringGrid中,然后让用户编辑
之后,再通过Save按钮来保存用户的编辑数据

828

社区成员

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

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