向表中添加AutoNo类型遇到的大麻烦,请高手会诊一下。多谢(200分)

  • 主题发起人 主题发起人 yfli
  • 开始时间 开始时间
Y

yfli

Unregistered / Unconfirmed
GUEST, unregistred user!
各位数据库编程高手请多多赐教,在下编写数据库程序时遇到以下问题:

最近正在练习使用数据库中的自增型数据(比如ACCESS中的“自动编号”),
但是在使用delphi编写数据库程序时发现,自增型数据和普通数据在编写程序
的时候有以下不同,在添加新记录时,如果操作的表中所有数据类型都为普通
类型数据在使用append和post后数据库指针仍停留在所添加的记录的位置,而
如果操作的表中有自增型数据类型,则使用append和post后数据库后就失
去了指针位置。小弟编写的程序大概的思路如下:
1。我用的是EDIT框将数据库中的数据提取出来。
2。但是向数据库中写的时候SQL语句需要以自增型数据作为条件(我用自增
型数据作为该表的"KEY")向数据库中写入数据,但是由于取不到刚刚append的新记录中的AUTONO的值而无法进行写入
的工作。

希望各位指点一条明路,我想这个方法应该可行,现在面临的问题就是如何取到
新加入的一条记录的自增型数据的值。
 
为什么不直接用sql的insert呢?
 
没错,是 BDE 的缺陷。
 
Query1.SQL.append('insert into tablename');
Query1.SQL.append('(f2,f3)');
Query1.SQL.append('Values(222,333)');
Query1.SQL.append('select f1=@@Identity');
 
如果是单机应用,添加完毕后可以用SQL语句
select SerialNo=@@Identity取到自增性字段的值,然后再定位纪录.
如果是多用户同时操作,最好用存储过程完成.
 
try this->

with table1 do
begin
append;
fieldbyname('f2').asstring='xxxx';
...
post;
refresh;
last;
end;

这样指针就定位到刚添加的记录上了.
 

delphiwolf和wgzhang兄都提到Query1.SQL.append('select f1=@@Identity');
方法,我使用Delphi编程时间不长,可否麻烦二位讲的在细一点,在
执行完Query1.SQL.append('insert into tablename');
Query1.SQL.append('(f2,f3)');
Query1.SQL.append('Values(222,333)');
Query1.SQL.append('select f1=@@Identity');
以后,我怎样做,才能得到新添加的f1的值那,最好写个例子,将其值放进一个
变量中,小弟对指针类的操作不熟,请多赐教。200分随后奉上。

 

< a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=111812">见此问题</a>
 
多谢,问题解决了。
 
给分吧。
 
:yfli,
你在哪?
 
多人接受答案了。
 
后退
顶部