编了一个在image上画图的问题,编译时通过,但是run时提示:can not convert variant of type(NULL) into type(integer).
程序如下:unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Buttons, DB, ADODB;type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
Image1: TImage;
Timer1: TTimer;
Button1: TButton;
ADOTable1: TADOTable;
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Image1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
s:real;
aa:real;
ii:integer;
xx:integer;
yy:integer;
implementation{$R *.dfm}
procedure tform1.Button1Click(sender:tobject);
begin
adotable1.Recordset.MoveFirst;
timer1.Enabled:= not timer1.Enabled;
s:=adotable1.Fields[2].asfloat;
xx:= image1.Left;
aa:=1-s/10.0;
yy:=round(image1.Height/2*aa);
image1.Canvas.Refresh;
image1.Refresh;
image1.Canvas.Pen.Color:= clred;
image1.Canvas.Pen.Width:=2;
end;
procedure tform1.Timer1Timer(sender:tobject);
var
i:integer;
begin
image1.Canvas.MoveTo(xx,yy);
ii:=adotable1.Recordset.RecordCount;
for i:=1 to ii do
begin
adotable1.Recordset.MoveNext;
s:=adotable1.Fields[2].asfloat;
xx:=10+10*i;
aa:=1-s/10.0;
yy:=round(image1.Height/2 *aa);
image1.Canvas.LineTo(xx,yy);
end;
end;
end.
程序如下:unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Buttons, DB, ADODB;type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
Image1: TImage;
Timer1: TTimer;
Button1: TButton;
ADOTable1: TADOTable;
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Image1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
s:real;
aa:real;
ii:integer;
xx:integer;
yy:integer;
implementation{$R *.dfm}
procedure tform1.Button1Click(sender:tobject);
begin
adotable1.Recordset.MoveFirst;
timer1.Enabled:= not timer1.Enabled;
s:=adotable1.Fields[2].asfloat;
xx:= image1.Left;
aa:=1-s/10.0;
yy:=round(image1.Height/2*aa);
image1.Canvas.Refresh;
image1.Refresh;
image1.Canvas.Pen.Color:= clred;
image1.Canvas.Pen.Width:=2;
end;
procedure tform1.Timer1Timer(sender:tobject);
var
i:integer;
begin
image1.Canvas.MoveTo(xx,yy);
ii:=adotable1.Recordset.RecordCount;
for i:=1 to ii do
begin
adotable1.Recordset.MoveNext;
s:=adotable1.Fields[2].asfloat;
xx:=10+10*i;
aa:=1-s/10.0;
yy:=round(image1.Height/2 *aa);
image1.Canvas.LineTo(xx,yy);
end;
end;
end.
var
i:integer;
begin
if not showing then exit;//试试在这加上这句看看
image1.Canvas.MoveTo(xx,yy);
ii:=adotable1.Recordset.RecordCount;
for i:=1 to ii do
begin
adotable1.Recordset.MoveNext;
s:=adotable1.Fields[2].asfloat;
xx:=10+10*i;
aa:=1-s/10.0;
yy:=round(image1.Height/2 *aa);
image1.Canvas.LineTo(xx,yy);
end;
end;
end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Buttons, DB, ADODB;type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
Image1: TImage;
Timer1: TTimer;
Button1: TButton;
ADOTable1: TADOTable;
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject); private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
s:real;
aa:real;
ii:integer;
xx:integer;
yy:integer;
implementation{$R *.dfm}
procedure tform1.Button1Click(sender:tobject);
var
i:integer;
begin
adotable1.Recordset.MoveFirst;
s:=adotable1.Fields[2].asfloat;
xx:= image1.Left;
aa:=1-s/10.0;
yy:=round(image1.Height/2*aa);
image1.Canvas.Refresh;
image1.Refresh;
image1.Canvas.Pen.Color:= clred;
image1.Canvas.Pen.Width:=2;
image1.Canvas.MoveTo(xx,yy);
ii:=adotable1.Recordset.RecordCount;
for i:=1 to ii do
begin
timer1.Enabled:=not timer1.Enabled;
adotable1.Recordset.MoveNext;
s:=adotable1.Fields[2].asfloat;
xx:=10+10*i;
aa:=1-s/10.0;
yy:=round(image1.Height/2 *aa);
end;
end;
procedure tform1.Timer1Timer(sender:tobject);begin
if not showing then exit;
image1.Canvas.LineTo(xx,yy);
timer1.Enabled:=not timer1.Enabled;
end;
end.
看起来好象是类型转化的问题。你检查一下数据库中存储的值是否为空?
不知道你用的是什么数据库?
在sql里就用那个convert 或者 cast 显式转换.
因为你定义的字段类型可能与程序中的不同.有的类型之间是隐式转换.
到底是怎么回事?
各位帮帮忙呀!
但是应该怎么办,有人知道吗?
知道的就回答吗,不要不好意思哟。
找一下SQL联机帮助吧!
是不是别的地方错了
我改用Table控件连接数据库,程序也做了相应的调整就可以了,
那这个程序到底是哪里错了呢?
可能是这句话错了
s:=adotable1.Fields[2].asfloat; 我这里没有delphi
如果不对的话。你要调试的时候看看这些值是不是为NULL
我知道是那句话错了,关键是怎么改
谢谢大家的帮忙