MoveLast 関数

解決


マキ  2002-12-16 19:16:18  No: 2346

おはようございます。
いつも、お世話になっています。

早速質問なんですけど、
テーブル名「A」
フィールド名「ID」
この「ID」のMAX値+1を簡単に取得するにはどうすればよいのですか?

MoveLastメソッド等は、存在しないみたいなんですけど、どうやって自動採番をすればよいのですか?

どうぞ宜しくお願いします。


にしの  2002-12-16 20:25:36  No: 2347

Paradoxなら、カウンタ型を使えば自動採番されます。
SQLで最大値を得るなら、
SELECT MAX(ID) FROM テーブル名
とすれば取れます。

MoveLastメソッドは、TDataSet.Lastメソッドのことでしょうか。


マキ  2002-12-17 20:56:17  No: 2348

にしのさん。ありがとうございます。

やりたいことは、
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

という風にしたいからです。

宜しくお願いいたします。


にしの  2002-12-17 22:02:42  No: 2349

こんな感じでしょうか。
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;


マキ  2002-12-17 23:43:07  No: 2350

ありがとうございました。

あと、ひとつ質問なんですが、
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

とは、違うのですか?
違う場合、どう使い分けるのですか?

宜しくお願いいたします.


にしの  2002-12-17 23:50:06  No: 2351

同じですよ。
SQLプロパティはTStringsなので、どんな方法でも同じです。
TStringListのオブジェクトを作成して、Assignする方法でもOKです。
# 遠回りですが。
Addを使ったのはヘルプにあった(コピーした)からでした^^;


マキ  2002-12-19 21:56:47  No: 2352

にしのさん。いつもありがとうございます。

もう少し、詳しくなって、今度は他の人に教えられるぐらいに
成長して見せます。


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








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