全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1668
推到 Plurk!
推到 Facebook!

用二個Table 作編號自動加一 若資料庫是空的可以給起始編號嗎?

缺席
K1086
初階會員


發表:61
回覆:142
積分:40
註冊:2007-04-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2014-01-06 22:22:24 IP:61.224.xxx.xxx 訂閱

[code delphi]
procedure Tform1.Table1NewRecord(DataSet:TDataset);
begin
table2.last;
table1.fieldbyname('CustNo').AsInteger :=
table2.fieldbyname('custNo').AsInteger 1;
end;
[/code]
如果資料庫是空的 要自動給起始號可以嗎? 在本討論版小弟有查詢過是有相關的例題,是用 Query1 作的,請問各位前輩若直接用 二個Table可以解決這個問題嗎?
K1086
初階會員


發表:61
回覆:142
積分:40
註冊:2007-04-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2014-01-07 09:00:53 IP:61.224.xxx.xxx 訂閱

[code delphi]
procedure Tform1.Table1NewRecord(DataSet:TDataset);
Var K2:String; K1:integer;
begin
if Table1.FieldByName('CustNo').AsString < '0' Then
begin
Table1.FieldByName('CustNo').AsString := '2014001';
K2:= copy(Table1.FieldByName('CustNo').AsString ,1,7);//轉入字串內容
K1:= StrToInt(K2);//將字串轉成數字
end;
Table2.last;
Table1.fieldbyname('CustNo').AsInteger :=
Table2.fieldbyname('custNo').AsInteger 1; //Key 值自動加一
end;
[/code]

===================引 用 K1086 文 章===================

[code delphi]
procedure Tform1.Table1NewRecord(DataSet:TDataset);
begin
table2.last;
table1.fieldbyname('CustNo').AsInteger :=
table2.fieldbyname('custNo').AsInteger 1;
end;
[/code]
如果資料庫是空的 要自動給起始號可以嗎? 在本討論版小弟有查詢過是有相關的例題,是用 Query1 作的,請問各位前輩若直接用 二個Table可以解決這個問題嗎?
GrandRURU
站務副站長


發表:234
回覆:1651
積分:1742
註冊:2005-06-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2014-01-09 08:48:04 IP:59.120.xxx.xxx 未訂閱
謝謝分享
cancer
高階會員


發表:58
回覆:319
積分:190
註冊:2004-07-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2014-02-13 12:05:18 IP:220.128.xxx.xxx 未訂閱
我都用
DataSet.FieldByName('ItemNo').AsInteger := DataSet.RecordCount 1;

新增一筆時 RecordCount = 1,因此第一個編號剛好是 1。
必須禁上從中間插入資料,即只能 Append 才會省事。
存檔時,DataSet 必須跑一偏重填一次序號,否則中間有刪除過,序號會不連續。
DataSet.First;
while nto DataSet.EOF do
begin
DataSet.FieldByName('ItemNo').AsInteger := DataSet.RecNo;
DataSet.Next;
end;
DataSet.First;

tuga
高階會員


發表:16
回覆:105
積分:104
註冊:2002-07-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2014-02-20 16:41:13 IP:1.34.xxx.xxx 訂閱
寫一個函數, 不會花很多時間
// 取得下一個 key
function KeyNext(TableName, FieldName : string):integer;
var q : TFDQuery ;
begin
q := TFDQuery.Create(application);
q.Connection := dm.fdCon;
q.SQL.Text :=
'select max( ' FieldName ') as max_key from ' (TableName) ;
q.Open;
if q.FieldByName('max_key').IsNull then
result := 1
else
result := q.FieldByName('max_key').AsInteger 1 ;
q.Close;
q.Free;
end;

如果你沒有用後端資料庫, Index 偶爾會壞, 資料筆越多, 壞的機率越高
如果你有用後端資料庫, 不適合用 TTable
系統時間:2017-10-19 18:59:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!