2016-05-20 17 views
0

私は関連するフィールドEFTRecID、EFTRecIDNum、およびCreatedByを持つAccessテーブルを持っています。 EFTRecIDNumは自動番号フィールドで、EFTRecIDは "CE" & EFTRedIDNumの必要なフォーマットを連結します。私は現在のユーザーによって作成されたEFTRecIDフィールドで最高値を返そうとしています。これを行うには、Max(EFTRecIDNum)WHERE Created = my nameというサブクエリを実行しようとしています。しかし、maxを返す代わりに、私の名前ですべての値を返しています。私はEFTRecIDNumフィールドをフォーマットするためにformatオプションを使うことができますが、CE456のフォーマットで検索できる必要があります。照会で最大値の代わりに複数の行が返される

TL; DR:クエリは、自分の名前で最大ではなく、自分の名前ですべてのレコードを返します。使用

Public Sub DownloadMyRecords() 

    Dim intI As Integer 'Used for looping in a variety of locations 

    strSQL = "SELECT EFTRecID FROM tblEFTRec WHERE (SELECT MAX(EFTRecIDNum) FROM tblEFTRec WHERE CreatedBy = '" & Application.UserName & "')" 

    Set cnn = New ADODB.Connection 

    With cnn 
     .Provider = "Microsoft.ACE.OLEDB.12.0;Data Source=" & dbLocation & "\" & dbName & ";Jet OLEDB:Database Password=" & DBPWord 
     .Open dbLocation & "\" & dbName 
    End With 

    Debug.Print strSQL 

    Set rst = New ADODB.Recordset 
    rst.CursorLocation = adUseServer 
    rst.Open Source:=strSQL, ActiveConnection:=cnn, _ 
      CursorType:=adOpenForwardOnly, LockType:=adLockOptimistic, _ 
      Options:=adCmdText 

    Debug.Print (rst.GetString) 

    rst.Close 
    cnn.Close 
    Set rst = Nothing 
    Set cnn = Nothing 

End Sub 
+2

を使用すると、「WHERE」句は、それだけで一つのレコードを返しません...それはちょうど「フィルタの中には何の最大を選択どんなに"結果セットの場合(つまり、「EFTRecIDNum」が最も大きい番号を返すと、「すべてのレコードを返します」)、1つの結果が必要な場合は、以下の回答を参照するか、「SELECT TOP 1 [same]」を使用します。唯一の値を返す必要がある場合、ステートメントはまだ良いではない –

+0

@説明する時間を取ってくれてありがとうございます。 – jcarroll

答えて

2

代わりに、このSQL文を試してみてください。

strSQL = "SELECT EFTRecID 
FROM tblEFTRec 
WHERE EFTRecIDNum = (SELECT MAX(EFTRecIDNum) FROM tblEFTRec WHERE CreatedBy = '" & Application.UserName & "')" 
1

試してみてください。

"SELECT EFTRecID FROM tblEFTRec 
WHERE EFTRecIDNum = (SELECT MAX(EFTRecIDNum) FROM tblEFTRec 
    WHERE CreatedBy = '" & Application.UserName & "')" 

は動作しません、次の理由がありますか?

"SELECT MAX(EFTRecID) FROM tblEFTRec 
WHERE CreatedBy = '" & Application.UserName & "'" 
+0

ありがとうJJ32、最初のオプション完璧に働いた。十分な時間が経過すると正しいとマークします。 EFTRecIDは英数字で、EFTRecIDNumは数値部分のみであるため、2番目の式は正しく機能しません。 – jcarroll

関連する問題