Table1.append; !!!???-----by zx(100分)

  • 主题发起人 主题发起人 zx
  • 开始时间 开始时间
Z

zx

Unregistered / Unconfirmed
GUEST, unregistred user!
填入Sybase数据库的数据怎么会出错呢?
procedure TForm1.Button1Click(Sender: TObject);
var
beginip,endip: LongWord ;
beginipstr,endipstr: string;
begin
BeginIp:=LongWord(Edit9.Text);
endip :=LongWord(Edit10.Text);
beginipstr:=Edit1.Text+'.'+Edit2.Text+'.'+Edit3.Text+'.'+Edit4.Text;
endipstr:= Edit5.Text+'.'+Edit6.Text+'.'+Edit7.Text+'.'+Edit8.Text;
Table1.Append;
Table1['description']:= 'gsdfgsdfgsdfgdfjfhjf';
Table1['begin_ip']:= beginip; //库中的begin_ip,end_ip为一个real型数据
Table1['end_ip']:= endip;
Table1['begin_ipstring']:= beginipstr;
Table1['end_ipstring']:= endipstr;
Table1.Post;
end;

比如我填一个10位整数,到库里却成了9672016之类的数了,
而且当数大了,他总是96...多少的让我莫名其妙!
是不是有个什么类型转换的问题?
数据库是Sybase,而且我最大的数就是LongWord的4294967295

?/??
怎么办呢?
 
>>BeginIp:=LongWord(Edit9.Text);
>>endip :=LongWord(Edit10.Text);

把字符串转换成长整数应该为:
StrToInt64(const S: string): Int64
 
我发现比如我输入1,他也变成了9672016之类的数,
而且每次都是96......随机的!。。。。。
 
强制类型转换当然可以,我查过结果,转换上没有问题,
只是填入的时候出错!
 
那填入时 TABLE1.FieldValues['begin_ip']:= beginip;
 
结果一样!
 
wuyi: IntToStr()不也一样?
ZX:为什么不喜欢 FieldByName('xx').AsXX?
zx: 跟踪一下,哪步出的问题,是数据库,还是转换
 
问题解决了!
看来数据库和程序都有问题,
我把Sybase的numeric类型
转换成了Decimal类型,然后
程序进行了如下修改:
例如:
TFloatField(Table1.FIeldByName('begin_ip')).AsFloat:=6245456452456;
先要强制类型。

 
一百分怎么分呢?
不甘心!
 
>> BeginIp:=LongWord(Edit9.Text);
>> endip :=LongWord(Edit10.Text);
实在不知这样的两条语句你居然认为是正确的!!!
它们给出的实际上是 Edit0.Text和Edit10.Text的地址,当然是随机的。
你必须用StrToInt之类的函数进行转换。

用字段的强制类型转换是毫无道理可言的,再检查一下你的程序,一定哪还有
问题。
 
不好意思,写写错了
再帖一遍:
BeginIp :=Longword(StrToInt(BegIPStr[4]))+LongWord(StrToInt(BegIPStr[3])*256)+LongWord(StrToInt(BegIPStr[2])*256*256)+LongWord(StrToInt(EndIpStr[1])*256*256*256);
EndIp := LongWord(StrToInt(EndIPStr[4]))+LongWord(StrToInt(EndIPStr[3]))*256+LongWord(StrToInt(EndIPStr[2])*256*256)+LongWord(StrToInt(EndIpStr[1])*256*256*256);
.
.
.
.
Table1.Edit;
TStringField(Table1.FieldByName('description')).AsString:= Description;
TFloatField(Table1.FieldByName('begin_ip')).AsFloat := BeginIp;
TFloatField(Table1.FieldByName('end_ip')).AsFloat := EndIp;
TStringField(Table1.FieldByName('begin_ipstring')).AsString:= BeginString;
TStringField(Table1.FieldByName('end_ipstring')).AsString:= EndString ;
Table1.Post;
 
多人接受答案了。
 
后退
顶部