想出了一个办法,虽然笨了点,但很实用,原理就是当自动增加的ID号不是你需要
的数时,就不停地"添加","删除",直到ID号变成你要的数为止:
下面是一个例子,用Access97+ODBC98实现,已经调试通过:
procedure TForm1.Button1Click(Sender: TObject);
var tqes,tqed:todbcquery;
ids,idd:integer;
//tqes是源表,即没有"自动增加"字段的那个表
//tqed是新表,注意在access中,这个表一定要是新创建的,
如果原来有记录即使删除也没用,因为原来的ID号已经记录下来了.
//假设源表和新表都叫"table1",并且都有2个字段,名字都是ID,field1,
不同的是源表的ID是integer,新表的ID是"自动增加".
begin
tqes:=todbcquery.create(self);
tqes.Database:=odbcsrc;
tqes.sql.add('SELECT * FROM table1 ORDER BY ID');
//取出源表数据,注意一定要按ID排序!
tqes.open;
tqed:=todbcquery.create(self);
tqed.Database:=odbcdest;
while not tqes.eofdo
begin
ids:=tqes.fieldbyname('id').asinteger;
idd:=-1;
while idd<>idsdo
begin
tqed.close;
tqed.sql.clear;
tqed.sql.add('delete * from table1 where id=:id');
tqed.ParamByName('id').asinteger:=idd;
tqed.ExecSQL;
tqed.close;
tqed.sql.clear;
tqed.sql.add('insert into table1 (field1) values
fld)');
tqed.ParamByName('fld').asstring:=tqes.fieldbyname('field1').asstring;
tqed.ExecSQL;
tqed.close;
tqed.sql.clear;
tqed.sql.add('select max(id) as mx from table1');
tqed.Open;
idd:=tqed.fieldbyname('mx').asinteger;
end;
tqes.Next;
end;
tqes.free;
tqed.free;
showmessage('ok');
end;
注意:中间循环的那段代码很丑陋,没有做任何优化,你可以根据自己情况优化.
不过反正是自己用,慢点也无所谓.