用ado非同步存取資料會產生錯誤?Why ?(來源是:李維大師:著作 |
缺席
|
ry_lee
高階會員 ![]() ![]() ![]() ![]() 發表:368 回覆:251 積分:123 註冊:2002-03-19 發送簡訊給我 |
用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.
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |