2017-06-21 32 views
0

私の部署は、VBAとそれは、もともと私たちのいずれかのサーバー上のAccessデータベースを指摘アクセス2016を使用して作成したアプリケーションを使用しています。別のサーバーにデータを移行した後、私は今、それが別のサーバー上の他のSQL Serverデータベースを指す必要があります。しかし、私は接続を作るように見えることはできません。はどうすればアクセス2016 VBAで新しいデータソースに接続しますか?

私は、問題のサーバー上のdbowner権限を持っています。

'DoCmd.OpenForm "frmInactiveShutDown", acNormal, , , , acHidden 
'Commented out the above statement 
...  
'Set conn = CurrentProject.Connection 
'================================================================== 
'Start of Added Code for SQL Migration 
Set conn = New ADODB.Connection 
With conn 
    .ConnectionString = "Provider=SQLNCLI11;Data Source=(My Server Name);Initial Catalog=(My Database Name);User ID=(Username);Password=(Password)" 
    .Open 
    If .State = adStateClosed Then 
     MsgBox "Connection unsuccessful. Could not open connection.", vbInformation, "Error:" 
    End If 
End With 

Set rst = New ADODB.Recordset 
With rst 
    .ActiveConnection = conn 
    .CursorLocation = adUseClient 
    .CursorType = adOpenStatic 
    .LockType = adLockOptimistic 
    .Open "tbl_Users" 
End With 
'End of Added Code for SQL Migration - See Section 2 for rest of code. 
'================================================================== 
... 

'Section 2 of Code 
'================================================================== 
'Start of added code for SQL Migration 
rstLog.Open "tblUserLog", conn, adOpenStatic, adLockOptimistic 
rstLog.AddNew 
    rstLog!UserID = rst!UserID 
    rstLog!TimeIn = DateTime.Now() 
rstLog.Update 
MsgBox "Success! Connection was made successfully.", vbInformation 
'End of added code for SQL Migration 
'=================================================================== 

私のフォームは、ユーザーがフォームのリストを選択するドロップダウンがあり、次のよう

'Remove the filter, close the log on form, and open the Switchboard 
rst.Filter = 0 
DoCmd.Close acForm, "frmUserLogOn" 

'Open the Main Switchboard 
DoCmd.OpenForm "frmMain", acNormal 

'Open the InactiveShutDown form in Hidden mode 
DoCmd.OpenForm "frmInactiveShutDown", acNormal, , , , acHidden 
... 

Set conn = CurrentProject.Connection 
... 

rstLog.Open "tblUserLog", conn, adOpenKeyset, adLockOptimistic 
rstLog.AddNew 
    rstLog!UserID = rst!UserID 
    rstLog!TimeIn = Now() 
rstLog.Update 

私の新しいコードは次のように

接続文字列の元のコードはでした表。私はそのテーブルにテストユーザーを追加しましたが、そのテストユーザーはドロップダウンリストに表示されません。したがって、私は接続が行われていないと思う。

は、私は引用符で囲まれたデータソースの名前、初期カタログ、ユーザーIDとパスワードを入力する必要がありますか?だから UserID='Admin'; Password='Test'

誰かが間違っていることを知っていますか?

+0

エラーメッセージを与えていますか?試してみるとどうなるの? –

+1

これはVB.NETコード – Plutonix

+0

でもないが、引用符は正しいが、私はユーザIDがユーザIDまたはユーザID(すべて一緒に)でなければならないと信じている。 [これを確認してください](https://www.connectionstrings.com/sql-server-native-client-11-0-oledb-provider/standard-security/) –

答えて

1

基本的に、ローカルアクセスフロントエンドデータベースとバックエンドSQL Serverデータベースとの間に同じ名前のテーブルが混在しています。現在、コードはのtblUserLogをSQL Serverのバックエンド側で更新します。アクセスフロントエンド側のtblUserLogはフォームにバインドされている可能性があります。したがって、サーバー表が表示されないため、更新が表示されないのはなぜですか。

  1. 使用SQL Serverのバージョン

    は、単に2つのいずれかの操作を行い削除するか、アーカイブのアクセスバージョンをしてODBC linked tableとしてtblUserLogを追加します。 dbo_または他のスキーマ接頭辞を削除し、同じ名前tblUserLogを保つようにしてください。テーブル名は変わらないので、フォームやVBAコードなどは変更する必要はありません。

  2. 使用するアクセスのバージョン:ローカルAccessテーブル、tblUserLogを維持し、別の接続オブジェクトを追加し、その接続でレコードの更新を実行する必要がVBAでこれを更新します。 ADOオブジェクトのSERVER_、LOCAL_LISTENERの接頭辞は、以下を参照してください:

    ' OPEN SERVER CONNECTION AND SERVER TABLE RECORDSET 
    Set server_conn = New ADODB.Connection 
    
    With server_conn 
        .ConnectionString = "Provider=SQLNCLI11;Data Source=(My Server Name);Initial Catalog=(My Database Name);User ID=(Username);Password=(Password)" 
        .Open 
        If .State = adStateClosed Then 
         MsgBox "Connection unsuccessful. Could not open connection.", vbInformation, "Error:" 
        End If 
    End With 
    
    Set server_rst = New ADODB.Recordset 
    With server_rst 
        .ActiveConnection = conn 
        .CursorLocation = adUseClient 
        .CursorType = adOpenStatic 
        .LockType = adLockOptimistic 
        .Open "tbl_Users" 
    End With 
    
    ' OPEN LOCAL CONNECTION AND UPDATE LOCAL TABLE RECORDSET 
    Set local_conn = CurrentProject.Connection 
    
    Set local_rstLog = New ADODB.Recordset 
    local_rstLog.Open "tblUserLog", local_conn, adOpenStatic, adLockOptimistic 
    local_rstLog.AddNew 
        local_rstLog!UserID = server_rst!UserID  ' NOTICE SERVER DATA USED HERE 
        local_rstLog!TimeIn = DateTime.Now() 
    local_rstLog.Update 
    
    ... 
    ' RELEASE RESOURCES 
    Set server_rst = Nothing: Set local_rstLog = Nothing 
    Set server_conn = Nothing: Set local_conn = Nothing 
    
関連する問題