byte类型为什么不能进行整数的运算(20分)

  • 主题发起人 主题发起人 南宫吹云
  • 开始时间 开始时间

南宫吹云

Unregistered / Unconfirmed
GUEST, unregistred user!
byte类型为什么不能进行整数的运算:
var
rbuf:byte;
当rbuf mod 16>8时 rbuf div 16 或者时出错。

我的程序是检测串口发送的数据,并更新数据库:
procedure TForm1.Comm1ReceiveData(Sender: TObject
Buffer: Pointer;
BufferLength: Word);
var
s:string;
i:integer;
begin
move(buffer^,pchar(@rbuf)^,1)
// bufferlength)

with table1 do
begin
//showmessage(inttohex(rbuf,2));
if (rbuf mod 16)>8 then exit
//正好我用不到(rbuf mod 16)>8的情况,当去掉此句时出错
if (rbuf mod 16)=8 then
begin
if locate('jpk;djh',vararrayof([jpk[rbuf div 16],djh[rbuf div 16]]),[lopartialkey]) then
begin
edit;
fieldbyname('an').value:=false;
fieldbyname('shj').asinteger:=9999;
post;
end;
close;
open;
exit;
end;
if locate('jpk;djh',vararrayof([(rbuf div 16)+1,rbuf mod 16+1]),[lopartialkey]) then
begin
jpk[rbuf div 16]:=fieldbyname('jpk').asinteger;
djh[rbuf div 16]:=fieldbyname('djh').asinteger;
s:=formatdatetime('hhmmss',time);
i:=strtoint(copy(s,1,2))*60+strtoint(copy(s,3,2));
edit;
fieldbyname('an').value:=true;
fieldbyname('shj').asinteger:=i;
post;
close;
open;
end;
end;
end;

是这个问题,麻烦各位帮忙看一下。
 
把错误信息贴出来,你确定是这个错的吗?
我试了下,好象byte型的可以参与整型运算呀。。。。
 
出错信息不记得了,就是可奇怪。
 
mcomdata:array[0..255]of byte;
fillchar(Mcomdata,255,0);
Mcep:=0
Mcsp:=1;
Move(dataptr^,Mcomdata[Mcep+1],Datasize);//BufferLength
Mcep:=Mcep+Datasize;
 
Mcep:=Mcep+Datasize;
是什么意思啊?
 
错误信息如下:
project vfg.exe raised exception class EDBEngineError with message 'Operation not
application.'.Process stopped. Use stop or Run to continue.
 
执行到此句时出错:
if locate('jpk;djh',vararrayof([(rbuf div 16)+1,rbuf mod 16+1]),[lopartialkey]) then

好像是不能(rbuf div 16)+1,rbuf mod 16+1,不知是不是这里出错。
 
改成:
if locate('jpk;djh',VarArrayOf([integer((rbuf div 16)+1),integer(rbuf mod 16+1)]),[lopartialkey]) then
 
(rbuf div 16)+1,rbuf mod 16+1])
可是为什么这样写就不行?
MOD不是整型运算吗?出来不就是整数吗?为什么还要加integer()
 
variant里面可有integer和byte之分,你的字段是integer的,数据库可能只认integer,不认byte
 
可是(rbuf div 16)+1是整型啊?
 
project vfg.exe raised exception class EDBEngineError with message 'Operation not
application.'
能否翻译一下是什么意思?EBDEngineError是什么错误?
 
to pipi.:
这种情况可是有时出现有时不出现的啊?当rbuf为01H-0AH时都没事,但一大于0ah肯定
出错,为什么呢?
 
EBDEngineError就是 bde引擎错误,就是数据库有关
你的是d6吧?可能是bug而已
 
2个都不是字符串,不要用 [lopartialkey] 了,用 [] 就可以了
 
不是,是D5
这种情况可是有时出现有时不出现的啊?当rbuf为01H-0AH时都没事,但一大于0ah肯定
出错,为什么呢?如果数据库不认BYTE,那么为什么当rbuf为01H-0AH时都没事呢?
 
加了integer还有事吗?没有的话,那就是bug了
 
好,谢谢PIPI指导,总觉得奇怪,明天测试一下
 
不好意思,前几天忙着复习考试,没有来得及测试,今天测试了一下,还是不行:
执行到:
if locate('jpk;djh',vararrayof([integer((rbuf div 16)+1),integer(rbuf mod 16+1)]),[]) then
时出错:
Opertion not applicable.
 
后退
顶部