blue_afreet 2016-05-16 09:18 采纳率: 0%
浏览 1189
已结题

delphi 通过 ado 访问数据库存储过程,如果有插入动作,为什么会执行两遍?

如题。这是我反复测试后得出的结论。我实在不理解为什么。

具体测试过程是这样子的:我用ado连接数据库。然后我写了一个简单的存储过程,就是往表里插入数据。然后我用ado调用这个存储过程。然后我就发现,虽然程序里我只调用了一次,但实际上表里的数据却被插入了完全一模一样的两条。

这算是bug还是怎么回事?是不是有什么我不曾注意到的细节没处理好?

存储过程代码如下:

create procedure proc_ado_test( @str varchar(50) )
as
begin
declare @id int
insert into ado_pro_test(str) values(@str)
select @id=max(id) from ado_pro_test
select @id as result
end

其中,表里的字段id是自增量的标志字段。

delphi里代码非常简单,如下:

procedure TForm1.SpeedButton1Click(Sender: TObject);
var
sql, str: string;
begin
//
sql:='proc_ado_test '''+inttostr(acc)+'''';
Inc(acc);
exeSql(sql);
ADOQuery1.Open;
str:=LowerCase(ADOQuery1.fieldbyname('result').AsString);
memo1.lines.add(sql+' : '+str);
end;

其中acc是个全局int变量,初始值是1。

可以看到,点击button一下,返回的最大的id值,是两个两个往上跳的。直接去数据库里看表里的记录,也是可以直接看到,
每次执行完后都是多两条一模一样的记录的。

为什么会这样?

  • 写回答

1条回答 默认 最新

  • 「已注销」 2016-05-18 14:11
    关注

    今天用你的代码测试了是没有问题的,点一次插入一条记录,区别就是exeSql(sql)改成ADOQuery1.SQL.Text := sql, 不过这点应该不影响才对,你可以换下试试。

    评论

报告相同问题?

悬赏问题

  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)