請問資料庫動態定義type record 的問題 |
尚未結案
|
corey
一般會員 發表:34 回覆:44 積分:14 註冊:2003-04-19 發送簡訊給我 |
請各位大大幫忙一下: 內容有點長請耐心看完...
前提:
如果我們定義一變數為下列屬性它所佔用的記憶體baty數如下....
SmallInt佔用byte數(2 byte)
LongInt佔用byte數(4 byte)
Int64佔用byte數(8 byte)
Char佔用byte數(1 byte) 問題來了
1.如果我宣告一type record如下
type
THeader = Record
REPLY_CODE : SmallInt;
TRANS_CODE : SmallInt;
FUNCTION_CODE : SmallInt;
UNIT_EDIT : Record
UNIT_NAME : array[0..3] of Char;
BRANCH_NO : Char;
UNIT_WEIGHT : Char;
end;
end; var _Header:THeader;
p : integer; p := sizeof(_Header); ===> p = 12....想必大家都看的出來 那如果我宣告如下:
var _CHeader : array[0..11] of Char p := sizeof(_Header); ===> p = 12 如果以記憶佔用情形 _Header = _CHeader ok,那我的問題就來了
前者狀態(type record)是我都知道我每一個欄位都屬性(int,string,char...),後者狀態是我只知道總長度多少. 現在我想要做的是將各欄位都定義於資料庫中,透過讀取資料庫我知道每個欄位的長度,屬性等..,如下:
欄位名稱 欄位長度 欄位屬性 值
A1 2 SmallInt 123456
A2 2 SmallInt 02
A3 2 SmallInt 99
A4 4 char "大大"
A5 1 char a
A6 1 char 5
最後將它放在長度12的位置理,透過傳值(@PHeader)的方式達到將上列數字正確傳到往後的程式. 我不知道這的標題名稱要叫什麼,請版大看完後幫忙改一下名稱,以便日後其它同好可以搜尋....
|
ha0009
版主 發表:16 回覆:507 積分:639 註冊:2002-03-16 發送簡訊給我 |
你好: 這是資料結構中共用記憶體的一種方式稱為 Union 你可以如下列方式宣告 THeader = packed Record case Integer of 0 : ( REPLY_CODE : SmallInt; TRANS_CODE : SmallInt; FUNCTION_CODE : SmallInt; UNIT_NAME : array[0..3] of Char; BRANCH_NO : Char; UNIT_WEIGHT : Char; ); 1 : ( CHeader : array[0..11] of Char; ) end; var Data : THeader; begin Data.CHeader := StreamData; meom1.lines.add (IntToStr (Data.REPLY_CODE)); ... ... ... end; |
corey
一般會員 發表:34 回覆:44 積分:14 註冊:2003-04-19 發送簡訊給我 |
引言:謝謝你的回覆,你說的這個方式我有想過,但是有個問題,也就是我文中有提到"前者是知道欄位(變數)名稱",也就是你已知道我要傳入3個SmallInt及3個Char,可是現在我要做的比較活(動態方式),我不知道user要傳入多少值進來,但是我知道它的總長度是多少及每一個傳入值的型態和值,我要組成一總長度是user宣告的長度值,例:A1 A2 A3 A4 A5 A6 = 長度12你好: 這是資料結構中共用記憶體的一種方式稱為 Union 你可以如下列方式宣告 THeader = packed Record case Integer of 0 : ( REPLY_CODE : SmallInt; TRANS_CODE : SmallInt; FUNCTION_CODE : SmallInt; UNIT_NAME : array[0..3] of Char; BRANCH_NO : Char; UNIT_WEIGHT : Char; ); 1 : ( CHeader : array[0..11] of Char; ) end; var Data : THeader; begin Data.CHeader := StreamData; meom1.lines.add (IntToStr (Data.REPLY_CODE)); ... ... ... end; |
corey
一般會員 發表:34 回覆:44 積分:14 註冊:2003-04-19 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |