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

自製匯出Excel元件出現問題

答題得分者是:herbert2
frappe
中階會員


發表:88
回覆:114
積分:95
註冊:2008-10-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-11-23 09:19:45 IP:115.80.xxx.xxx 訂閱
我做的原件功能為將DBGrid匯出Excel
但是不知道是不是引用有問題

Compile可以過,但是有Warning
安裝後感覺我的元件會和ADO元件衝突,一旦放ADO元件再放我的元件,我自訂的元件就會消失
若先放我的元件再放ADO元件,則ADO原件會消失?

不知道要如何解決


[code delphi]
unit SeanADOExcel;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB, Grids, DBGrids, Gauges, comobj;

type
TSeanADOExcel = class(TComponent)

private
{ Private declarations }

QQZ: TADOQuery;
GGZ: TDBGrid;
BBZ: TGauge;
AuthorName: String;
procedure SEANEXCEL(QQ:TADOQuery;GG:TDBGrid;BB:TGauge);
function GetADOQuery: TADOQuery;
procedure SetADOQuery(Value: TADOQuery);
function GetDBGrid: TDBGrid;
procedure SetDBGrid(Value: TDBGrid);
function GetGauge: TGauge;
procedure SetGauge(Value: TGauge);
protected
{ Protected declarations }
public
{ Public declarations }
function Execute : boolean;
constructor Create(AOwner : TComponent); override;
published
{ Published declarations }
property ADOQuery: TADOQuery read GetADOQuery write SetADOQuery;
property DBGrid: TDBGrid read GetDBGrid write SetDBGrid;
property Gauge: TGauge read GetGauge write SetGauge;
property Author: String read AuthorName write AuthorName;
property Tag;

end;
procedure Register;
implementation

procedure Register;
begin
RegisterComponents('SeanExport', [TSeanADOExcel]);
end;
function TSeanADOExcel.Execute;
begin
try
SEANEXCEL(QQZ,GGZ,BBZ);
result:=true;
except
result:=false;
end;
end;
procedure TSeanADOExcel.SEANEXCEL(QQ: TADOQuery; GG: TDBGrid; BB: TGauge);
begin

end;
constructor TSeanADOExcel.Create(AOwner : TComponent);
begin
inherited;
end;
function TSeanADOExcel.GetADOQuery: TADOQuery;
begin
Result:=QQZ;
end;
procedure TSeanADOExcel.SetADOQuery(Value: TADOQuery);
begin
QQZ:=Value;
end;
function TSeanADOExcel.GetDBGrid: TDBGrid;
begin
Result:=GGZ;
end;
procedure TSeanADOExcel.SetDBGrid(Value: TDBGrid);
begin
GGZ:=Value;
end;
function TSeanADOExcel.GetGauge: TGauge;
begin
Result:=BBZ;
end;
procedure TSeanADOExcel.SetGauge(Value: TGauge);
begin
BBZ:=Value;
end;
end.

[/code]
herbert2
尊榮會員


發表:58
回覆:640
積分:894
註冊:2004-04-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-11-23 10:32:26 IP:211.72.xxx.xxx 訂閱
您好!
小弟不熟悉 Delphi 語法, 但有用 BCB5 自製類似元件,
感覺您的問題可能出在 Component 的結構上, 因您在 Design Time 便要填相關元件,
則在建構時可能有先後參照順序的問題.

我的做法是:
(1) 繼承 DBGrid 做 MyDBGrid.
(2) 於 Run-Time 之 Load 時 Create PopUp Memu.
(3) User 點出 PopUp Memu 時呼叫內部轉 Excel 檔 Function.
(4) 轉 Excel 檔 Function 用 MyDBGrid->DataSource 找其 Query.

您可將您的 Component 的 Excute 改一下,
將 Query 等 Published Property 換成於 Run-Time 傳給 Excute, 或可避免問題.
frappe
中階會員


發表:88
回覆:114
積分:95
註冊:2008-10-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-11-23 13:09:41 IP:115.83.xxx.xxx 訂閱
感謝herbert2大大

我的問題解決哩,

我把ADOQuery取消,改成用DBGrid.DataSource.Dataset取代就OK哩^^y

雖然不知道ADOQuery為什麼會出錯,匯出Excel原件終於設計出來啦~~~~

最近剛學會寫原件有點寫上癮了XD,想把以前自己做的Procedure和Function都寫成原件XD

我用DBGrid取代ADOQuery有一個好處,就是其他連線方法也可以通用

我本來想寫ADOExcel,BDEEXcel,DBXExcel,這樣全部都通用啦 ^.^
編輯記錄
frappe 重新編輯於 2008-11-23 13:14:19, 註解 無‧
系統時間:2024-03-28 22:37:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!