2017-05-02 26 views
0

初めてこのようなことをしていて、役に立つ情報を見つけるのは非常に難しいようです。可視のテーブルとしてADOレコードセットを開く

私がしたいこと: 選択クエリをMySQLデータベースに渡し、その結果をテーブルに表示します。

私はこれまで、今ではそれを持っている:私は、フォーム上のボタンがあり、クリックされたときに、次は私がRs.Open strSQL, Cn, adOpenDynamic, adLockReadOnlyは、ADOレコードセットを返し、私はそれがVBAを使用して物事を行うことができることを知っている

Option Compare Database 

Sub RunPassThrough(strSQL As String) 

Dim ConnectionString As String 
Dim Server As String 
Dim User As String 
Dim Pwd As String 
Dim DatabaseName As String 
Dim Cn As ADODB.Connection 
Dim Rs As ADODB.Recordset 


' Server Hostname (or IP) 
Server = "192.168.178.10" 

User = "user" 
Pwd = "mypass" 

DatabaseName = "myDB" 

ConnectionString = "Provider=MSDASQL;Driver={MYSQL ODBC 5.1 DRIVER};" & _ 
     "Server=" & Server & ";Database=" & DatabaseName 

Set Cn = New ADODB.Connection 
Cn.CursorLocation = adUseClient 
Cn.Mode = adModeShareDenyNone 
Cn.Open ConnectionString, User, Pwd 

Set Rs = New ADODB.Recordset 


Rs.Open strSQL, Cn, adOpenDynamic, adLockReadOnly 
'Set Rs = Cn.Execute("select * from SurveyResults limit 10;") 





End Sub 

Private Sub Befehl0_Click() 

Dim SQL As String 

SQL = "select * from SurveyResults limit 10;" 

RunPassThrough (SQL) 


End Sub 

起こりますしかし、私が望むのは、テーブルにユーザーに設定されたその記録を表示することだけです。

(ユーザーが見ることができることをテーブルとして「RS」、)のOpenRecordset

ような何か誰かが...私はおかしくなりそうだ右方向へ

+0

「通常の」パススルークエリを作成し、実行時にSQL(および必要に応じてConnection)を設定してそのクエリを開くのはなぜですか? – Andre

+0

正直言って私の最初の試みでしたが、どちらもうまく動作しませんでした GUIを使ってパススルーを作成し、それを使ってsqlを変更するのは何ですか? 'CurrentDb.QueryDefs(" myquery " )SQL = "select * from SurveyResults limit 10;" 'DoCmd.OpenQuery(" myquery ")' しかし、これは本当に素晴らしい解決策ではありません。なぜなら、ユーザーはsqlを作成して実行するフォームを記入する必要があるからです。それと彼は同時にさまざまなクエリを開くことができる必要があります –

+0

それは動作するはずです、ここに例があります:http://stackoverflow.com/a/10988389/3820271 - 私は別の方法があるとは思わない開こうとする各クエリーに対して実際のquerydefオブジェクトを持つことができます。 - これは基本的に同じ質問です:http://stackoverflow.com/questions/23664401/access-form-on-click-event-create-pass-through-query – Andre

答えて

1

を私をポイントしてくださいすることができ、私はそれを考え出しました。私の問題は、単にReturnRecordsプロパティがデフォルトでfalseに設定されているということでした。

これは今動作しますので、誰かがそれを必要とする場合は、私は答えを投稿しています。

Sub RunPassThrough(strSQL As String) 

Dim Server As String 
Dim User As String 
Dim Pwd As String 
Dim DatabaseName As String 
Dim qdfPassThrough As DAO.QueryDef, MyDB As Database 
Dim strConnect As String 


' Server Hostname (or IP) 
Server = "192.168.178.10" 

User = "user" 
Pwd = "mypass" 

DatabaseName = "database" 



For Each qdf In CurrentDb.QueryDefs 
If qdf.Name = "PassQuery" Then 
    CurrentDb.QueryDefs.Delete "PassQuery" 
    Exit For 
End If 
Next 

    strConnect = "ODBC;DRIVER={MYSQL ODBC 5.1 DRIVER};SERVER=" & Server & ";DATABASE=" & DatabaseName & ";Uid=" & User & ";Pwd=" & Pwd & ";" 

    Set MyDB = CurrentDb() 

    Set qdfPassThrough = MyDB.CreateQueryDef("PassQuery") 


    qdfPassThrough.Connect = strConnect 
    qdfPassThrough.SQL = strSQL 
    qdfPassThrough.Close 

    Application.RefreshDatabaseWindow 
    MyDB.QueryDefs("PassQuery").ReturnsRecords = True 

    DoCmd.OpenQuery "PassQuery", acViewNormal, acReadOnly 
    DoCmd.Maximize 


End Sub 
関連する問題