Delphi7如何对TFields赋值 ( 积分: 150 )

  • 主题发起人 主题发起人 lijianbao32
  • 开始时间 开始时间
L

lijianbao32

Unregistered / Unconfirmed
GUEST, unregistred user!
我在D5中使用下面语句可以赋值,而在D7中则不行,请高手帮忙
Fields[0].AsString:= '1';
 
我在D5中使用下面语句可以赋值,而在D7中则不行,请高手帮忙
Fields[0].AsString:= '1';
 
delphi7中也可以啊,是其他地方出问题了!
 
谁说不行?
把代码考全了看看。
 
我的代码是这样的,不知道是哪个地方有问题

//== [将String存入DataSet]
procedure TwwMcciQuery.ReadResultToDataset(sResult: string);
var
I: Integer;
TempLine: TStringListEx;
temp:string;

iFieldID: Integer;
sForward, sBackward: String;

begin
if Trim(sResult) = '' then
Exit;

// 将数据包按行存入数组
TempLine:= TStringListEx.Create;
TempLine.Splitter:= LINE_END;
TempLine.SetCharText(sResult);

TempLine.SaveToFile('c:/aaaa.txt');
try
Close;
DisableControls;

// 前三行用于存字段定义(名称、类型)
SetFieldDefs(TempLine, FieldDefs);

inherited Open;

// 第四行(TempLine[3])起用于存字段值
if TempLine.Count > LINE_VALUE then
begin
for I:= LINE_VALUE to TempLine.Count-1 do
begin
Append;
iFieldID:= 0;
sBackward:= TempLine;
repeat
sForward:= GetFirstToken(sBackward, FIELD_END);
Fields[iFieldID].AsString:= sForward;
sBackward:= StripFirstToken(sBackward, FIELD_END);
inc(iFieldID);
until
(sBackward = '');
post;
end;

First;
end;
finally
TempLine.Free;
EnableControls;
end;
end;


//== [第二、三行用于存字段定义(名称、类型)]
procedure SetFieldDefs(Lines: TStrings; FieldDefs: TFieldDefs);
var
I: Integer;
sFieldName, sFieldNameLine, sFieldType, sFieldTypeLine: String;
begin
I:= 0;
sFieldNameLine:= Lines[1]; // 第二行: 字段名称 (第一行: 字段数目)
sFieldTypeLine:= Lines[2]; // 第三行: 字段类型

FieldDefs.Clear;
repeat
// 第二行: 字段名称
sFieldName:= GetFirstToken(sFieldNameLine, FIELD_END);
sFieldNameLine:= StripFirstToken(sFieldNameLine, FIELD_END);

// 第三行: 字段类型
sFieldType:= GetFirstToken(sFieldTypeLine, FIELD_END);
if sFieldType='DATE_TYPE' Then
FieldDefs.Add(sFieldName, ftDateTime)
else if sFieldType='FLOAT_TYPE' Then
FieldDefs.Add(sFieldName, ftFloat)
else if sFieldType='INT_TYPE' Then
FieldDefs.Add(sFieldName, ftFloat)
else
FieldDefs.Add(sFieldName, ftString, 250);

sFieldTypeLine:= StripFirstToken(sFieldTypeLine, FIELD_END);
Inc(I);
until
(sFieldNameLine = '');
end;
 
//== [取出现第一个字符前的串]
function GetFirstToken(S: string; Token: Char): string;
var
Temp: string;
Index: Integer;
begin
Index:= Pos(Token, S);

if Index < 1 then
begin
GetFirstToken:= '';
Exit;
end;

Index:= Index - 1;
SetLength(Temp, Index);
Move(S[1], Temp[1], Index);

GetFirstToken:= Temp;
end;
 
我的控件在D5中是可以用的,搬到D7过来就不能用了,是不是需要做哪些特殊的处理
 
用单步调试,看一下到那里出错。
 
都没有报错,可是就用下面的语句跟踪temp1=temp2 就是没有赋值成功
temp2:= Fields[iFieldID].AsString;
Fields[iFieldID].AsString:= sForward;
temp1:= Fields[iFieldID].AsString;
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
916
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部