Condividi tramite

Creazioe da codice di tabella collegata, mi richiede la pass ??

Anonimo
2019-07-10T21:54:43+00:00

ho 2 DB di SQLServer identici  (sono stati generati dallo satesso BackUp)

          - uno è in un Server remoto che raggiungo con numero di IP

          - l'altro e sulla macchina locale in cui lavoro e in cui gira il file di Access

In un file di Access genero con VBA 2 tabelle collegate ai 2 DB

Private Sub TestMinimo()

Dim strConn As String

Dim Tdf As DAO.TableDef

strConn = "ODBC;DRIVER=SQL Server;SERVER=123.456.789.547;UID=sa;PWD=xyzw;DATABASE=DBTest"

' Questo è un Server remoto che raggiungo con il numero di IP

        Set Tdf = DBEngine(0)(0).CreateTableDef("TabTestRemota")

        Tdf.Connect = strConn

        Tdf.SourceTableName = "TabTest"

        DBEngine(0)(0).TableDefs.Append Tdf

strConn = "ODBC;DRIVER=SQL Server;SERVER=I90C;UID=sa;PWD=xyzw;DATABASE=DBTest"

' Questa (I90C) è la macchina locale su cui gira la applicazione

        Set Tdf = DBEngine(0)(0).CreateTableDef("TabTestLocale")

        Tdf.Connect = strConn

        Tdf.SourceTableName = "TabTest"

        DBEngine(0)(0).TableDefs.Append Tdf

End Sub

Lancio il codice sopra e creo 1 tabella collegata campione per ogni DB

Fino a quando il File di Access è aperto va tutto bene

quando pero lo chiudo e riapro mi succede che:

  • La tabella "TabTestRemota" mi va in errore  18452 e mi richiede di digitare la pass dell'utente "sa"
  • La tabella "TabTestLocale" si apre regolarmente

Io vorrei potere accedere anche a "TabTestRemota" senza digitare nessuna pass

Grazie per l'eventuale aiuto

Mancini

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

2 risposte

Ordina per: Più utili
  1. Anonimo
    2019-08-25T10:26:32+00:00

    Chiedo scusa per il lungo tempo di attesa ........ :) .......

    Forse il problema sta nel mio PC/sistema perche mi sembra troppo strano che si tratti di un problema generalizzato .....

    Ho fatto un rapido esperimento concentrandomi solamente sul problema esposto, 

    (che avrei individuato,  ma che non so come risolvere,  quindi lo ho aggirato cambiando approccio )

    Vengo al dettaglio dell'esperimento ....

    Ho 2 DB rigorosamente identici su un server remoto (xxx.xxx.xxx.xxx) e su PC locale  (I90C)

    Ho generato 3 tabelle con la classica procedura guidata di Microsoft    (GUI)

    T1ManRemSa  (GenerataManualmente - Connessa in Remoto a xxx.xxx.xxx.xxx  -  Utente sa  e Pass  )

    T1ManLocSa  (GenerataManualmente - Connessa in Locale a I90C             -  Utente sa  e Pass  )

    T1ManLocTr  (GenerataManualmente - Connessa in Locale a I90C             -  Trusted  )

    Poi ho generato altre 3 tabelle identiche MA USANDO IL CODICE

    T1CodRemSa  (GenerataDaCodice - Connessa in Remoto a xxx.xxx.xxx.xxx  -  Utente sa  e Pass )

    T1CodLocSa  (GenerataDaCodice - Connessa in Locale a I90C             -  Utente sa  e Pass )

    T1CodLocTr  (GenerataDaCodice - Connessa in Locale a I90C             -  Trusted )

    il codice utilizzato è stato questo:   (Ho omesso gestione errori e tutto il resto per concentrarmi solo sul problema)

    Private Sub createConnectTable()

    Dim Tdf As DAO.TableDef

    Dim dbs As DAO.Database

    Set dbs = CurrentDb

    Const strConnCodRemSa As String = "ODBC;DRIVER=SQL Server;SERVER=xxx.xxx.xxx.xxx;UID=sa;PWD=xxxx;DATABASE=Test01"

            Set Tdf = dbs.CreateTableDef("T1CodRemSa")

            Tdf.Connect = strConnCodRemSa

            Tdf.SourceTableName = "dbo.T1"

            CurrentDb.TableDefs.Append Tdf

            Application.RefreshDatabaseWindow

    Const strConnCodLocSa As String = "ODBC;DRIVER=SQL Server;SERVER=I90C;UID=sa;PWD=xxxx;DATABASE=Test01"       

            Set Tdf = dbs.CreateTableDef("T1CodLocSa")

            Tdf.Connect = strConnCodLocSa

            Tdf.SourceTableName = "dbo.T1"

            CurrentDb.TableDefs.Append Tdf

            Application.RefreshDatabaseWindow

    Const strConnCodLocTr As String = "ODBC;DRIVER=SQL Server;SERVER=I90C;UID=I90U;Trusted_Connection=Yes;DATABASE=Test01"

            Set Tdf = dbs.CreateTableDef("T1CodLocTr")

            Tdf.Connect = strConnCodLocTr

            Tdf.SourceTableName = "dbo.T1"

            CurrentDb.TableDefs.Append Tdf

            Application.RefreshDatabaseWindow

    End Sub

    Poi da codice ho letto sulla finestra immediata le  "connect" delle 6 tabelle incriminate

    Private Sub LeggiConnessione()

    Dim Tdf As DAO.TableDef

    Dim dbs As DAO.Database

    Set dbs = CurrentDb

    For Each Tdf In dbs.TableDefs

        If InStr(Tdf.Connect, "ODBC") Then

            Debug.Print Tdf.Name & "   " & Tdf.Connect

        End If

    Next Tdf

    End Sub

    Il risultato alla finestra immediata è ststo questo:  (Lo ho riordinato e spaziato per renderlo leggibile)

    T1ManLocSa   ODBC;DRIVER=SQL Server;SERVER=I90C;  UID=sa;PWD=xxxx;  APP=Microsoft Office 2013;  DATABASE=Test01

    T1CodLocSa   ODBC;DRIVER=SQL Server;SERVER=I90C;              ????        APP=Microsoft Office 2013;  DATABASE=Test01

    T1ManRemSa   ODBC;DRIVER=SQL Server;SERVER=xxx.xxx.xxx.xxx;   UID=sa;PWD=xxxx;  APP=Microsoft Office 2013;  DATABASE=Test01

    T1CodRemSa   ODBC;DRIVER=SQL Server;SERVER=xxx.xxx.xxx.xxx;              ????             APP=Microsoft Office 2013;  DATABASE=Test01

    T1ManLocTr   ODBC;DRIVER=SQL Server;SERVER=I90C;  UID=I90U;Trusted_Connection=Yes;  APP=Microsoft Office 2013;  DATABASE=Test01

    T1CodLocTr   ODBC;DRIVER=SQL Server;SERVER=I90C;                                                              APP=Microsoft Office 2013;  DATABASE=Test01

    Risulta che le 3 tabelle generate da codice (di cui 2 dovevano avere connessione con "sa") sono in effetti tutte con connessione "Trusted"

           Ho aggiunto per la leggibilita degli spazi e dei punti di domanda dove mancherebbero le cresdenziali

    pertanto in locale mi funzionano,  ma se tento di connettermi a un Server remoto mi chiede sempre la pass

    (per chiarezza ricordo che le 3 tabelle generate da codice sono quelle che nel 3° 4° 5° carattere hanno "Cod"

    Ripeto,  ormai ho "aggirato" il problema,  pero sarei curioso di scoprire dove sta il problema,

    Grazie


    Scusatemi,  sto rileggendo il tutto e mi rendo conto che è lungo e incasinato,

    quindi riepilogo in 4 righe:

    La tabella T1CodRemSa   generata da codice con questa stringa

    "ODBC;DRIVER=SQL Server;SERVER=xxx.xxx.xxx.xxx;UID=sa;PWD=xxxx;DATABASE=Test01"

    mi risulta alla finestra immediata che poi abbia quest' altra stringa (manca utente e pass)

    "ODBC;DRIVER=SQL Server;SERVER=xxx.xxx.xxx.xxx;  APP=Microsoft Office 2013;  DATABASE=Test01"

    .

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2019-07-11T07:13:42+00:00

    ciao Mancini,

    prova come segue, credo sia meglio appoggiarsi alla funzione currentDb in questo caso, in quanto restituisce sempre l'oggetto piu' aggiornato. ( parere personale)

    Private Sub createConnectTable()

    On Error GoTo errExistsTable

    Dim Tdf As DAO.TableDef

    Dim dbs As DAO.Database

    Const errExistsTable As Long = 3010

    Set dbs = CurrentDb

    Const strConn As String = "ODBC;DRIVER=SQL Server;SERVER=123.456.789.547;UID=sa;PWD=xyzw;DATABASE=DBTest";Trusted_Connection=Yes"

            Set Tdf = dbs.CreateTableDef("TabTestRemota")

            Tdf.Connect = strConn

            Tdf.SourceTableName = "TabTest"

            CurrentDb.TableDefs.Append Tdf

            Application.RefreshDatabaseWindow

    Exit_errExistsTable:

        Exit Sub

    errExistsTable:

        With Err

            Select Case Err

                 Case errExistsTable

                     If MsgBox("La tabella esiste gi?. La elimino e la creo di nuovo?", _

                                vbYesNo + vbExclamation) = vbYes Then

                                CurrentDb.TableDefs.Delete "T_customers"

                                createConnectTable

                     End If

                 Case Else

                        MsgBox "Errore: " & Err & vbCrLf & Err.Description

            End Select

        End With

        Resume Exit_errExistsTable

    End Sub

    HTH.

    Ciao, Sandro

    La risposta è stata utile?

    0 commenti Nessun commento