如题:
数据表table1,其关键字字段为ID1,用线程向里面添加记录,线程exe方法为:procedure mythread.Execute;
var
adods:TADODataSet;
begin
{ Place thread code here } Coinitialize(nil); try
adods:=TADODataSet.Create(nil);
adods.Connection:=Form1.ADOConn;
adods.Close;adods.CommandText:='select * from table1';
adods.Open;
adods.Append;
adods.FieldByName('ID1').Asinteger:=get_id('table1','ID1')+1;//注意这里get_id函数是取表里最大的ID1,然后加1作为新的关键字的值存入
adods.FieldByName('abc').AsString:='aaa';
adods.Post;
finally
FreeAndNil(adods);
end; CoUninitialize;
end;如果开多个线程的话,就会出现关键字重复的问题,即保存的时候关键字不唯一,怎样解决这种问题呢???
数据表table1,其关键字字段为ID1,用线程向里面添加记录,线程exe方法为:procedure mythread.Execute;
var
adods:TADODataSet;
begin
{ Place thread code here } Coinitialize(nil); try
adods:=TADODataSet.Create(nil);
adods.Connection:=Form1.ADOConn;
adods.Close;adods.CommandText:='select * from table1';
adods.Open;
adods.Append;
adods.FieldByName('ID1').Asinteger:=get_id('table1','ID1')+1;//注意这里get_id函数是取表里最大的ID1,然后加1作为新的关键字的值存入
adods.FieldByName('abc').AsString:='aaa';
adods.Post;
finally
FreeAndNil(adods);
end; CoUninitialize;
end;如果开多个线程的话,就会出现关键字重复的问题,即保存的时候关键字不唯一,怎样解决这种问题呢???
2:你应该使用自增字段
用“锁”Lock一下。
var cs:TRTLCriticalSection; //定义全局变量
...
InitializeCriticalSection(cs);//程序开启创建
...
EnterCriticalSection(cs);//进入临界区
adods.Append;
adods.FieldByName('ID1').Asinteger:=get_id('table1','ID1')+1;//注意这里get_id函数是取表里最大的ID1,然后加1作为新的关键字的值存入
adods.FieldByName('abc').AsString:='aaa';
adods.Post;
LeaveCriticalSection(cs);//临界区结束
...
DeleteCriticalSection(cs); //程序结束关闭
adoqurey1.sql.text := 'insert into table1 (ID1,abc) values(1,''aaa'') '
adoqurey1.ExecSQL;