ADOQuery疑問 |
答題得分者是:kevin2004
|
lasterliu
一般會員 發表:38 回覆:57 積分:19 註冊:2007-11-05 發送簡訊給我 |
|
ko
資深會員 發表:28 回覆:785 積分:444 註冊:2002-08-14 發送簡訊給我 |
原因不是出在ADOQuery
而是DBEdit or DBGrid 其實知道資料庫是否LOCKED比較重要 可以看 HELP 文件 ===================引 用 lasterliu 文 章=================== 請問各位大大,小弟在設計程式時,碰到一個困擾已久的問題,煩請知道的大大可以教導一下小弟....謝謝。 就是在使用ADOQuery的新增或修改時,以DBEdit or DBGrid來輸入資料,編輯至一半,不知什麼原因有時會出現說資料庫不是在編輯或新增模式。 1、所以想請問大大有沒有方法可以偵測線在資料庫的模式是如何 2、還有另一個問題是如何進入編輯模式呢?(是用ADOQuery.EDIT嗎?)
------
====================== 昏睡~ 不昏睡~ 不由昏睡~ |
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
if AdoQuery1.State <> dsEdit then
AdoQuery.Edit ; 或 if Not (AdoQuery1.State in [dsEdit,dsInsert] )then AdoQuery1.Edit ; ===================引 用 lasterliu 文 章=================== 1、所以想請問大大有沒有方法可以偵測線在資料庫的模式是如何 2、還有另一個問題是如何進入編輯模式呢?(是用ADOQuery.EDIT嗎?)
------
Kevin |
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
我猜你的狀況應該是在MasterDetail的主要明細關係
如果是如此的話,那你可能就錯過了一個很重要的觀念沒有先弄通。你 才會『..困擾已久...』,這觀念沒先建好,你將來還是有苦頭吃的。 先確定你是否是在MD環境?再談。 ===================引 用 lasterliu 文 章=================== ...碰到一個困擾已久的問題.... 就是在使用ADOQuery的新增或修改時,以DBEdit or DBGrid來輸入資料,編輯至 一半,不知什麼原因有時會出現說資料庫不是在編輯或新增模式。
------
Kevin |
lasterliu
一般會員 發表:38 回覆:57 積分:19 註冊:2007-11-05 發送簡訊給我 |
|
ko
資深會員 發表:28 回覆:785 積分:444 註冊:2002-08-14 發送簡訊給我 |
不懂~
>>ADOQuery2的DataSource為DataSource1,與ADOQuery作關聯 這是啥咪意思!?!? ===================引 用 lasterliu 文 章=================== 謝謝Kevin與ko的說明,非常感激。 小弟不知道這是不是MasterDetail,小弟的程式有兩個ADOQuery兩個DataSource兩個DBGrid,ADOQuery2的DataSource為DataSource1,與ADOQuery作關聯, 但在新增修改ADOQuery2的資料時就常會出現此種情況,不知可不可以煩請Kevin大大能把您說的MasterDetail的主要明細關係觀念跟小弟大概說一下, 讓小弟有個方向,謝謝,麻煩您了~~
------
====================== 昏睡~ 不昏睡~ 不由昏睡~ |
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
小弟的程式有兩個ADOQuery兩個DataSource兩個DBGrid,ADOQuery2的DataSource
為DataSource1,與ADOQuery作關聯,但在新增修改ADOQuery2的資料時就常會出 現此種情況... ====>最近新案子主力都移到Java及.NET去了,好久沒寫Delphi新案子了。最多 ====> 只是維護舊的DelphiAP,初看你寫的這段,我也要翻翻書確認一下。 ====>沒錯,這就是標準的MasterDetail,也就是大家常講的一對多,或主從關 ====> 係。 ====>這在商業應用AP中是很常見的,如課室與課員、發票與明細、如業務員與 ====> 客戶。無處無之。 兩個DBGrid,ADOQuery2的DataSource為DataSource1,與ADOQuery作關聯,但在新 增修改ADOQuery2的資料時就常會出現此種情況 ====>這是你不知道當Delphi遇到這些問題時是如何作處理所致 ====>而且你的架構基本上是有問題的,後患將會源源不絕的,你可以考慮修改 ====> 一下。 ====>由於MD實在太重要了,我建議你仔細花點功夫研究一下。 ====>以往在深度論壇時,我們對這個相關問題討論了很多很多,你應該去看看 ====>李維在Delphi4/5時寫了好幾本書,有詳細講到Delphi對MD是如何設計的 ====> 你該找來看看。 ====>由於Delphi實在是設計的太好太體貼了,當然這是較卓越的DeskTop軟體 ====> 的通病。這在前幾年公司轉型到Java時,我們這些老傢伙在用JDBC ====> 作原始的一再重覆的資料處理差點要發瘋時,才知道原先Delphi把我 ====> 慣壞到如何的程度。才萬分懷念以往用Delphi的快樂日子有多消遙自 ====> 在。當然,也必需加一句,Java一日千里,今日用Java快活的多了。
------
Kevin
編輯記錄
kevin2004 重新編輯於 2008-08-17 12:53:37, 註解 無‧
|
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
前些時候,在站了看了好幾篇文章,都不約而同的看到這些句子『...不知為何...
這種情況就會不定時出現...』。小弟看了,好想大喊一聲:『就是MD...』。 可是往往我看到這些題目時,這些題目都已被結案了。原提問者可能都不會再 再回來看這些題目了。不像古早時,通常一個題目會累積到三十或五十個討論 帖子。提問人會問到他絕對滿意才會停下來。那像現在,一個題目能有個三五 個帖子就好好了。 當然,現在人往往都有速食的惡習,再加上草莓的性情,及不肯誠肯苦學的態度, 碰到愛罵人出名的KTop,往往...
------
Kevin |
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
言歸正傳。
以往在Delphi2/3時,我們常會手動作MD關聯。所以這些問題,我們非常清楚,從 來不會碰到類似的情況。後來到Delphi5以後,Delphi處理的很好了,我們就 很少管這些東西了。如果又沒人告訴你『Delphi是如何作你的MD』時,那你就 很可能會出問題。這些你可以看李維的書,要不站裏以往討論個的文章也是很 多。 你是兩個DBGrid,一個是MDBGrid,一個是DDBGrid。當你在作DDBGrid作新增時,如 果你又點改到了MDBGrid的另一筆記錄時,Delphi會從新載入另一筆Master﹝即 主要記錄﹞記錄的相關Detail記錄﹝請參見你的DDBGrid﹞。這時你的 DetailAdoQuery的State就會由dsEdit或dsInsert自動改為dsBrowse,就會造成 你講的情況。即如果你的MasterAdoQuery只要移位,你的DetailAdoQuery正新 增的資料就會丟掉﹝假設你沒有用可自動處理這個問題的ClientDataSet﹞,或 你的DetailAdoQuery.State就會改變。這就是原因了。 改善之道,可以改用dbX/clientdataset。不過這個可能工程太大。 較好的還是就你原先架構改良。如Detail的新增是單筆單筆下令後新增;異動 Detail某筆時,一定將Master鎖住、或鎖住某Master後,對此Master的Detail 作批次異動多筆新增修改,此時因Master沒移動所以不怕丟了Detail... 如果客戶堅持要以DBGridBatchUpdate方式作Detail多筆異動,甚至要涉及三層或四 層甚或五層的MD作DBGrid異動時,你就要更小心了。這時程式的規模可能就會 從一兩千行,漲到一兩萬行一個Form的規模了。那時就要很小心及虔誠祈禱。
------
Kevin |
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
|
lasterliu
一般會員 發表:38 回覆:57 積分:19 註冊:2007-11-05 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |