自動で連番でコードを取得させるには


ぴかちゅう  2009-06-08 23:49:53  No: 34649

Delphi7で開発しています。
コードを5桁で連番に自動取得させたいのですが、下のコードだと、最初は00001になりますが、あとは2とか3とかになってしまします。
どうすれば5桁で取得できますか??

procedure TForm1.FormCreate(Sender: TObject);
begin
  ADOQuery2.SQL.Text := 'SELECT(CONVERT(INT,MAX(ISNULL(コード,0)) + 1))AS コード FROM TBL_アドレス帳';
  ADOQuery2.Open;
  Edit7.Text := ADOQuery2.FieldByName('コード').AsString;
  if Edit7.Text = '' then
  Edit7.Text := '00001';

end;


ahsan  2009-06-09 01:46:41  No: 34650

SQLの部分は、よくわからないのですが、
もし、Edit7.Textが、'2'とか'3'とかなら、
Edit7.Text:=Format('%.5d',[StrToInt(Edit7.Text)]);
で、5桁になります。
データベースから5桁で取得するというより、
取得後、5桁にするかたちですが。


ふぃーるどは?  2009-06-09 02:16:49  No: 34651

フィールドが数値だったら、'00001'とかは無理。 (1-999999)
文字だったら '00001' OK。


HOta  2009-06-09 07:03:21  No: 34652

フィールドが数値だったら、
Edit7.Text := format('%.5d',[ADOQuery2.FieldByName('コード').asinteger]);
で'00001'の形になります。


ぴか  2009-06-09 19:21:27  No: 34653

フィールドは文字です。


a  2009-06-09 19:36:46  No: 34654

SQLServerだと
SELECT RIGHT('00000' + RTRIM(CONVERT(INT, MAX(ISNULL(A, 0)) + 1)), 5) AS Expr1
FROM   Table1

とか


ぴかちゅう  2009-06-09 21:08:47  No: 34655

>>aさん
うまく取得できません。
やはり最初以降は2だけになってしまします。


ところで  2009-06-09 22:31:38  No: 34656

2とか3とかになるコードが書いてないけど、どうやってるの?
DBGridに表示させて?
それとも、Editに表示?

まさか、Format('%5.5d', [順番]) で、00001, 00002, 00003... が
欲しいという質問じゃないだろうね?


それなら  2009-06-09 22:37:40  No: 34657

>フィールドは文字です。
自分で整形したら?
RightStr('00000'+ ADOQuery2.FieldByName('コード').AsString;, 5);


ぴかちゅう  2009-06-09 23:30:44  No: 34658

>>2とか3とかになるコードが書いてないけど、どうやってるの?
DBGridに表示させて?
それとも、Editに表示?
Editに表示させます。

>>まさか、Format('%5.5d', [順番]) で、00001, 00002, 00003... が
欲しいという質問じゃないだろうね?
0001というデータの次に登録するデータのコードは00002になるようにしたいんです。

>>自分で整形したら?
RightStr('00000'+ ADOQuery2.FieldByName('コード').AsString;, 5);
RightStrがエラーになります。


他力本願  2009-06-10 00:12:18  No: 34659

>RightStrがエラーになります。
RightStrがどのユニットで宣言されているか、
そのくらいは自分でヘルプを見なさい。


ところで  2009-06-10 02:42:57  No: 34660

データベースに入っている値を参照して整形するのか
新規レコードの登録時に整形したいのか
どっちなの?

あと、努力した成果を見せること


a  2009-06-10 04:44:08  No: 34661

>うまく取得できません。
>やはり最初以降は2だけになってしまします。

Enterprise Manageで提示したSQLを実行してみましたかうまく取得
出来ているようでした。
問題は別の所という事はないでしょうか?(もしくはデータが私の想定
しているのと違うとか)

例えば
ADOQuery2.SQL.Text := 'SELECT RIGHT('00003',5) FROM TBL_アドレス帳';
にして実行しても"00003"が取得できませんか?


a  2009-06-10 09:16:53  No: 34662

更に
ADOQuery2.SQL.Text := 'SELECT RIGHT('A0003',5) FROM TBL_アドレス帳';
ではどうですか?


HOta  2009-06-10 15:25:38  No: 34663

選択が出来ていないのでしょうか?それとも、表示が出来ないのでしょうか?
レコードは有りますか?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加