おはようございます。
いつも、お世話になっています。
早速質問なんですけど、
テーブル名「A」
フィールド名「ID」
この「ID」のMAX値+1を簡単に取得するにはどうすればよいのですか?
MoveLastメソッド等は、存在しないみたいなんですけど、どうやって自動採番をすればよいのですか?
どうぞ宜しくお願いします。
Paradoxなら、カウンタ型を使えば自動採番されます。
SQLで最大値を得るなら、
SELECT MAX(ID) FROM テーブル名
とすれば取れます。
MoveLastメソッドは、TDataSet.Lastメソッドのことでしょうか。
にしのさん。ありがとうございます。
やりたいことは、
VBだとこんな感じです。
これは、ACCESSのデータベースに接続して、
IDのMAX値を表示しています。
Private Sub Command1_Click()
Dim OleAccess As Object
Dim OleWS As Object
Dim OleDB As Object
Dim OleRst As Object
Dim sSQL As String
Dim i As Integer
Dim MAXID As Integer
'Accessデータベースへの接続
Set OleAccess = CreateObject("Access.Application")
Set OleWS = OleAccess.DBEngine.Workspaces(0)
Set OleDB = OleWS.OpenDatabase(StrMdbDir)
sSQL = "SELECT MAX(ID) AS MAXID FROM テーブル1;"
Set OleRst = OleDB.OpenRecordset(sSQL)
If Not OleRst.EOF Then
MAXID = OleRst.Fields("ID").Value + 1
MsgBox MAXID
End If
OleRst.Close
'Access開放
Set OleRst = Nothing
Set OleDB = Nothing
Set OleWS = Nothing
Set OleAccess = Nothing
Exit Sub
End Sub
これを、Paradox Delphiでやるにはどうしたらよいのですか?
ちなみにIDは、こちらで、任意につけたいと思っています。
それは、Aの場合9000XXX
Bの場合8000XXX
という風にしたいからです。
宜しくお願いいたします。
こんな感じでしょうか。
Query1は、TQueryコンポーネントです。
procedure TForm1.Button1Click(Sender: TObject);
var
MaxID: integer;
begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('SELECT MAX(ID) AS MAXID FROM TESTDB');
Query1.Open;
if Query1.RecordCount > 0 then
begin
MaxID := Query1.FieldByName('MAXID').AsInteger + 1;
ShowMessage(IntToStr(MaxID));
end;
end;
ありがとうございました。
あと、ひとつ質問なんですが、
begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('SELECT MAX(ID) AS MAXID FROM TESTDB');
Query1.Open;
End
と
begin
Query1.Close;
Query1.SQL.Text:= 'SELECT MAX(ID) AS MAXID FROM TESTDB';
Query1.Open;
End
とは、違うのですか?
違う場合、どう使い分けるのですか?
宜しくお願いいたします.
同じですよ。
SQLプロパティはTStringsなので、どんな方法でも同じです。
TStringListのオブジェクトを作成して、Assignする方法でもOKです。
# 遠回りですが。
Addを使ったのはヘルプにあった(コピーした)からでした^^;
にしのさん。いつもありがとうございます。
もう少し、詳しくなって、今度は他の人に教えられるぐらいに
成長して見せます。
ツイート | ![]() |