アクティビティ テーブルのコピーを SQL Server Express テーブルと Access の実稼働バージョンの間で同期させようとしています。他のテーブルでは、SQL Server テーブルの内容を消去し、混乱全体を挿入してすべての変更をキャプチャすることができます。ただし、このテーブルでそれを実行しようとすると、情報が得られますが、Autonumber フィールドは、前回の繰り返しの最後の未使用の番号から増加します。十数回の「同期」操作の後、危険なほどこのフィールドの自動番号が足りなくなりそうです。
Microsoft Access フロント エンド アプリケーションから 'DBCC CHECKIDENT' を発行しようとしましたが、ステートメントが SELECT、DELETE、PROCEDURE、DROP、ALTER などで始まっていないというエラーがスローされます。このコマンドは、SQL Server 管理コンソール (現在のテスト環境ではアクセスできるツールですが、アプリケーションが運用環境になると機能しません) から発行すると機能します。
次に、DoCmd.RunSQL コマンドを使用して 'TRUNCATE TABLE' クエリを試してみましたが、リンクされたテーブルでは操作がサポートされていないというエラーがスローされました (概算)。このテーブルは Microsoft Access フロントエンドにリンクされています (バックエンド テーブルは SQL Server Express 上にあります)。
簡単に要約すると、次のようになります。
- フロント エンドは、Microsoft Access VBA アプリケーションです。
- データはリモート マシンの SQL Server Express に保存されます
- データ テーブルはフロント エンド アプリケーションでリンクされています
- このアプリケーションが本番環境になると、SQL Server 管理コンソールのコマンドを使用できなくなります。独自にハウスキーピングを実行する必要があります。
- DoCmd.RunSQL および CurrentDB.Execute は、TRUNCATE TABLE または 'DBCC CHECKIDENT' コマンドの使用を許可していないようです。
- 前述の関数は両方とも -DO- SQL Server 管理コンソールから発行された場合に機能します - これが実行可能なオプションではない理由については、上記を参照してください。
- -すべて- 他のテーブルは、このテーブル以外に期待どおりに動作し、必要に応じてインデント フィールドをリセットします。
-- 2011 年 8 月 8 日 15:08 に編集 --
わかりました - VBA ベースのパススルー クエリを何度も試みましたが、いずれも ODBC -- call failed エラーが発生しました。パススルーを処理するために作成したモジュールのコードを次に示します (dbforums.com からコードを借用)。
Function RunPassThrough(ByVal ConnectionString As String, ByVal SQL As String, Optional ByVal QueryName As String)
Dim dbs As DAO.Database
Dim qdf As DAO.QueryDef
Set dbs = CurrentDb
Set qdf = dbs.CreateQueryDef
With qdf
.Name = QueryName
.Connect = ConnectionString
.SQL = SQL
.ReturnsRecords = (Len(QueryName) > 0)
If .ReturnsRecords = False Then
.Execute
Else
If Not IsNull(dbs.QueryDefs(QueryName).Name) Then dbs.QueryDefs.Delete QueryName
dbs.QueryDefs.Append qdf
End If
.Close
End With
Set qdf = Nothing
Set dbs = Nothing
End Function
そのため、データベースへの接続文字列を指定する必要があります。以下のすべてが失敗しました:
strConnect = "ODBC;DRIVER={SQL Server};SERVER=ENV980-067\ENVIRON_TEST;DATABASE=instkeeper_test;Uid=<my username>;Pwd=<my password>;"
結果: 実行時エラー ODBC -- 呼び出しに失敗しました (エラー #3146)
strConnect = "ODBC;DRIVER={SQL Server};SERVER=ENV980-067\ENVIRON_TEST;DATABASE=instkeeper_test;TRUSTED_CONNECTION=YES;"
結果: 実行時エラー ODBC -- 呼び出しに失敗しました (エラー #3146)
strConnect = "ODBC;DSN=instkeeper_beta;"
結果: データ ソース名を尋ねられます。データ ソース管理パネルで指定すると、Run-time error ODBC -- call failed (error #3146) が表示されます。
strConnect = "ODBC;Server=ENV980-067\ENVIRON_TEST;Database=instkeeper_test;User ID=<my user name>;Password=<my password>;Trusted_Connection=False;"
結果: 実行時エラー ODBC -- 呼び出しに失敗しました (エラー #3146)
-- 2011 年 8 月 8 日 16:41 に編集 --
接続文字列の繰り返しでさらに多くの失敗がありました。この獣を機能させる方法について、私は正式にアイデアがありません。前の方法を試した後、DSN を要求した後、インターフェイスで作成されたパススルーが失敗します。リンクされたテーブルを呼び出して JET を実行するには、修復する必要があります。
strConnect = "ODBC;DATA SOURCE=instkeeper_test;"
結果: 実行時エラー ODBC -- 呼び出しに失敗しました (エラー #3146)
strConnect = "ODBC;DRIVER=SQL Server;SERVER=ENV980-067\ENVIRON_TEST;"
結果: 実行時エラー ODBC -- 呼び出しに失敗しました (エラー #3146)
strConnect = "ODBC;DRIVER=SQL Server;Server=ENV980-067\ENVIRON_TEST;Database=instkeeper_test;User ID=<my user name>;Password=<my password>;"
結果: 実行時エラー ODBC -- 呼び出しに失敗しました (エラー #3146)