這段時間有個專案id頻繁出現 id衝突的問題 一真找不到原因 後來想到了個辦法 在新建取id時先把到到的id儲存起來
上** 望大神指點下
/// /// 到表中的最大id///
/// 欄位名--必須是int型
/// 表名
/// 臨時資料集
/// 字段
///
function tmainform.getmaxid(fld, tbl: string; qrytmp: tadoquery; rdtype: string): string;
vars, cid, ccondition: string;
begin
ccondition := ' where crdtype = ' + quotedstr(rdtype);
s := 'select isnull(max(' + fld + '),0) +1 from ' + tbl;
if rdtype <> '' then
s := s + ccondition;
doquery(qrytmp, s, true);
cid := qrytmp.fields[0].asstring;
s := 'select count(1) from ' + tbl;
if rdtype <> '' then
s := s + ccondition;
doquery(qrytmp, s);
if rdtype <> '' then
begin
if qrytmp.fields[0].asinteger <= 0 then
begin
s := 'insert yq_getmaxid (crdtype,cmaxid) values ('
+ quotedstr(rdtype) + ',' + cid + ')';
doquery(qrytmp, s, false);
end else
begin
s := 'update yq_getmaxid set cmaxid = ' + cid + ccondition;
doquery(qrytmp, s, false);
end;
end;
result := cid;
end;
yq_getmaxid是建的乙個臨時表
如下:
create table yq_getmaxid(id int identity primary key,
crdtype nvarchar(32) default '',--出入庫型別
cmaxid int default 0 --這個地方應是i開頭
)
執行sql語句如下:
/// /// 執行sql語句///
/// 資料集
/// sql語句
/// 是否執行open
procedure tmainform.doquery(var adoquery: tadoquery; strsql: string; bopen: boolean);
begin
adoquery.close;
adoquery.sql.clear;
adoquery.sql.add(strsql);
if bopen then
begin
adoquery.open;
end else
adoquery.execsql;
end;
資料庫併發
資料庫併發定義 乙個處理機處理乙個事務,系統允許多個處理機處理多個事務,稱為併發 併發引起的影響 1.修改丟失 事務1和事務2同時操作某條資料,比如機場共有機票16張,事務1賣出一張後修改為15,同時事務2也賣出1張,修改為15,最後資料庫中票量為15,實際只剩14個座位 2.不可重複讀 事務1第一...
資料庫id自增長
1.建立序列 create sequence create sequence innerid minvalue 1 maxvalue 99999999999999 start with 1 increment by 1 cache 20 order 2.innerid.currval 指當前序列 i...
Delphi 壓縮Access資料庫
由於access資料庫在反覆使用過程中會自動增大,delphi壓縮access資料庫的簡單方法如下 首先要引用comobj單元 function tform1.compac b const dbfile,pwd string boolean var tempdbfile string constr ...