大家看看这到底是一个什么错误,该如何解决?(70分)

  • 主题发起人 主题发起人 base2
  • 开始时间 开始时间
B

base2

Unregistered / Unconfirmed
GUEST, unregistred user!
Project preject1.exe raised exception class E01eError with message 'Variant
does not reference an automation object'. Process stopped. Use Step or Run to
continue.

是在我要向数据库中插入一条数据时引起的

大虾救命则个,已经困扰偶好几天了:(
 
最好将部分代码贴出来,让大家看看
 
procedure Tmodify_form.Button2Click(Sender: TObject);
var strtemp:integer;
var strtemp1:integer;
var at, am:integer;
var i :integer;
begin
if combobox1.text<>'' then
begin
strtemp:=query1.fieldbyname('alarmtypeid').asinteger;
query2.DatabaseName:= dialogform.Database1.databasename;
query2.close ;
query2.sql.clear;
query2.sql.add('select typelevelid from alarmtypelevel where alarmtypeid='+inttostr(strtemp));
query2.open;
DBEdit1.datafield:='typelevelid';
strtemp1:=strtoint(DBEdit1.text);

table2.databasename:= dialogform.Database1.databasename;
table2.tablename:='ALARMTYPELEVEL';

table2.active:=true;
table2.First;
for i:=1 to table2.RecordCount do
begin
if table2.fieldbyname('alarmtypeid').asinteger=strtemp1 then
if (table2.fieldbyname('status').asstring='Y')or (table2.fieldbyname('status').asstring='y') then
begin
table2.edit;
table2.fieldbyname('status').asstring:='N' ;
table2.post;
end;
table2.next;
end;
dbedit1.DataField:='';
query2.close;
query2.sql.Clear;
query2.sql.add('select max(typelevelid) from alarmtypelevel');
query2.open;
dbedit1.DataField:='max(typelevelid)';
at:=strtoint(dbedit1.text)+1;

table2.append; <= 出错处
table2.FieldValues['typelevelid'].asinteger:=at;
table2.FieldValues['alarmtypeid'].asinteger:=strtemp;
table2.FieldValues['alarmlevelid'].asinteger:=combobox1.itemindex ;
table2.FieldValues['status'].asstring:='Y';
table2.FieldValues['alarmmodifytime'].asdatetime:=now;

table2.Post ;
query1.Refresh ;
dbgrid1.refresh;
end
else

showmessage('no level!');

end;
 
你定义的变量类型与数据库类型不符合!
最好你能将数据库类型列出来!
 
你定义的变量类型与数据库类型不符合!会在APPEND时报错吗?
 
看样子倒象是三层时引起的?
 
typelevelid number 4
alarmtypeid number 3
alarmlevelid number 2
status char 1

出错后光标停在上述出错处的下一行
 
赋值不符!
>> dbedit1.DataField:='max(typelevelid)';
>> at:=strtoint(dbedit1.text)+1;
出错在这里,改为at:=query2.fieldvalues['max(typelevelid)']+1;

 
>>dedman

照你的改了,但还是出错呀
出错信息一样,地方也一样:(
 
可能出错的地方:
1.DBEdit1.datafield:='typelevelid';
dbedit1.DataField:='max(typelevelid)';
dbedit1改成edit不行吗?

2.table2.close;//ADD
table2.open; //ADD
table2.append; <= 出错处

3.最好用query修改或新增.
 
多人接受答案了。
 
后退
顶部