2016-05-15 2 views
0

テーブルと、特定のフォームの現在のOrderbyプロパティに従って並べ替えられたレコードセットを作成しようとしています。 Orderbyプロパティはユーザーが変更すると変更されるため、Orderbyプロパティで最初のフィールドのみを取得する(1つ以上のフィールドを使用して順序付けることができます)、順序付きレコードセットを作成するために使用します。フィールドの名前getField関数から与えられたものは正しく与えられていますが、私は"Set rsAll = ..."の構文が間違っていると想定しています。これはコードが停止する原因と考えられます。ORDER BYでレコードセットをインスタンス化するVBAにアクセス

順序通りにレコードセットを作成する。

Dim rsAll As DAO.Recordset 
If Len(Forms("All Patient Sub").OrderBy) > 0 Then 
Set rsAll = CurrentDb.OpenRecordset("SELECT * FROM [All Patient Info] ORDER BY " & getField(Forms("All Patient Sub").OrderBy)) 'code stops here 
Else 
Set rsAll = CurrentDb.OpenRecordset("All Patient Info") 
End If 

私は本当にあなたのコードに従わない

Public Function getField(ByVal sorter As String) As String 
Debug.Print "Started" 
'i = 21 hence [All Patient Info].[ is skipped and starts from the field's name 
    For i = 21 To Len(sorter) 
     If Mid(sorter, i, 1) = "]" Then 
      getField = Mid(sorter, 21, i - 21) 
      Exit For 
     End If 
    Next i 
Debug.Print getField 
End Function 
+1

*「コードはここで停止する」*と言うときは、エラーがあるとみなします。もしそうなら、エラーメッセージは何を言いますか?あなたがエラー以外の何かを意味したら、何? 'Debug.Print" SELECT * FROM [すべての患者情報] ORDER BY "&getField(Forms(" All Patient Sub ")。OrderBy))' – HansUp

+0

また、あなたが何を示しているのか分かりません。 Debug.Print getField'の出力? – Andre

+0

あいまいなボキャブラリを残念に思っています。エラーが発生しました。 「Debug.Print getField」の出力が何も表示されず、 'Debug.Print」を試しました。SELECT * FROM [すべての患者情報] ORDER BY"&getField(Forms( "All Patient Sub")。OrderBy)) '時々、そのDOBを言うことができます。 – Kozero

答えて

0

フォームに属するORDERBYプロパティからフィールド名を取得する機能。しかし、あなたがどれだけこれについて、[並べ替えの最初の列が欲しいので、:

'this returns either " ORDER BY [column name]" or an empty string, if there is no column name to order by 
public function OrderByClause(propValue as string) as string 
    dim cols as string() 

    if propValue = "" then 
     OrderByClause = "" 
    else 
     cols = split(propValue, ",") 
     dim junk as string: junk = cols(0) 
     if instr(junk, ".") > 0 then 
      junk = mid(junk, instr(junk, ".") + 1) 
     end if 
     OrderByClause = " ORDER BY " & junk 
    end if 
end function 

その後、フォームに:この機能はモジュールに置かれる必要がある

Dim rsAll As DAO.Recordset 
Dim src as string 
src = OrderByClause(Forms("All Patient Sub").OrderBy & "") 
src = "SELECT * FROM [All Patient Info]" & src 

Set rsAll = CurrentDb.OpenRecordset(src) 

ので、 OrderByClause関数は常に値を返します。プロパティが設定されているかどうかに関係なく、フォームで呼び出すことができます。呼び出しは... & ""を使用して、プロパティーが実際にnullの場合にエラーを防止します。

関連する問題