如果id为自动增长字段,其他数据添加后,怎么返回该行数据的id值。如果其他字段数据没有重复,可以查询,如果有重复的,查询出来的编号值是不正确的?
请专家赐教!
请专家赐教!
解决方案 »
- 窗体中用WebBrowser显示网页,请问如何能用使javascript调用delphi中的函数
- 关于多行打印的问题
- [菜鸟提问]今天我要崩溃了~~~~~~~~~~~
- "无法找到动态链接库VNSAPI32.dll"是什么错误?如何解决?
- 看完文章就给分!
- 如何破除超级解霸2001的时间限制?
- 很怪的现象-Excel问题,神仙救命!!!
- delphi让我有些头疼,我想家了……
- 优秀的DB操作组件集!!!!!!!!!!!!!
- selecenext 获取焦点的问题
- 建立了几个数据表(用Access)没有设关键字,怎样用ADOQuert通过一个表来查别一个表??
- 请教Wise installer 安装程序!!我在线等的!
var
i :integer;
begin
i := Table1.FieldByName('id').asInteger;end;
name (id,name)
其中id是自动增长的int,我添加name,同时我也要添加的数据的id。怎么同时得到。
不考虑select top ,因为多用户操作可能错位。
我要的是这条记录的id,添加后能否及时得到?
select id from name where name='name' 返回两个记录,你怎么确认哪个是你刚才加的呢?
比如你添加一条记录,同时我也添加
如果是这样的顺序 你添加 >你查询 >我添加 >我查询
就ok了
如果是这样的顺序 你添加>我添加>你查询>我查询
那怎么办?
可是我的没有三层结构,或者不是用的数据集接口,怎么可以得到delta呢。
总之,期待高手!
ADOConnection1.BeginTrans;
Try
//执行insert操作记得用Execsql方法
//然后在此出Select 最大的编号
ADOConnection1.CommitTrans;
except
ADOConnection1.rollbacktrans;
end;解释:
1.为什么要操作放在事务中主要考虑到可能有多个用户同时在操作该表,直接插入后取最大值存在错误的可能。你可以在查询分析器中启动两个事务同时插入记录进行测试。
2.在插入数据后是否可以把这时的值取出来?可以的。
adoquery1.open;
xx:=adoquery.fieldbyname('主键');
....有错找我。