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

用ado非同步存取資料會產生錯誤?Why ?(來源是:李維大師:著作

缺席
ry_lee
高階會員


發表:368
回覆:251
積分:123
註冊:2002-03-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-12-30 02:34:56 IP:61.59.xxx.xxx 未訂閱
用ado非同步存取資料會產生錯誤?Why ?(來源是:李維大師:著作 delphi5.x ADO/MTS/COM 光碟範例程式CH03ADORUNMODE\Padorunmodedemo.dpr) 我的電腦是win2000 pro delphi 6.x delphi 6.x update pack2.(請問delphi 6須安裝adoexpress update pack 嗎 ?我的os之ado似乎是2.5 ver) 1.當我在delphi IDE編譯程式並執行會得到下面之錯誤訊息: padorunmodedemo.exe raised exception class Einvalidoperation with message 'canvas does not allow drawing'. process stopped.Use step or run to continue. 並且游標會停在ADODB.PAS 5125行 如下面 procedure TCustomADODataSet.FetchComplete(const pError: Error; var adStatus: EventStatusEnum; const pRecordset: _Recordset); var EventStatus: TEventStatus; begin if Assigned(OnFetchComplete) then begin EventStatus := TEventStatus(OleEnumToOrd(EventStatusValues, adStatus)); OnFetchComplete(Self, pError, EventStatus); 5125行 =>adStatus := EventStatusValues[EventStatus]; end else adStatus := adStatusUnwantedEvent; end; 2.當離開DELPHI IDE,在檔案總管執行程式時會開啟資料表資料, 但無彈出總共花了多少時間之對話盒,必結束程式時並會產生如 下之錯誤訊息之對話盒:Exception EOSError in module padorunmodedemo.exe at 0000DD36.System Error.Code:1400. 無效的視窗控制碼. 3.我不曉得原程式為何要將ADODataSet1.onFetchProgress事件 之程式碼變成無作用即//ProgressBar1.Position := Progress; 4.我執行程式時,不管是同步或非同步存取資料似乎均會觸發 ADODataSet1.onFetchProgress事件,因為 ProgressBar1.Position一直在變,這點與書上寫的似乎不一樣, 且均不會彈出總共花了多少時間之對話盒. ps:李維大師所著:實戰delphi 4(2) delphi5.x(全部三本) delphi6,我都有買 ps : 以下是程式之原始碼: unit fDemoMain; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, Grids, DBGrids, ExtCtrls, DBCtrls, Db, ADODB, StdCtrls; type TForm1 = class(TForm) ADOConnection1: TADOConnection; ADODataSet1: TADODataSet; DataSource1: TDataSource; DBNavigator1: TDBNavigator; DBGrid1: TDBGrid; ADOCommand1: TADOCommand; ProgressBar1: TProgressBar; Button1: TButton; Button2: TButton; procedure FormActivate(Sender: TObject); procedure ADODataSet1FetchProgress(DataSet: TCustomADODataSet; Progress, MaxProgress: Integer; var EventStatus: TEventStatus); procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure ADODataSet1FetchComplete(DataSet: TCustomADODataSet; const Error: Error; var EventStatus: TEventStatus); private { Private declarations } lStart : Longint; lEnd : Longint; public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.FormActivate(Sender: TObject); var sRecNo : String; begin ProgressBar1.Max := ADOCommand1.Execute.Fields.Item[0].Value; sRecNo := IntToStr(ProgressBar1.Max); Self.Caption := '共有' sRecNo ' 筆資料'; end; procedure TForm1.ADODataSet1FetchProgress(DataSet: TCustomADODataSet; Progress, MaxProgress: Integer; var EventStatus: TEventStatus); begin ProgressBar1.Position := Progress; end; procedure TForm1.Button2Click(Sender: TObject); begin try ADODataSet1.Active := False; ADODataSet1.ExecuteOptions := [eoAsyncFetchNonBlocking]; finally lStart := GetTickCount; ADODataSet1.Active := True; end; end; procedure TForm1.Button1Click(Sender: TObject); begin try ADODataSet1.Active := False; ADODataSet1.ExecuteOptions := [eoAsyncFetch]; finally lStart := GetTickCount; ADODataSet1.Active := True; end; end; procedure TForm1.ADODataSet1FetchComplete(DataSet: TCustomADODataSet; const Error: Error; var EventStatus: TEventStatus); begin lEnd := GetTickCount; ShowMessage('總共花了' FloatToStr((lEnd - lStart) / 1000.0) '秒'); end; end.
系統時間:2024-06-29 17:59:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!