全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1564
推到 Plurk!
推到 Facebook!

Ado的困惑,急....

尚未結案
比爾丐自
初階會員


發表:33
回覆:115
積分:29
註冊:2003-02-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-02-28 14:10:47 IP:218.18.xxx.xxx 未訂閱
我以前一直用BDE,可看了李維 的 實戰 Delphi 5.x ADO/MTS/COM 專業程式設計篇,有多麼好,我現用它時確發現了不少問題,現很難解決,真的Ado比Bde好嗎?BDE中的數據控件Tquery能查詢多個連接表而隻新增或修改其中的一個表, 可用TupdateSQL對應,但在ADO中確沒有這樣的對應物件嗎?因為我也用幾個連接查詢表, 可用TADODdataSet或TadoQuery但隻想編輯其中的一個表,但ADO引擎自動將所有連接的相應欄位修改了, 我是不是用的方法不對或要在什麼地方寫程序進行控制.當然不能用LookUp或計算字段,很慢。當然我已在前面提過這樣的問題,當然現我用主從結構,不能用分層架構的DataSetProvider1等控件去解決?誰知道?
alice100001
一般會員


發表:21
回覆:49
積分:19
註冊:2002-09-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-02-28 20:02:53 IP:203.204.xxx.xxx 未訂閱
你好,我是用子查詢寫的,我是用以下的方法寫的(以你上次的例子) select 工號,工資,(SELECT 姓名 FROM A WHERE B.工號 = A.工號) AS Name,(SELECT 性別 FROM A WHERE B.工號 = A.工號) AS Sex FROM B 不知道其他的先進是怎麼寫的呢?
比爾丐自
初階會員


發表:33
回覆:115
積分:29
註冊:2003-02-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-03-01 11:34:18 IP:218.17.xxx.xxx 未訂閱
引言: 你好,我是用子查詢寫的,我是用以下的方法寫的(以你上次的例子) select 工號,工資,(SELECT 姓名 FROM A WHERE B.工號 = A.工號) AS Name,(SELECT 性別 FROM A WHERE B.工號 = A.工號) AS Sex FROM B 不知道其他的先進是怎麼寫的呢?
謝謝!不過速度還是很慢,跟用計算或LOOKUP差不多,誰還有更先進的方法?
alice100001
一般會員


發表:21
回覆:49
積分:19
註冊:2002-09-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-03-01 11:53:26 IP:203.204.xxx.xxx 未訂閱
你好: 你用子查詢測真的會很慢嗎?我用這個方法寫,在速度方面好像不會影響很大,不過可能是資料量不大的關係。可是我也有點擔心這個問題,所以請問一下你測試的環境是怎樣的?資料量有多大呢?
alice100001
一般會員


發表:21
回覆:49
積分:19
註冊:2002-09-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-03-01 11:54:53 IP:203.204.xxx.xxx 未訂閱
你好: 你用子查詢測真的會很慢嗎?我用這個方法寫,在速度方面好像不會影響很大,不過可能是資料量不大的關係。可是我也有點擔心這個問題,所以請問一下你測試的環境是怎樣的?資料量有多大呢?
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-03-01 12:05:05 IP:61.218.xxx.xxx 未訂閱
用關連查詢試試 select a.工號,a.工資, b.姓名 AS 員工姓名 FROM a LEFT JOIN b ON a.工號 = b.工號;
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-03-01 12:35:34 IP:61.218.xxx.xxx 未訂閱
如果是要有LookUp的效果 我的作法是TADODdataSet或TadoQuery或TadoTable中新增一個欄位 FiekdKind:=fkLookup LookupDataSet:=設另一Table如A 再設定keyFields:=工號,LookupkeyFields:=工號,LookUpResultField:=姓名
比爾丐自
初階會員


發表:33
回覆:115
積分:29
註冊:2003-02-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-03-01 13:07:09 IP:218.17.xxx.xxx 未訂閱
引言: 如果是要有LookUp的效果 我的作法是TADODdataSet或TadoQuery或TadoTable中新增一個欄位 FiekdKind:=fkLookup LookupDataSet:=設另一Table如A 再設定keyFields:=工號,LookupkeyFields:=工號,LookUpResultField:=姓名
不能用LookUp,如果一個表有很多這樣的不同表都是這樣的話,速度很慢.
比爾丐自
初階會員


發表:33
回覆:115
積分:29
註冊:2003-02-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-03-01 13:12:56 IP:218.17.xxx.xxx 未訂閱
引言: 你好: 你用子查詢測真的會很慢嗎?我用這個方法寫,在速度方面好像不會影響很大,不過可能是資料量不大的關係。可是我也有點擔心這個問題,所以請問一下你測試的環境是怎樣的?資料量有多大呢?
如果你用數据控件的話,不能用此方法,我只有几條記錄,不過我在此表中不光是關連一個表,有几個表且本身又有計算字段,這樣速度很慢,如果取消這此連接的表速度很快,所以你如果這樣處理的話,与多個有關表相連就完了,且你如果記錄更多的話,簡直不可思議.
Jeffrey
初階會員


發表:10
回覆:58
積分:38
註冊:2002-04-15

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-03-02 23:06:44 IP:61.225.xxx.xxx 未訂閱
先將A(只需部份資料的Table)作範圍子查詢,例: A.工號從A001~A999    
Select B.工號, B.工資, A.姓名, A.性別
  From B as B Left Join
      (Select 工號, 姓名, 性別
         From A
         Where 工號 Between 'A001' and 'A999') as A on A.工號=B.工號    
比爾丐自
初階會員


發表:33
回覆:115
積分:29
註冊:2003-02-14

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-03-03 20:35:55 IP:61.142.xxx.xxx 未訂閱
引言: 先將A(只需部份資料的Table)作範圍子查詢,例: A.工號從A001~A999
Select B.工號, B.工資, A.姓名, A.性別
  From B as B Left Join
      (Select 工號, 姓名, 性別
         From A
         Where 工號 Between 'A001' and 'A999') as A on A.工號=B.工號    
謝謝,不過你沒看明白我的題意,不能用聯連查詢,因這樣的話一樣在新增,編輯,刪除時都會要把這兩個連接表都提交了,你可試試,用ADO做,可能要另外再處理,現這個問題已害死我了,我在寫一個系統,遇到此問題真不知如何處理,好像要返回再用BDE寫.你們沒遇到此問題嗎? 發表人 - 比爾丐自 於 2003/03/03 20:37:06
alice100001
一般會員


發表:21
回覆:49
積分:19
註冊:2002-09-14

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-03-03 21:04:49 IP:203.204.xxx.xxx 未訂閱
你好: 我查了資料,若clientdataset的提供者在遠端的應用程式伺服器上時,除了要設providername屬性之外,還要設remoteserver,connectionbroker屬性,但請問,一般的主從式,不是只要把odbc設在“系統資料來源名稱”就可以連接了嗎?請問為何不能使用clientdataset呢?
比爾丐自
初階會員


發表:33
回覆:115
積分:29
註冊:2003-02-14

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-03-10 20:13:59 IP:61.145.xxx.xxx 未訂閱
引言: 你好: 我查了資料,若clientdataset的提供者在遠端的應用程式伺服器上時,除了要設providername屬性之外,還要設remoteserver,connectionbroker屬性,但請問,一般的主從式,不是只要把odbc設在“系統資料來源名稱”就可以連接了嗎?請問為何不能使用clientdataset呢?
因為我查了資料﹐用clientdataset﹐必須要有應用服務器﹐最少是三層架構﹐現我還不是很懂﹐不能一下將我的程序改為此架構.你認為能將主從很簡單的改為此結構嗎﹖
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-03-14 23:53:29 IP:203.203.xxx.xxx 未訂閱
引言: 因為我查了資料﹐用clientdataset﹐必須要有應用服務器﹐最少是三層架構﹐現我還不是很懂﹐不能一下將我的程序改為此架構.你認為能將主從很簡單的改為此結構嗎﹖
clientdateset可以不用在三層架構下才能用,您可以試著把它當作一種memory table來看,可以用程式去動態建立欄位結構,將BDE或ADO等來源的資料集內容存入clietdataset. clientdataset的運行是在記憶體中,因此比較能避免cursor以及lock的問題,前題是要規劃的好就是. 若有說得不對還希望高手能大力指正了.
yamapig
一般會員


發表:12
回覆:47
積分:21
註冊:2002-03-26

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-03-16 11:56:10 IP:211.22.xxx.xxx 未訂閱
插花一下,可以請教一下,怎麼把TQuery或TADOQuery 的資料搬給TClientDataSet我試了好久都試不出來,像TClientDataSet.data := TQuery 兩都的型態不合,因為Data為OldVariant,TQuery 怎麼把資料轉成OldVariant 再丟給TClientDatSet,目前做法都是用TOuery逐筆塞給TClientDataSet,但若資 料量很大時會很慢....謝謝! 靜中見真境 淡中識本然
------
靜中見真境 淡中識本然
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#16 引用回覆 回覆 發表時間:2003-03-16 14:43:15 IP:218.160.xxx.xxx 未訂閱
引言: 插花一下,可以請教一下,怎麼把TQuery或TADOQuery 的資料搬給TClientDataSet我試了好久都試不出來,像TClientDataSet.data := TQuery 兩都的型態不合,因為Data為OldVariant,TQuery 怎麼把資料轉成OldVariant 再丟給TClientDatSet,目前做法都是用TOuery逐筆塞給TClientDataSet,但若資 料量很大時會很慢....謝謝! 靜中見真境 淡中識本然
Hello : 拉一顆TDataSetProvider, 將DateSet屬性設到TQuery or TADOQuery, TClientDataSet的ProviderName設到TDataSetProvider, 你可以先在Query中寫好SQL, TClientDataSet.Active 設為True即可 Good Luck 我不是高手, 高手是正在銀幕前微笑的人. 發表人 - miles 於 2003/03/16 14:48:22
------


我不是高手, 高手是正在銀幕前微笑的人.
yamapig
一般會員


發表:12
回覆:47
積分:21
註冊:2002-03-26

發送簡訊給我
#17 引用回覆 回覆 發表時間:2003-03-17 08:49:53 IP:211.22.xxx.xxx 未訂閱
謝謝你,我知道了,只是就沒分數給你了....抱歉! 靜中見真境 淡中識本然
------
靜中見真境 淡中識本然
比爾丐自
初階會員


發表:33
回覆:115
積分:29
註冊:2003-02-14

發送簡訊給我
#18 引用回覆 回覆 發表時間:2003-03-19 10:51:41 IP:218.17.xxx.xxx 未訂閱
引言: 我以前一直用BDE,可看了李維 的 實戰 Delphi 5.x ADO/MTS/COM 專業程式設計篇,有多麼好,我現用它時確發現了不少問題,現很難解決,真的Ado比Bde好嗎?BDE中的數據控件Tquery能查詢多個連接表而隻新增或修改其中的一個表, 可用TupdateSQL對應,但在ADO中確沒有這樣的對應物件嗎?因為我也用幾個連接查詢表, 可用TADODdataSet或TadoQuery但隻想編輯其中的一個表,但ADO引擎自動將所有連接的相應欄位修改了, 我是不是用的方法不對或要在什麼地方寫程序進行控制.當然不能用LookUp或計算字段,很慢。當然我已在前面提過這樣的問題,當然現我用主從結構,不能用分層架構的DataSetProvider1等控件去解決?誰知道?
因我的數據庫設置的是表間基本都有關系﹐上面的問題我無法解決﹐是Ado的問題嗎﹖
richcomp
中階會員


發表:18
回覆:66
積分:51
註冊:2002-10-18

發送簡訊給我
#19 引用回覆 回覆 發表時間:2003-03-21 10:31:46 IP:61.177.xxx.xxx 未訂閱
基本上我都用主從表關聯,加上lookup字段(可以下拉選擇),幾百筆速度很快 delphi5很穩定,但有MDAC新版時會有BOF/EOF錯誤,還好我用ORACLE,delphi6/7好像ADO有問題
比爾丐自
初階會員


發表:33
回覆:115
積分:29
註冊:2003-02-14

發送簡訊給我
#20 引用回覆 回覆 發表時間:2003-03-21 11:46:25 IP:218.18.xxx.xxx 未訂閱
引言: 基本上我都用主從表關聯,加上lookup字段(可以下拉選擇),幾百筆速度很快 delphi5很穩定,但有MDAC新版時會有BOF/EOF錯誤,還好我用ORACLE,delphi6/7好像ADO有問題
那說明是微軟的產品Ado差﹖還是我們真正未找到問題的解決辦法﹖只要是關聯一個字段用lookup還好﹐兩個以上呢﹖用計算方法嗎﹖如果表間關聯超過一個表﹐太慢了。
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#21 引用回覆 回覆 發表時間:2003-03-23 13:47:06 IP:211.23.xxx.xxx 未訂閱
引言: 那說明是微軟的產品Ado差﹖還是我們真正未找到問題的解決辦法﹖只要是關聯一個字段用lookup還好﹐兩個以上呢﹖用計算方法嗎﹖如果表間關聯超過一個表﹐太慢了。
1.lookup速度要快,乾脆系統一啟動的時候就把會被關聯的資料表都載入到記憶體內,或是說在c-s架構下,把他載入到client-side. 2.delphi現有元件提供的做法也是有他的極限,ado也是,其實只要資料量一大的話,所要分析的可能是整體的架構,資料庫的選定,而不單單在delphi,ado這兩個環節鑽牛角尖可以解決的. 您說是嗎? 待高明者續...
比爾丐自
初階會員


發表:33
回覆:115
積分:29
註冊:2003-02-14

發送簡訊給我
#22 引用回覆 回覆 發表時間:2003-03-27 09:09:07 IP:218.17.xxx.xxx 未訂閱
1.lookup速度要快,乾脆系統一啟動的時候就把會被關聯的資料表都載入到記憶體內,或是說在c-s架構下,把他載入到client-side. 2.delphi現有元件提供的做法也是有他的極限,ado也是,其實只要資料量一大的話,所要分析的可能是整體的架構,資料庫的選定,而不單單在delphi,ado這兩個環節鑽牛角尖可以解決的. 您說是嗎? 待高明者續... [/quote] 如果一個表關聯另一個表且需要另一個表兩個以上字段時﹐能用lookup嗎﹖ 例如﹕表A(Proid,Proname,Prospec),表B(Id,Proid,number). 因表B需要A表的Proname,Prospec,這時能用lookup嗎﹖當然更不能用關聯查詢.因ADO對關聯表要做動作.
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#23 引用回覆 回覆 發表時間:2003-03-27 09:23:43 IP:210.243.xxx.xxx 未訂閱
引言: 如果一個表關聯另一個表且需要另一個表兩個以上字段時﹐能用lookup嗎﹖ 例如﹕表A(Proid,Proname,Prospec),表B(Id,Proid,number). 因表B需要A表的Proname,Prospec,這時能用lookup嗎﹖當然更不能用關聯查詢.因ADO對關聯表要做動作.
這位大俠,小弟所說的是若是lookup速度要快, 因為在post中有看到速度的問題,當然要因情況而使用,是否可將您疑惑的部分連同系統的部分流程貼出來,也好幫您一起想想怎麼處理. 速度的問題一直存在,當資料量累積到一定的程度後,速度的問題就跑出來了,小弟建議的是將基本檔在系統啟動的時候就存入client side的hard disk或ram中,應該可以克服一部份速度的問題. best regard 發表人 - hahalin 於 2003/03/27 09:27:19
比爾丐自
初階會員


發表:33
回覆:115
積分:29
註冊:2003-02-14

發送簡訊給我
#24 引用回覆 回覆 發表時間:2003-03-27 09:36:24 IP:218.17.xxx.xxx 未訂閱
[這位大俠,小弟所說的是若是lookup速度要快, 因為在post中有看到速度的問題,當然要因情況而使用,是否可將您疑惑的部分連同系統的部分流程貼出來,也好幫您一起想想怎麼處理. 速度的問題一直存在,當資料量累積到一定的程度後,速度的問題就跑出來了,小弟建議的是將基本檔在系統啟動的時候就存入client side的hard disk或ram中,應該可以克服一部份速度的問題. best regard 謝謝你﹐我的主題是用Ado對關聯表編輯時不能用查詢關聯來做。因它要對另一個關聯表做提交。就象我剛才舉的例子一樣﹐表A(Proid,Proname,Prospec),表B(Id,Proid,number). 現我假如對表B編輯時當然要用表A的兩個字段﹐Proname,Prospec,就只能用計算來解決嗎﹖,我的意思是用計算時速度稍慢。能不用計算嗎﹖但這時用LOOKUP來做對兩個字段就好象不合適。 發表人 - 比爾丐自 於 2003/03/27 09:40:28
Jungle
一般會員


發表:5
回覆:18
積分:9
註冊:2002-03-18

發送簡訊給我
#25 引用回覆 回覆 發表時間:2003-11-27 16:11:45 IP:202.3.xxx.xxx 未訂閱
引言: 可用TADODdataSet或TadoQuery但隻想編輯其中的一個表,但ADO引擎自動將所有連接的相應欄位修改了
請問您這個問題有解決了嗎???
系統時間:2024-07-06 19:12:58
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!