Query & ADOQuery之效能比較 |
尚未結案
|
Paicaso
中階會員 發表:140 回覆:124 積分:52 註冊:2002-09-04 發送簡訊給我 |
請問DataBase & Query需先有BDE or ODBC,
ADOConnection & ADOQuery是否通常為指定資料庫位置
其效能是否有何者較佳?
因我的資料庫位置可依使用者需要而改變與有一資料庫為FoxPro,所以用ODBC
來做,不過感覺效能不彰,是否與ODBC有關
印象中據Microsoft的說法,ADO比ODBC好,但因上數之需求(資料庫位置可依使用者需要而改變與有一資料庫為FoxPro),是否可以改用ADOConnection且其資料庫來源位置仍是ODBC之資料
|
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
引言: 請問DataBase & Query需先有BDE or ODBC, ADOConnection & ADOQuery是否通常為指定資料庫位置 其效能是否有何者較佳? 因我的資料庫位置可依使用者需要而改變與有一資料庫為FoxPro,所以用ODBC 來做,不過感覺效能不彰,是否與ODBC有關 印象中據Microsoft的說法,ADO比ODBC好,但因上數之需求(資料庫位置可依使用者需要而改變與有一資料庫為FoxPro),是否可以改用ADOConnection且其資料庫來源位置仍是ODBC之資料1.無論是BDE或是ADO都可以動態指定您Foxpro DBF檔的所在位置啊! 2..DBF或.DB的資料檔案,最好用Native方式效率會比較好, 而且盡量不要用TQuery,盡量用TTable Index的方式,速度差粉多喔! ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~ |
Paicaso
中階會員 發表:140 回覆:124 積分:52 註冊:2002-09-04 發送簡訊給我 |
我的語法大致如下
A-1(FoxPro)--匯入-->A-2(Access)
B-1(FoxPro)--匯入-->B-2(Access)
PS 分別使用Database & Query by ODBC
資料量如果一大,在同一資料下有時沒問題,有時執行到某一程度(通常超過50%到80%)就停住了,原本想是否這些資料有問題,但發生問題之資料筆卻又不一定,也試過將疑似有問題之記錄刪除亦無效,是否是因為使用Query支緣故?
還是我的語法造成的結果?
procedure TFMTransPOS.FormCreate(Sender: TObject); BEGIN TabSheet1.Show; //********資料A-1(FoxPro)******** TransData.LYTsstockQUERY.SQL.Clear; TransData.LYTsstockQUERY.SQL.Add('Select * From sstock '); TransData.LYTsstockQUERY.SQL.Add('Order by sk_no'); TransData.LYTsstockQUERY.CLOSE; TransData.LYTsstockQUERY.OPEN; TransData.tcomQUERY.SQL.Clear; TransData.tcomQUERY.SQL.Add('SELECT Count(*) FROM sstock '); TransData.tcomQUERY.CLOSE; TransData.tcomQUERY.OPEN; Panel_P1.Caption := '資料筆數:共 ' IntToStr(TransData.tcomQuery.Fields[0].AsInteger) ' 筆'; //********資料A-2(Access)******** DBGrid2.DataSource := TransData.BprdDataSource; TransData.BprdQUERY.SQL.Clear; TransData.BprdQUERY.SQL.Add('SELECT * FROM BPRD '); TransData.BprdQUERY.SQL.Add('Order by sk_no '); TransData.BprdQUERY.CLOSE; TransData.BprdQUERY.OPEN; TransData.QUERYS.SQL.Clear; TransData.QUERYS.SQL.Add('SELECT Count(*) FROM Bprd '); TransData.QUERYS.CLOSE; TransData.QUERYS.OPEN; Panel_P2.Caption := '資料筆數:共 ' IntToStr(TransData.QueryS.Fields[0].AsInteger) ' 筆'; //********資料B-1(FoxPro)******** DBGrid3.DataSource := TransData.LYTpcustDataSource; //FoxPro TransData.LYTpcustQUERY.SQL.Clear; TransData.LYTpcustQUERY.SQL.Add('Select * From pcust '); TransData.LYTpcustQUERY.SQL.Add('where ct_class=''1'' '); TransData.LYTpcustQUERY.SQL.Add('Order by ct_no'); TransData.LYTpcustQUERY.CLOSE; TransData.LYTpcustQUERY.OPEN; TransData.cenoQUERY.SQL.Clear; TransData.cenoQUERY.SQL.Add('SELECT Count(*) FROM pcust '); TransData.cenoQUERY.SQL.Add('where ct_class=''1'' '); TransData.cenoQUERY.CLOSE; TransData.cenoQUERY.OPEN; Panel_C1.Caption := '資料筆數:共 ' IntToStr(TransData.cenoQuery.Fields[0].AsInteger) ' 筆'; //********資料B-2(前台Access)******** DBGrid4.DataSource := TransData.BcustDataSource; //後台Access TransData.BcustQUERY.SQL.Clear; TransData.BcustQUERY.SQL.Add('SELECT * FROM Bcust '); TransData.BcustQUERY.SQL.Add('Order by ct_no '); TransData.BcustQUERY.CLOSE; TransData.BcustQUERY.OPEN; TransData.QUERYS.SQL.Clear; TransData.QUERYS.SQL.Add('SELECT Count(*) FROM Bcust '); TransData.QUERYS.CLOSE; TransData.QUERYS.OPEN; Panel_C2.Caption := '資料筆數:共 ' IntToStr(TransData.QueryS.Fields[0].AsInteger) ' 筆'; End; procedure TFMTransPOS.TransAllDATClick(Sender: TObject); var L_SKENO,.........以下略過 i: Integer; GFORM : TFORM; //(進度表)需在users有 FORMS, Gauges GGAUGE : TGAUGE; //(進度表)需在users有 FORMS, Gauges GLabel : TLabel; begin Try TransData.LYTsstockQuery.First; //FoxPro While not TransData.LYTsstockQuery.Eof do //FoxPro Begin //======FoxPro====== L_SKENO := Trim(TransData.LYTsstockQUERY.FieldByName('sk_no').AsString); .....略..... //開啟第二連結檔 TransData.LYTsstkdtQUERY.SQL.Clear; TransData.LYTsstkdtQUERY.SQL.Add('SELECT * FROM SSTKDT '); TransData.LYTsstkdtQUERY.SQL.Add('WHERE sk_no = ''' L_SKENO ''' '); TransData.LYTsstkdtQUERY.SQL.Add('order by sk_no '); TransData.LYTsstkdtQUERY.CLOSE; TransData.LYTsstkdtQUERY.OPEN; L_SKSUP := TransData.LYTsstkdtQUERY.FieldByName('s_supp').AsString; .....略..... //開啟第三連結檔 .....略..... //開啟資料庫(Access) TransData.BprdQUERY.SQL.Clear; TransData.BprdQUERY.SQL.Add('SELECT * FROM BPRD '); TransData.BprdQUERY.SQL.Add('WHERE sk_no = ''' L_SKENO ''' '); TransData.BprdQUERY.SQL.Add('Order by sk_no '); TransData.BprdQUERY.CLOSE; TransData.BprdQUERY.OPEN; If TransData.BprdQuery.Eof = False then //---------------------------------------- Begin Update_to_Bprd_ALL(L_SKENO, .....略..... ); End Else Begin //if BprdQuery.Eof Insert_to_Bprd(L_SKENO, .....略..... ); END; //else (BprdQuery.Eof)------------------------------------------------------- TransData.LYTsstockQuery.Next; //While not ** do //FoxPro END; //While TransData.BprdQUERY.SQL.Clear; TransData.BprdQUERY.SQL.Add('SELECT * FROM BPRD '); TransData.BprdQUERY.SQL.Add('Order by sk_no '); TransData.BprdQuery.Close; TransData.BprdQuery.Open; Finally TransData.QUERYS.SQL.Clear; TransData.QUERYS.SQL.Add('SELECT Count(*) FROM Bprd '); TransData.QUERYS.CLOSE; TransData.QUERYS.OPEN; end; //end try end; //-------------------------------------------------------------------------- procedure TFMTransPOS.TransAllCustClick(Sender: TObject); var L_ctno,L_ctname, .....略..... Begin Try TransData.LYTpcustQuery.First; //FoxPro While not TransData.LYTpcustQuery.Eof do //FoxPro Begin //======FoxPro====== L_ctno := Trim(TransData.LYTpcustQUERY.FieldByName('ct_no').AsString); .....略..... //開啟第二連結檔 .....略..... //開啟資料庫(Access) TransData.BcustQUERY.SQL.Clear; TransData.BcustQUERY.SQL.Add('SELECT * FROM Bcust '); TransData.BcustQUERY.SQL.Add('WHERE ct_no = ''' L_ctno ''' '); TransData.BcustQUERY.SQL.Add('Order by ct_no '); TransData.BcustQUERY.CLOSE; TransData.BcustQUERY.OPEN; If TransData.BcustQuery.Eof = False then Begin Update_to_BMEM(L_ctno, .....略.....); End else begin //If Insert_to_BMEM(L_ctno, .....略.....); END; //else TransData.LYTpcustQuery.Next; //While not ** do //FoxPro END; //While TransData.BcustQUERY.SQL.Clear; TransData.BcustQUERY.SQL.Add('SELECT * FROM Bcust '); TransData.BcustQUERY.SQL.Add('Order by ct_no '); TransData.BcustQuery.Close; TransData.BcustQuery.Open; Finally TransData.QUERYS.SQL.Clear; TransData.QUERYS.SQL.Add('SELECT Count(*) FROM Bcust '); TransData.QUERYS.CLOSE; TransData.QUERYS.OPEN; end; //end try end; //----------------------------------------------------------------------------------- /Inset 新增資料之副程式 Procedure TFMTransPOS.Insert_to_BMEM(L_ctno, .....略.....); var SQL : String; Begin TransData.QueryP.SQL.Clear; SQL := 'INSERT INTO BCUST '; SQL := SQL '( ct_no , .....略..... )'; SQL := SQL ' Values '; SQL := SQL '( :ct_no ,:ct_name , .....略..... )'; TransData.QueryP.SQL.Text := SQL; TransData.QueryP.ParamByName('ct_no').AsString := L_ctno; .....略..... try TransData.QueryP.ExecSQL; except ShowMessage('轉入失敗!'); end; END; //Update 更新資料之副程式 Procedure TFMTransPOS.Update_to_BMEM(L_ctno, .....略.....); var SQL : String; Begin TransData.QueryP.SQL.Clear; SQL := 'Update BCUST SET '; SQL := SQL ' ct_name =:ct_name , .....略..... '; SQL := SQL 'Where ct_no = ''' L_ctno ''' '; TransData.QueryP.SQL.Text := SQL; TransData.QueryP.ParamByName('ct_name').AsString := L_ctname; .....略..... try TransData.QueryP.ExecSQL; except ShowMessage('轉入失敗!'); end; END; |
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
|
Paicaso
中階會員 發表:140 回覆:124 積分:52 註冊:2002-09-04 發送簡訊給我 |
|
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
|
Paicaso
中階會員 發表:140 回覆:124 積分:52 註冊:2002-09-04 發送簡訊給我 |
|
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |