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;
SQLの部分は、よくわからないのですが、
もし、Edit7.Textが、'2'とか'3'とかなら、
Edit7.Text:=Format('%.5d',[StrToInt(Edit7.Text)]);
で、5桁になります。
データベースから5桁で取得するというより、
取得後、5桁にするかたちですが。
フィールドが数値だったら、'00001'とかは無理。 (1-999999)
文字だったら '00001' OK。
フィールドが数値だったら、
Edit7.Text := format('%.5d',[ADOQuery2.FieldByName('コード').asinteger]);
で'00001'の形になります。
フィールドは文字です。
SQLServerだと
SELECT RIGHT('00000' + RTRIM(CONVERT(INT, MAX(ISNULL(A, 0)) + 1)), 5) AS Expr1
FROM Table1
とか
>>aさん
うまく取得できません。
やはり最初以降は2だけになってしまします。
2とか3とかになるコードが書いてないけど、どうやってるの?
DBGridに表示させて?
それとも、Editに表示?
まさか、Format('%5.5d', [順番]) で、00001, 00002, 00003... が
欲しいという質問じゃないだろうね?
>フィールドは文字です。
自分で整形したら?
RightStr('00000'+ ADOQuery2.FieldByName('コード').AsString;, 5);
>>2とか3とかになるコードが書いてないけど、どうやってるの?
DBGridに表示させて?
それとも、Editに表示?
Editに表示させます。
>>まさか、Format('%5.5d', [順番]) で、00001, 00002, 00003... が
欲しいという質問じゃないだろうね?
0001というデータの次に登録するデータのコードは00002になるようにしたいんです。
>>自分で整形したら?
RightStr('00000'+ ADOQuery2.FieldByName('コード').AsString;, 5);
RightStrがエラーになります。
>RightStrがエラーになります。
RightStrがどのユニットで宣言されているか、
そのくらいは自分でヘルプを見なさい。
データベースに入っている値を参照して整形するのか
新規レコードの登録時に整形したいのか
どっちなの?
あと、努力した成果を見せること
>うまく取得できません。
>やはり最初以降は2だけになってしまします。
Enterprise Manageで提示したSQLを実行してみましたかうまく取得
出来ているようでした。
問題は別の所という事はないでしょうか?(もしくはデータが私の想定
しているのと違うとか)
例えば
ADOQuery2.SQL.Text := 'SELECT RIGHT('00003',5) FROM TBL_アドレス帳';
にして実行しても"00003"が取得できませんか?
更に
ADOQuery2.SQL.Text := 'SELECT RIGHT('A0003',5) FROM TBL_アドレス帳';
ではどうですか?
選択が出来ていないのでしょうか?それとも、表示が出来ないのでしょうか?
レコードは有りますか?
ツイート | ![]() |