11

最近、Access DB バックエンドを作成し、SQL Server に移行しました。VBA コードを使用して、SQL Server バックエンドへの接続を作成し、パススルー クエリを実行して結果を VB レコードセットに保存しようとしています。これを試してみると、クエリが通過していません。

Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strConnect As String

strConnect = "DRIVER=SQL Server;SERVER=55.55.55.55 SQLExpress;UID=UserName;PWD=Password"

Set db = OpenDatabase("DBName", dbDriverNoPrompt, True, strConnect)

Set rs = db.OpenRecordset("SELECT GetDate() AS qryTest", dbOpenDynaset)

MsgBox rs!qryTest

rs.Close
db.Close
Set rs = Nothing
Set db = Nothing

私が得ている問題は、完全に適切なGetDate()SQL Server 関数がランタイム エラー 3085「ユーザー定義関数 'GetDate' in expression」を返していることです。この同じクエリを MS-Access Query Builder で VBA コードの外部でパススルーとして作成すると、正常に実行され、サーバーの日付と時刻が返されますが、コードでのみ適切にパススルーされません。

4

3 に答える 3

23

QueryDefオブジェクトを使用してパススルー クエリを作成し.OpenRecordset、QueryDef のメソッドを使用して Recordset を開く必要があります。次のコードは私にとってはうまくいきます:

Dim qdf As DAO.QueryDef, rst As DAO.Recordset
Set qdf = CurrentDb.CreateQueryDef("")
qdf.Connect = "ODBC;Driver=SQL Server;Server=.\SQLEXPRESS;Trusted_Connection=Yes;"
qdf.SQL = "SELECT GetDate() AS qryTest"
qdf.ReturnsRecords = True
Set rst = qdf.OpenRecordset
Debug.Print rst!qryTest
rst.Close
Set rst = Nothing
Set qdf = Nothing
于 2013-06-21T18:42:47.517 に答える
0

パススルー クエリを使用してローカル テーブルに INSERT INTO を実行することはできません。結果のクエリ (Querydef で生成したもの) を INSERT のソースとして使用します。

于 2015-07-19T13:19:11.800 に答える
0

ゴードさん、渡されたパラメーターと挿入ステートメントを使用して proc を実行するためのコードの mod を提供していただけますか? 私はそれに取り組んできましたが、それを打ち負かすことはできませんでした。基本コードが機能しているので、サーバーと正しく通信していますが、OpenRecordset が正しく取得されていません。

基本的に、私は 3 段階のプロセスを実行しています。SP の実行の開始をログに記録し、SP を実行し、終了をログに記録します。これらは私のSQL文字列です:

    beginsql = " INSERT INTO [dbo_zSprocExecuteLog]" _
        & " values (sysdatetime(), 'uspGradePromotionDistrict', " _
        & [SeekerUserID] & ", 'B', '(" & [ReportDistrict] & ")';"

    sqlstring = " EXEC uspGradePromotionDistrict" _
        & " @District = '" & [ReportDistrict] & "';"

    endsql = " INSERT INTO [dbo_zSprocExecuteLog]" _
        & " values (sysdatetime(), 'uspGradePromotionDistrict', " _
        & [SeekerUserID] & ", 'E', '(" & [ReportDistrict] & ")';"

私はあなたの意見に感謝します。これは私を夢中にさせています。また、Access/SQL プログラミングに関する良い本をお勧めできますか? 私は SQL Server 側で多くの経験を積んでいますが、私の Access Fu は少し弱いです。

于 2015-04-09T20:32:50.747 に答える