用query 組件維護一對多關系(150分)

  • 主题发起人 主题发起人 小阿文
  • 开始时间 开始时间

小阿文

Unregistered / Unconfirmed
GUEST, unregistred user!
我是新手,現請教各位大俠:
1.在c/s系統中維護一對多關系,主表 (in_hd) /明細表 (in_de),
暫用 paradox表,關鍵字段 in_no 中間有 Referential Integrity 屬性.
2.用兩個 query 維護,兩個表的databasename 皆為database控件的databasename
主表的 query 的sql語句:select * from in_hd
requestlive=true
顯示控件為dbedit ;

明細表的 query 的sql語句:select * from in_de where in_no=:in_no
datasource=ds_in_hd
即用 datasource歸屬性給參數賦值
requestlive=true
顯示控件為dbgrid ;
現在數據顯示沒有問題,說明連接正確
如何新增修改?
新增按紐的click事件:
begin
...
qy_in_hd.append //新增主表
...
end;
明細表是在 DBGrid1EditButtonClick中 append 然后當記錄指動移動時自動 post

存盤按紐click事件:
begin
try
if not Database.InTransaction Then Database.StartTransaction;
qy_in_hd.ApplyUpdates;
qy_in_hd.CommitUpdates;
QY_in_de.FieldByName('In_no').AsString:=dbedit1.text;
Qy_in_de.ApplyUpdates;
Qy_in_de.CommitUpdates;
except
Application.MessageBox('save failue','out order',mb_ok+mb_iconQuestion);
Qy_in_de.CancelUpdates;
qy_in_hd.CancelUpdates;
Database.Rollback;
end;
if Database.InTransaction then
Database.Commit;
end;
現間題如下:明細表不可存盤,正常的流程是怎樣的?
 
小阿文:
你好!
我是第一次到这里来。你说的问题的大意我大致了解了。我只能给你提个建议。
若不可取,另外还会有人为你解答的。
对于这样的问题有两种方法:第一种是通过写触发器程序可以很好解决;
第二种方法比较笨拙,就是针对每个dbgrid控件都加一个dbnavigator控件分别
对主表和从表进入录入操作。

 
第二種方法實現倒是沒問題只是從方便的角度來說不好
小林子有沒有看金蝶財務軟件的方式?我覺得她做得很好.
第一種方法 用paradox表不知如何寫解發器程序,我現在寫一個簡單的 進銷存系統
正在攻關,等好了后我會用 Sql server 作后台試一試
請問小林子你寫數據庫程序都是用系統提供的控件(如dbnavigator) 嗎?大多按紐
事件是自已寫,因為我愛 vfp寫 f/s系統的影響較大.
如dbnavigator控件:中間的增加按妞,如何先的先執行本身代碼再執行自已寫的代碼
如 dbedit1.setfocus 等.
請多指教,小阿文這廂有祀了
 
各位大俠:
為什么這個問題沒人回答?是過于簡單還是分太少?
我找到答案:
利用 query 更新數據的條件:
1.RequestLive=true;
2.bde要返回活動的數據,相應的sql語句要潢足只能涉及一個單獨的表(要受到
數據庫的約束)
至于如何實現我以上的功能,我正在研究,如有高手請賜教
感謝小林子的解答.

 
過了幾天,我刪了那幾個表,重建這些表,卻沒事,是paradox表本身的問題.
那些日子很忙,沒有更正,2001/02/23補記.
 
后退
顶部