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


ぴかちゅう  2009-06-08 14:49:53  No: 34649  IP: 192.*.*.*

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-08 16:46:41  No: 34650  IP: 192.*.*.*

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

編集 削除
ふぃーるどは?  2009-06-08 17:16:49  No: 34651  IP: 192.*.*.*

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

編集 削除
HOta  2009-06-08 22:03:21  No: 34652  IP: 192.*.*.*

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

編集 削除
ぴか  2009-06-09 10:21:27  No: 34653  IP: 192.*.*.*

フィールドは文字です。

編集 削除
a  2009-06-09 10:36:46  No: 34654  IP: 192.*.*.*

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

とか

編集 削除
ぴかちゅう  2009-06-09 12:08:47  No: 34655  IP: 192.*.*.*

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

編集 削除
ところで  2009-06-09 13:31:38  No: 34656  IP: 192.*.*.*

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

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

編集 削除
それなら  2009-06-09 13:37:40  No: 34657  IP: 192.*.*.*

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

編集 削除
ぴかちゅう  2009-06-09 14:30:44  No: 34658  IP: 192.*.*.*

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

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

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

編集 削除
他力本願  2009-06-09 15:12:18  No: 34659  IP: 192.*.*.*

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

編集 削除
ところで  2009-06-09 17:42:57  No: 34660  IP: 192.*.*.*

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

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

編集 削除
a  2009-06-09 19:44:08  No: 34661  IP: 192.*.*.*

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

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

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

編集 削除
a  2009-06-10 00:16:53  No: 34662  IP: 192.*.*.*

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

編集 削除
HOta  2009-06-10 06:25:38  No: 34663  IP: 192.*.*.*

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

編集 削除