MS AccessでSQLを使用してテーブルからデータを取得していますが、クエリを実行するかVBAを使用するかによって、同じクエリに対して2つの異なる結果が得られます。SQLクエリが2つの異なる結果を返すのはなぜですか?
単純に、テーブルの単一の列から最大値を求めます。問題は、私は、列のデータ型がテキストだと思いますか?表は主に、 'xx-xxxxx'のような他のフォーマットが散在している6桁の数字で構成されています。私はオーバーオフ頭
Private Function Create() As String
Dim rs As New ADODB.Recordset
Dim cn As New ADODB.Connection
Dim strSQL As String
Set cn = CurrentProject.Connection
cn.CursorLocation = adUseClient
strSQL = "SELECT Max(par.PN) AS PN FROM par WHERE ((PN Between CLng('100000') And CLng('999999')) And (PN Not Like '##-#####'));"
Set rs = cn.Execute(strSQL)
If (rs.RecordCount > 0) Then
'Create = rs("PN")
Debug.Print rs("PN")
End If
End Function
結果はので、私の最初の10から0000ががあるクエリが間違っているということです。
まず、私はVBAでこれを行うことができるようにする必要があるので、私はこれを持っています
SELECT Max(par.PN) AS PN
FROM par
WHERE ((PN Between CLng('100000') And CLng('999999')) And (PN Not Like '##-#####'));
これを実行すると745864が返されます。だから私はここに何か不調があるのを見ることができます。
今、私を打つ他の事は、私は私がWHERE ((PN Between CLng('100000') And CLng('999999'))
が十分であったであろうけれどもだろうとして、6桁の番号を取得するためにAnd (PN Not Like '##-#####')
を必要としなければならないとは思わないことです...
私が持っていますこれは、数値がテキストとして保存されているためです。このため、関数間の関数はテキストでは機能しません。これが本当であれば、CLng関数がこのために正常に変換されているはずです動作するクエリ。
いずれにしても、vbaを使用して最新の6桁の番号を取得する必要があります。問題がどこにあるのか誰にでも光を当てることができますか?
おかげで
順序:1,2,3、 4,5,10,111,123,345,4000など。テキストとしての数字の順序:1,10,11,111,2 、23,3,4,5,8,89など最大とテキストとして格納されている数字はうまくいきません...アクセスはこれを知っていますが、とにかく間違ったことをやりたいです。 intに変換して最大値を見つける – Twelfth
わかりませんが、クエリビルダとADODBの間でワイルドカード文字が異なる可能性がありますか?私はあなたがアンダースコアを使用しなければならないと思うかもしれません、そうでなければ 'NOT LIKE '% - %''を試してください。 – JohnRC