拜託!有誰可以教我如可寫自動編號的程式碼。 |
尚未結案
|
hidylan
一般會員 發表:14 回覆:17 積分:6 註冊:2004-12-20 發送簡訊給我 |
我是一位初學者 ,想要在Delphi的其中一個form做為新增資料的設計,也就是開啟這個form時,我的編號欄位為自動給我以年,月,日和序號的編號,例如05011501,我也在討論區找到一些關於這些的資料,但都看不太懂,程式也沒有寫很多的註解,也不知要如何運用到自己的程式上,只知道要先連到資料庫,找出編號最大值,再加1,希望有誰能了解這程式的人能幫幫我,告訴要如何去寫,也希望能加上註解這樣我也能了解為什麼要這麼寫,而我的連線元件用的是ADO,資料庫用的MSSQL,另外編號這欄位值必需要設計成int或是varchar才適合?謝謝了
|
likush
高階會員 發表:5 回覆:235 積分:103 註冊:2002-10-08 發送簡訊給我 |
ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('Select (Max(No) 1) As MaxNo From TableName'); ADOQuery1.Open; Edit1.Text := FormatDateTime('YYMMDD', Now) AdoQuery.FieldByName('MaxNo').AsString;========================= 讀萬卷書~不如來K.TOP走一遭 ========================= |
likush
高階會員 發表:5 回覆:235 積分:103 註冊:2002-10-08 發送簡訊給我 |
抱歉 應是
ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('Select (Max(No) 1) As MaxNo From TableName Where SubString(no,7,2) =' FormatDateTime('YYMMDD', Now)); ADOQuery1.Open; If AdoQuery.Recordcount <> 0 Then Edit1.Text := AdoQuery.FieldByName('MaxNo').AsString Else Edit1.Text := FormatDateTime('YYMMDD', Now) '01';========================= 讀萬卷書~不如來K.TOP走一遭 ========================= |
huangchin
一般會員 發表:3 回覆:18 積分:4 註冊:2002-12-24 發送簡訊給我 |
procedure TForm1.Button1Click(Sender: TObject);
var
tmpDate: String;
tmpValue: Integer;
begin
tmpDate := FormatDateTime('YYMMDD', Now);
ADOConnection1.Open;
ADOQuery1.SQL.Text := 'SELECT MAX(SUBSTRING(serno, 7, 2)) 1 AS MaxNo FROM table1 WHERE SUBSTRING(serno, 0, 7)=''' tmpDate '''';
ADOQuery1.Open; if ADOQuery1.RecordCount = 1 then
begin
tmpValue := StrToInt(ADOQuery1['MaxNo']);
Edit1.Text := FormatDateTime('YYMMDD', Now) Format('%.2d', [tmpValue]);
end else
Edit1.Text := tmpDate '01';
end;
|
huangchin
一般會員 發表:3 回覆:18 積分:4 註冊:2002-12-24 發送簡訊給我 |
Sorry....
procedure TForm1.Button1Click(Sender: TObject); var tmpDate: String; tmpValue: Integer; begin tmpDate := FormatDateTime('YYMMDD', Now); ADOConnection1.Open; ADOQuery1.SQL.Text := 'SELECT MAX(SUBSTRING(serno, 7, 2)) 1 AS MaxNo FROM table1 ' 'WHERE SUBSTRING(serno, 1, 6)=''' tmpDate ''''; ADOQuery1.Open; if ADOQuery1['MaxNo'] <> null then begin tmpValue := StrToInt(ADOQuery1['MaxNo']); Edit1.Text := FormatDateTime('YYMMDD', Now) Format('%.2d', [tmpValue]); end else Edit1.Text := tmpDate '01'; end; |
hidylan
一般會員 發表:14 回覆:17 積分:6 註冊:2004-12-20 發送簡訊給我 |
|
hidylan
一般會員 發表:14 回覆:17 積分:6 註冊:2004-12-20 發送簡訊給我 |
|
likush
高階會員 發表:5 回覆:235 積分:103 註冊:2002-10-08 發送簡訊給我 |
|
huangchin
一般會員 發表:3 回覆:18 積分:4 註冊:2002-12-24 發送簡訊給我 |
因為我是使用varchar來當做儲存格的格式,當用select MAX(...)+1 ...之後,
開頭的"0"會消失,所以我才直接以取後2碼的方式取出目前最大的序號,但同樣的問題,在+1之後如果是<10的時候,前頭的"0"都會消失,所以才用format這個指令做一下填0的動作....^^ 至於%.2d,是format在轉換輸出字串格式的參數,表示一共輸出2個字元,若轉換後不足2個數字字元時,左邊的字會自動補0,我說明的可能不是很正確,請參照
Delphi的Help說明....^^ *資料庫是SQL2000
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |