2016-07-01 5 views
2

私は現在、VBAモジュールを介して動的にユーザーフォームを構築するアクセスアプリケーションを開発中です。フォームを作成するには、MS SQL DBからデータが必要です。リンクテーブル接続を編集できないため、私のuserformが空白になる

https://support.microsoft.com/en-us/kb/892490

userinputsをユーザーフォームに集め、続いていくつかの他のリンクテーブルに挿入されている(私はAttachDSNlessTable方法を使用して、アプリケーション全体の開始時に確立されているリンクテーブルの接続を介してこのデータを収集します:ResultTables)を同じSQL Server上に作成します。

私の問題VBベースのリンクテーブル接続では、私のユーザーフォームの入力を結果テーブルに挿入できません。 FormViewでフォームを表示すると、代わりに完全に空白になります。 DesignViewでは、すべてのコントロールが表示されます。

リンクされたテーブルを手動で作成しても問題はありません。テーブル内に新しい行を入力できるインデックスを選択できるからです。

私は、ユーザーがSQL Serverにアクセスして、更新/挿入/削除の手順を実行できることを確信しています。私はサーバー上でテーブルのインデックスを作成しようとしましたが、インデックスはAccessに固有のものではありません。テーブルがリンクされると、私は接続を編集することができません。自動的に主キーを検出する必要があり、SQL Serverのテーブルをリンク
https://support.microsoft.com/en-us/kb/93261

Option Compare Database 

'//Name  : AttachDSNLessTable 
'//Purpose : Create a linked table to SQL Server without using a DSN 
'//Parameters 
'//  stLocalTableName: Name of the table that you are creating in the current database 
'//  stRemoteTableName: Name of the table that you are linking to on the SQL Server database 
'//  stServer: Name of the SQL Server that you are linking to 
'//  stDatabase: Name of the SQL Server database that you are linking to 
'//  stUsername: Name of the SQL Server user who can connect to SQL Server, leave blank to use a Trusted Connection 
'//  stPassword: SQL Server user password 
Function AttachDSNLessTable(stLocalTableName As String, stRemoteTableName As String, stServer As String, stDatabase As String, Optional stUsername As String, Optional stPassword As String) 
    On Error GoTo AttachDSNLessTable_Err 
    Dim td As TableDef 
    Dim stConnect As String 

    For Each td In CurrentDb.TableDefs 
     If td.Name = stLocalTableName Then 
      CurrentDb.TableDefs.Delete stLocalTableName 
     End If 
    Next 

    If Len(stUsername) = 0 Then 
     '//Use trusted authentication if stUsername is not supplied. 
     stConnect = "ODBC;DRIVER=SQL Server;SERVER=" & stServer & ";DATABASE=" & stDatabase & ";Trusted_Connection=Yes" 
    Else 
     '//WARNING: This will save the username and the password with the linked table information. 
     stConnect = "ODBC;DRIVER=SQL Server;SERVER=" & stServer & ";DATABASE=" & stDatabase & ";UID=" & stUsername & ";PWD=" & stPassword 
    End If 
    Set td = CurrentDb.CreateTableDef(stLocalTableName, dbAttachSavePWD, stRemoteTableName, stConnect) 
    CurrentDb.TableDefs.Append td 
    CurrentDb.TableDefs.Refresh 
    'td.CreateIndex (ID2) 
    AttachDSNLessTable = True 
    Exit Function 

AttachDSNLessTable_Err: 

    AttachDSNLessTable = False 
    MsgBox "AttachDSNLessTable encountered an unexpected error: " & Err.Description 

End Function 

答えて

1

:私はまた、ブランクのユーザーフォームのための提案のアプローチを試してみました。それはDoCmd.TransferDatabase TransferType:=acLinkを使って私のために働く。

明らかに、CurrentDb.CreateTableDefメソッドでは機能しません。

だから私はテーブルをリンクするには、このコマンドを使用することをお勧め:

DoCmd.TransferDatabase TransferType:=acLink, _ 
    DatabaseType:="ODBC", _ 
    DatabaseName:=stConnect, _ 
    ObjectType:=acTable, _ 
    Source:=stRemoteTableName, _ 
    Destination:=stLocalTableName, _ 
    StructureOnly:=False, _ 
    StoreLogin:=True 

私はDSNレスリンクされたテーブルhereの作成について詳しく書かれているが、それのほとんどはどこPK ISN、SQL Serverのビューをリンクを扱います自動的に検出されません。

0

お返事ありがとうございます!最後に、主キーのcreate-sql-statementを作成しました。それはスムーズに動作します:

SQL_PrimaryKey = "CREATE INDEX PrimaryKey ON " & QMT_QMTmonitoring_TransactionFact & _ 
       " (ID) WITH PRIMARY" 
Database_Link.Execute SQL_PrimaryKey 
関連する問題