关于DBGIRD的问题!急!!!(100分)

  • 主题发起人 主题发起人 guancw
  • 开始时间 开始时间
G

guancw

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在DBGIRD里显示一个ORACLE的表,然后在A表里输入完的数据后,把A表一部分的字段
值存入B表里!请大家帮帮我,谢谢!
 
看不出有什么困难,用两个Table组件,各联一个ORACLE表,并在AfterInsert事件中给第二
个Table2也加上同Table1当前相同的内容记录,并在Table1的OnPost事件中加上
Table2.Post;就可以了。
 
这也100分?不会吧!
简单的很!用一个Query发一个insert语句就行了!
 
我是个初学者,我有点不懂,能详细说明吗?
 
首先你的表设计的有问题?基础数据不要维护两份。
维护两个表,最好用触发器。

Table1.AfterInsert;
Table2.Append;
Table2.FieldByName('字段一').AsString := Table2.FieldByName('字段一').AsString;
...
Table2.Post;

Table1.AfterPost;
Table2.Edit;
Table2.FieldByName('字段一').AsString := Table2.FieldByName('字段一').AsString;
...
Table2.Post;
 
可能我的意思没有讲明白!我想在一个GIRD里显示A表的A、B、C、D、E、F字段,
然后把A、C、D的字段值存入B表里。D字段的数是人为输入的,A、C字段的值是A表的,
这样怎么做!
 
我用你的方法怎么不好使!能不能再说一下!
 
D字段是不是用户输入的有什么关系,
最终它还是存到了数据库中,
因为 A,C是表A中的原有字段所以A,C的确定表B中的一条记录


Table1.AfterPost;
var
strSql: string;
begin
if table2.Locate('A;C', VarArrayOf([Table1.FieldByName('C').AsString, Table1.FieldByName('C').AsString])) then
begin
strSql := 'update B set D=''' + table1.FieldByName('D').AsString + '''';
strSql := strSql + ' where A=''' + table1.FieldByName('A').AsString + '''';
strSql := strSql + ' and C=''' + table1.FieldByName('C').AsString + '''';
query1.SQL.Clear;
query1.SQL.Add(strSql);
query1.ExceSQL;
{或者
table2.Edit;
table2.FieldByName('D').AsString := Table1.FieldByName('D').AsString;
table2.Post;
}
end
else
begin
table2.Append;
table2.FieldByName('A').AsString := Table1.FieldByName('A').AsString;
table2.FieldByName('C').AsString := Table1.FieldByName('C').AsString;
table2.FieldByName('D').AsString := Table1.FieldByName('D').AsString;
table2.Post;
end;
end;

table1.AfterDelete;
var
strSql: string;
begin
strSql := 'delete from B';
strSql := strSql + ' where A=''' + table1.FieldByName('A').AsString + '''';
strSql := strSql + ' and C=''' + table1.FieldByName('C').AsString + '''';
query1.SQL.Clear;
query1.SQL.Add(strSql);
query1.ExceSQL;
end;
 
用触发器吧。。。
 
多人接受答案了。
 
后退
顶部