讀取OleVariant |
答題得分者是:speedup
|
donlly
一般會員 發表:45 回覆:73 積分:23 註冊:2004-11-30 發送簡訊給我 |
[/code] unit server; procedure Tcorecord.Readrecord(str: OleVariant);
begin
showmessage(str.Month);
end; -------------------------------------------------------------- Unit client; procedure TForm1.Button1Click(Sender: TObject);
type
TDateRec = record
Year: Integer;
Month: (Jan, Feb, Mar, Apr, May, Jun,
Jul, Aug, Sep, Oct, Nov, Dec);
Day: 1..31;
end;
var Record1: TDateRec; begin
with Record1 do
begin
Year := 1904;
Month := Jun;
Day := 16;
end;
dep:=vararraycreate([0, 2], varVariant);
dep[0]:=Record1.Year;
dep[1]:=Record1.Month;
dep[2]:=Record1.Day; SocketConnection1.AppServer.Rererord(dep);
end;
[/code] 請問為什么編譯錯誤?server怎樣可以把client的record1讀取?
|
speedup
資深會員 發表:19 回覆:259 積分:280 註冊:2003-07-04 發送簡訊給我 |
引言:混心雜欲 棄修身~唉unit server; procedure Tcorecord.Readrecord(str: OleVariant); begin //showmessage(str.Month); ShowMessage(str[0]);//Client 傳過來的是oleVariant 不是結構(Record) end; -------------------------------------------------------------- Unit client; procedure TForm1.Button1Click(Sender: TObject); type TDateRec = record Year: Integer; Month: (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec); Day: 1..31; end; var Record1: TDateRec; begin with Record1 do begin Year := 1904; Month := Jun; Day := 16; end; dep:=vararraycreate([0, 2], varVariant); dep[0]:=Record1.Year; dep[1]:=Record1.Month; dep[2]:=Record1.Day; SocketConnection1.AppServer.Rererord(dep); end;請問為什么編譯錯誤?server怎樣可以把client的record1讀取?
------
唉~ |
speedup
資深會員 發表:19 回覆:259 積分:280 註冊:2003-07-04 發送簡訊給我 |
引言:混心雜欲 棄修身~唉unit server; procedure Tcorecord.Readrecord(str: OleVariant); begin //showmessage(str.Month); ShowMessage(str[0]);//Client 傳過來的是oleVariant 不是結構(Record) end; -------------------------------------------------------------- Unit client; procedure TForm1.Button1Click(Sender: TObject); type TDateRec = record Year: Integer; Month: (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec); Day: 1..31; end; var Record1: TDateRec; begin with Record1 do begin Year := 1904; Month := Jun; Day := 16; end; dep:=vararraycreate([0, 2], varVariant); dep[0]:=Record1.Year; dep[1]:=Record1.Month; dep[2]:=Record1.Day; SocketConnection1.AppServer.Rererord(dep); end;請問為什么編譯錯誤?server怎樣可以把client的record1讀取?
------
唉~ |
donlly
一般會員 發表:45 回覆:73 積分:23 註冊:2004-11-30 發送簡訊給我 |
引言:謝謝,請問有方法可以把OleVariant還原為Record嗎? 發表人 - donlly 於 2005/02/02 16:27:25unit server; procedure Tcorecord.Readrecord(str: OleVariant); begin //showmessage(str.Month); ShowMessage(str[0]);//Client 傳過來的是oleVariant 不是結構(Record) end; -------------------------------------------------------------- Unit client; procedure TForm1.Button1Click(Sender: TObject); type TDateRec = record Year: Integer; Month: (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec); Day: 1..31; end; var Record1: TDateRec; begin with Record1 do begin Year := 1904; Month := Jun; Day := 16; end; dep:=vararraycreate([0, 2], varVariant); dep[0]:=Record1.Year; dep[1]:=Record1.Month; dep[2]:=Record1.Day; SocketConnection1.AppServer.Rererord(dep); end;請問為什么編譯錯誤?server怎樣可以把client的record1讀取? |
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|
johnny2212
初階會員 發表:34 回覆:65 積分:39 註冊:2003-04-09 發送簡訊給我 |
若您希望傳入Server 或傳入Client的資料較為結構化,您不妨使用
memory table的方式(至少我是這麼做的),若按您的需求,可用以下的方法
Client
1 放入一個TClientDataSet的元件
2 在FieldDefs下,定義好三個欄位,Year,Month,Day,還有DataType一定要定義
3 以下是程式部分 procedure TForm1.Button1Click(Sender: TObject);
begin
ClientDataSet1.CreateDataSet;
//您也可以在ClientDataSet按右鍵靜態CreateDataSet
ClientDataSet1.Insert;
ClientDataSet1['Year']:='1904';
ClientDataSet1['Month']:='Jun';
ClientDataSet1['Day']:='16';
ClientDAtaSet1.Post; SocketConnection1.AppServer.Rererord(ClientDataSet1.Data);
end; Server procedure Tcorecord.Readrecord(str: OleVariant);
begin
//一樣放入ClientDataSet1 到資料模組上(TRemoteDataModule)
ClientDataSet1.Data:=Str;
//此處麻煩您自己測試一下
ShowMessage(ClientDataSet1['Month']);
//或
ShowMessage(ClientDataSet1.Fields[0].AsString) ;
//或
ShowMessage(ClientDataSet1.FindField('Month').AsString);
//或FieldByName
end; 我個人覺得如此做,就比較符合資料模組化的精神,若您要更複雜的結構,
可用ChildDefs(父結構使用ftArray,size代表有幾個)
|
speedup
資深會員 發表:19 回覆:259 積分:280 註冊:2003-07-04 發送簡訊給我 |
引言: 謝謝,請問有方法可以把OleVariant還原為Record嗎?用笨方法 你怎麼包 就怎摸解 procedure Tcorecord.Readrecord(str: OleVariant); type TDateRec = record Year: Integer; Month: (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec); Day: 1..31; end; var Record1: TDateRec; begin record1.Year := str[0]; record1.Month := str[1]; record.Day := str[2]; end;如果為常用結構型態寫成獨立的單元來定義此結構 並寫兩個函數一個用來包OleVariant 一個用來解OleVariant 混心雜欲 棄修身~唉
------
唉~ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |