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

拜託!有誰可以教我如可寫自動編號的程式碼。

尚未結案
hidylan
一般會員


發表:14
回覆:17
積分:6
註冊:2004-12-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-15 02:09:28 IP:220.143.xxx.xxx 未訂閱
我是一位初學者 ,想要在Delphi的其中一個form做為新增資料的設計,也就是開啟這個form時,我的編號欄位為自動給我以年,月,日和序號的編號,例如05011501,我也在討論區找到一些關於這些的資料,但都看不太懂,程式也沒有寫很多的註解,也不知要如何運用到自己的程式上,只知道要先連到資料庫,找出編號最大值,再加1,希望有誰能了解這程式的人能幫幫我,告訴要如何去寫,也希望能加上註解這樣我也能了解為什麼要這麼寫,而我的連線元件用的是ADO,資料庫用的MSSQL,另外編號這欄位值必需要設計成int或是varchar才適合?謝謝了
likush
高階會員


發表:5
回覆:235
積分:103
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-15 15:54:20 IP:220.134.xxx.xxx 未訂閱
 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-01-15 15:59:07 IP:220.134.xxx.xxx 未訂閱
抱歉 應是
 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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-01-15 17:26:14 IP:203.204.xxx.xxx 未訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-01-15 17:47:15 IP:203.204.xxx.xxx 未訂閱
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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-01-15 22:04:04 IP:218.175.xxx.xxx 未訂閱
感謝二位朋友的的幫忙使我能學到更多,但我只執行likush所寫的程式,是可以順執行,但Edit1卻顯不出編號,可能是轉換出了問題吧,我會再好好研究二位所寫的不同之處,專案到目前還有很多問題要去解決,而且有些問題還真的不知去如何表達,讓別人了解我的問題所在,雖然很累,但看著自己寫的程式能慢慢的出來,心中的感覺也就不一樣了。
hidylan
一般會員


發表:14
回覆:17
積分:6
註冊:2004-12-20

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-01-15 22:32:53 IP:218.175.xxx.xxx 未訂閱
抱歉再問一下Format('%.2d', [tmpValue]),中的'%.2d'是什麼意思
likush
高階會員


發表:5
回覆:235
積分:103
註冊:2002-10-08

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-01-16 17:26:49 IP:220.134.xxx.xxx 未訂閱
抱歉一時沒注意 應是 Select (Max(No) 1) As MaxNo From TableName Where SubString(no,1,6) =' FormatDateTime('YYMMDD', Now)才是 ========================= 讀萬卷書~不如來K.TOP走一遭 =========================
huangchin
一般會員


發表:3
回覆:18
積分:4
註冊:2002-12-24

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-01-16 21:37:24 IP:203.204.xxx.xxx 未訂閱
因為我是使用varchar來當做儲存格的格式,當用select MAX(...)+1 ...之後, 開頭的"0"會消失,所以我才直接以取後2碼的方式取出目前最大的序號,但同樣的問題,在+1之後如果是<10的時候,前頭的"0"都會消失,所以才用format這個指令做一下填0的動作....^^ 至於%.2d,是format在轉換輸出字串格式的參數,表示一共輸出2個字元,若轉換後不足2個數字字元時,左邊的字會自動補0,我說明的可能不是很正確,請參照 Delphi的Help說明....^^ *資料庫是SQL2000
系統時間:2024-11-25 4:38:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!