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

開窗查詢資料引用在 DBGrid1 ButtonStyle cbsEllipsis 結果出現問題

答題得分者是:P.D.
K1086
初階會員


發表:63
回覆:148
積分:42
註冊:2007-04-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-01-20 15:51:44 IP:114.41.xxx.xxx 訂閱

[code delphi]
unit GetData;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, StdCtrls, DBCtrls, ExtCtrls, DB, DBTables;

type
TFrmGetData = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
DBNavigator1: TDBNavigator;
CmdOK: TButton;
CmdCancel: TButton;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
procedure FormActivate(Sender: TObject);
procedure CmdOKClick(Sender: TObject);
procedure CmdCancelClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
DS:TDatasource;
public
{ Public declarations }
Property MyDatasource:TDatasource read DS Write DS;
function show:Boolean;
function GetValue(FName:string):Variant;
procedure init;
end;

var
FrmGetData:TFrmGetData;
OKorNot:Boolean;

implementation
{$R *.dfm}
procedure TFrmGetData.FormActivate(Sender: TObject);
begin
DBGrid1.DataSource:=MyDatasource;
DBNavigator1.DataSource:=MyDatasource;
end;

procedure TFrmGetData.CmdOKClick(Sender: TObject);
begin
OKorNot:=True;
Close;
end;

procedure TFrmGetData.CmdCancelClick(Sender: TObject);
begin
OKorNot:=False;
Close;
end;
function TFrmGetData.show:Boolean;
begin
ShowModal;
Result:=OKorNot;
end;
function TFrmGetData.GetValue(FName:string):Variant;
Var i:integer;
begin
with MyDatasource.DataSet do
begin
for i := 0 to FieldCount - 1 do
if UpperCase(Fields[i].FieldName) =UpperCase(FName)
then
Result:= Fields[i].Value;
end;
end;
procedure TFrmGetData.init;
begin
Application.CreateForm(TFrmGetData,FrmGetData);
end;
procedure TFrmGetData.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;
end;

end.


procedure TUP_KeepSaleFm1.DBGrid1EditButtonClick(Sender: TObject);
begin
if LowerCase(DBGrid1.SelectedField.FieldName)= '果名'Then
begin
FrmGetData.init;
FrmGetData.MyDatasource:=DM.DSItems;
if FrmGetData.Show then
begin
DM.TBOrdersItem.Edit;
DM.TBOrdersItem.FieldByName('果名').Value:=FrmGetData.GetValue('果名');

end;
end;
end;

=====>>上列程式是小弟跟書本學習 [開窗查詢擷取資料]程式設計

然後引用到另一個Form 的 DBGrid1 ButtonStyle cbsEllipsis 結果出現問題
※ [Error] UP_KeepSalef_01.pas(535): Undeclared identifier: 'DM'

private
{ Private declarations }
Dm:TDatasource;


宣告後不再出現 [Error] 但卻 DSItems 沒有定義


小弟因是初學不瞭解也不知這個問題如何處理,請教個位大大指導 謝謝!
[/code]

編輯記錄
K1086 重新編輯於 2011-01-20 18:26:19, 註解 無‧
老大仔
尊榮會員


發表:78
回覆:837
積分:1088
註冊:2006-07-06

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-01-21 10:08:14 IP:59.120.xxx.xxx 未訂閱
"DM"是在UP_KeepSalef_01.pas中
那請先看書本中的"DM"什麼東西
應該是沒定義/宣告又或者可能是你在打的時候打錯了...XD
K1086
初階會員


發表:63
回覆:148
積分:42
註冊:2007-04-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-01-22 12:33:21 IP:114.41.xxx.xxx 訂閱

===================引 用 老大仔 文 章===================
"DM"是在UP_KeepSalef_01.pas中
那請先看書本中的"DM"什麼東西
應該是沒定義/宣告又或者可能是你在打的時候打錯了...XD

===>>小弟確定沒打錯 關於 DM應該是 DataSource 的公用變數定義 所以我在共域變數區定義之後就沒出現錯誤
可是 DSItems 就說沒有效用的定義 是否DM.DSItems 這語法不適用 或是 .DSItems 有其他代用的名稱?
請教老大仔 如何解決謝謝!
mephise
高階會員


發表:4
回覆:149
積分:205
註冊:2004-02-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2011-01-23 18:36:09 IP:59.115.xxx.xxx 訂閱
DM 有點像是 DataModule
您程式中是不是有用到 DataModule 呢?


===================引 用 K1086 文 章===================

===================引 用 老大仔 文 章===================
"DM"是在UP_KeepSalef_01.pas中
那請先看書本中的"DM"什麼東西
應該是沒定義/宣告又或者可能是你在打的時候打錯了...XD

===>>小弟確定沒打錯 關於 DM應該是 DataSource 的公用變數定義 所以我在共域變數區定義之後就沒出現錯誤
可是 DSItems 就說沒有效用的定義 是否DM.DSItems 這語法不適用 或是 .DSItems 有其他代用的名稱?
請教老大仔 如何解決謝謝!
------
Mephise Chen
前興德工程師
老大仔
尊榮會員


發表:78
回覆:837
積分:1088
註冊:2006-07-06

發送簡訊給我
#5 引用回覆 回覆 發表時間:2011-01-24 09:05:07 IP:59.120.xxx.xxx 未訂閱
看不太懂你的意思...
你的意思是DM=datasource???
datasource是元件耶
它哪來的公用變數= =???
我怎麼看都不像啊...
會不會是DataModule??


===================引 用 K1086 文 章===================

===================引 用 老大仔 文 章===================
"DM"是在UP_KeepSalef_01.pas中
那請先看書本中的"DM"什麼東西
應該是沒定義/宣告又或者可能是你在打的時候打錯了...XD

===>>小弟確定沒打錯 關於 DM應該是 DataSource 的公用變數定義 所以我在共域變數區定義之後就沒出現錯誤
可是 DSItems 就說沒有效用的定義 是否DM.DSItems 這語法不適用 或是 .DSItems 有其他代用的名稱?
請教老大仔 如何解決謝謝!
老大仔
尊榮會員


發表:78
回覆:837
積分:1088
註冊:2006-07-06

發送簡訊給我
#6 引用回覆 回覆 發表時間:2011-01-24 09:06:58 IP:59.120.xxx.xxx 未訂閱
+ 1
也可能是在UP_KeepSalef_01.pas有用到DM,但是可能沒use到???

===================引 用 mephise 文 章===================
DM 有點像是 DataModule
您程式中是不是有用到 DataModule 呢?


===================引 用 K1086 文 章===================

===================引 用 老大仔 文 章===================
"DM"是在UP_KeepSalef_01.pas中
那請先看書本中的"DM"什麼東西
應該是沒定義/宣告又或者可能是你在打的時候打錯了...XD

===>>小弟確定沒打錯 關於 DM應該是 DataSource 的公用變數定義 所以我在共域變數區定義之後就沒出現錯誤
可是 DSItems 就說沒有效用的定義 是否DM.DSItems 這語法不適用 或是 .DSItems 有其他代用的名稱?
請教老大仔 如何解決謝謝!
K1086
初階會員


發表:63
回覆:148
積分:42
註冊:2007-04-09

發送簡訊給我
#7 引用回覆 回覆 發表時間:2011-01-26 19:27:42 IP:114.38.xxx.xxx 訂閱

===================引 用 老大仔 文 章===================
看不太懂你的意思...
你的意思是DM=datasource???
datasource是元件耶
它哪來的公用變數= =???
我怎麼看都不像啊...
會不會是DataModule??

====>>謝謝老大仔的回覆 關於小弟說的 DM 變數是指 DataModule 那個Form 有 DM=datasource 的意思
但我把DataModule 關連的 Table 取代為Table1.DSItems 再編譯 就沒出現 DM 錯誤訊息
反而出現DSItems 是沒有效用的定義,因此小弟才會覺得很迷糊 請教老大仔要如何解決 謝謝!

===================引 用 K1086 文 章===================

===================引 用 老大仔 文 章===================
"DM"是在UP_KeepSalef_01.pas中
那請先看書本中的"DM"什麼東西
應該是沒定義/宣告又或者可能是你在打的時候打錯了...XD

===>>小弟確定沒打錯 關於 DM應該是 DataSource 的公用變數定義 所以我在共域變數區定義之後就沒出現錯誤
可是 DSItems 就說沒有效用的定義 是否DM.DSItems 這語法不適用 或是 .DSItems 有其他代用的名稱?
請教老大仔 如何解決謝謝!
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#8 引用回覆 回覆 發表時間:2011-01-27 13:06:03 IP:118.169.xxx.xxx 未訂閱
1.我覺得你照書中的範例, 應該有有前, 中. 後段三篇, 而你可能只是取中段來實作
2.DM 的宣告應該不是 TDataSource 物件, 而是 TDataModule 物件, 你弄錯了,
TDataMoudle 是一個 另類Form的型態, 有兩種方式來宣告, 一是透過Delphi的VCL直接拉一個DataMoudle Form
或者手動建立 DM, 例如 DM:= TDataModule.Create(xxx)
3. 由於在發上來的源碼中看不到 DM的宣告, 所以我想, 最大的可能是有另一段SOURCE 是在處理DM的東東, 所以,
我才會說, 範例應該有前, 中, 後段
因此請你先再仔細查看書中範例, 仔細往前(後)翻翻看, 有沒有相關連的程式
K1086
初階會員


發表:63
回覆:148
積分:42
註冊:2007-04-09

發送簡訊給我
#9 引用回覆 回覆 發表時間:2011-01-27 21:16:45 IP:114.38.xxx.xxx 訂閱

===================引 用 P.D. 文 章===================
1.我覺得你照書中的範例, 應該有有前, 中. 後段三篇, 而你可能只是取中段來實作
2.DM 的宣告應該不是 TDataSource 物件, 而是 TDataModule 物件, 你弄錯了,
TDataMoudle 是一個 另類Form的型態, 有兩種方式來宣告, 一是透過Delphi的VCL直接拉一個DataMoudle Form
或者手動建立 DM, 例如 DM:= TDataModule.Create(xxx)
3. 由於在發上來的源碼中看不到 DM的宣告, 所以我想, 最大的可能是有另一段SOURCE 是在處理DM的東東, 所以,
我才會說, 範例應該有前, 中, 後段
因此請你先再仔細查看書中範例, 仔細往前(後)翻翻看, 有沒有相關連的程式

====>>
謝謝 PD 的指導 我會認真再一次從頭看到尾
cancer
高階會員


發表:58
回覆:319
積分:190
註冊:2004-07-31

發送簡訊給我
#10 引用回覆 回覆 發表時間:2011-03-09 19:18:38 IP:211.75.xxx.xxx 未訂閱
82 行寫 FrmGetData.MyDatasource:=DM.DSItems;
所以,DM 不是 TDataSource
K1086
初階會員


發表:63
回覆:148
積分:42
註冊:2007-04-09

發送簡訊給我
#11 引用回覆 回覆 發表時間:2011-03-10 11:37:19 IP:114.41.xxx.xxx 訂閱

===================引 用 P.D. 文 章===================
1.我覺得你照書中的範例, 應該有有前, 中. 後段三篇, 而你可能只是取中段來實作
2.DM 的宣告應該不是 TDataSource 物件, 而是 TDataModule 物件, 你弄錯了,
TDataMoudle 是一個 另類Form的型態, 有兩種方式來宣告, 一是透過Delphi的VCL直接拉一個DataMoudle Form
或者手動建立 DM, 例如 DM:= TDataModule.Create(xxx)
3. 由於在發上來的源碼中看不到 DM的宣告, 所以我想, 最大的可能是有另一段SOURCE 是在處理DM的東東, 所以,
我才會說, 範例應該有前, 中, 後段
因此請你先再仔細查看書中範例, 仔細往前(後)翻翻看, 有沒有相關連的程式

===>>>謝謝 PD版主的提示 小弟認真看範例 終於知道那裡出問題了 謝謝!同時也感謝 K-TOP 所有大大熱心回應與解釋
系統時間:2024-06-29 22:16:07
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!