我想利用ware(id,code,name,...)建立自动编号, 其中code是varchar类型,代码如下:procedure Teditsp.NewCode(Sender: integer);
var code: string;
begin
Query1.Close;
Query1.sql.text := 'select count(*) from ware';
Query1.open;
code := floattostr(100000 + Query1.fields[0].asfloat + Sender);
Query1.Close;
Query1.sql.text := 'select count(*) from ware where code=:code';
Query1.Parameters[0].Value := code;
Query1.open;
if Query1.Fields[0].Value > 0 then
begin
Sender := sender + 1;
Newcode(sender);
end
else
begin
spda.ADOTable2.FieldByName('code').value := code;
end;
end;
但是程序运行到spda.ADOTable2.FieldByName('code').value := code;时发生一个错误:
access violation at address 0081AF2C in module...
不知是什么原因?谢谢!!
var code: string;
begin
Query1.Close;
Query1.sql.text := 'select count(*) from ware';
Query1.open;
code := floattostr(100000 + Query1.fields[0].asfloat + Sender);
Query1.Close;
Query1.sql.text := 'select count(*) from ware where code=:code';
Query1.Parameters[0].Value := code;
Query1.open;
if Query1.Fields[0].Value > 0 then
begin
Sender := sender + 1;
Newcode(sender);
end
else
begin
spda.ADOTable2.FieldByName('code').value := code;
end;
end;
但是程序运行到spda.ADOTable2.FieldByName('code').value := code;时发生一个错误:
access violation at address 0081AF2C in module...
不知是什么原因?谢谢!!
中有不存在的对象,自己跟踪一下
改为'select count(*) as code from ware where code=:code'
就可以了.
这部分代码看不到,猜测是你的spda对象没有创建(Create).
1. spda窗体未创建
2. ADOTable2无此字段
spda.ADOTable2.FieldByName('code').value := code;
spda.post;==============按你上面说,说明数据类型对上了,呵呵,你看一下
spda.ADOTable2Code 这个是定义的什么类型啊,你的数据表中定义的是什么类型。反正已知code 是string类型.