Vba - MS Sql - ODBC o OLE DB?

di il
3 risposte

Vba - MS Sql - ODBC o OLE DB?

Ciao, primo post!

Ho una applicazione Access/Vba che ha delle tabelle collegate con un server SQL...Più client che si collegano.

Da almeno due anni funziona tutto, più o meno , implementazione fatta di getto senza grandi elementi a supporto, tradotto: da praticone.

Oggi vorrei iniziare ad ottimizzare connessioni, intercettazione dei msg di errore di connessione e qualche query, per semplificare la manutenzione, ottimizzarne le prestazioni e non sfidare ulteriormente la sorte.

Inizio col il collegamento, attualmente gestito tramite ODBC
ODBC Driver 17 for SQL Server
DNS utente
Autenticazione SQL Server tramite ID e password

(Sarebbe ottimale utilizzare Autenticazione Windows integrata, da quello che ho capito serve win pro ed un dominio, io ho win home e pro sul server)

    Dim connString As String
    Dim db As DAO.Database
    Dim tb As DAO.TableDef
    Set db = CurrentDb
    On Error GoTo RefreshODBCLinks_Err       'Se non c'è connessione mi arriva sempre prima la finestra di errore di connessione
    								' Ancora non ho capito se si può intercettare :(

   'Leggo il nome del server per poter puntare il server di casa mia piuttosto che dal lavoro
   Server_Name = ini_manager("r", "DATABASE", "nome_server")
    'Connessione ODBC
    connString = "DSN=ODBC_17_SQL;Trusted_Connection=No;APP=Microsoft Office 2016;DATABASE=Casale_Server;Network=DBMSSOCN;Address=" & Server_Name & ",1433;Uid=xxxx1;Pwd=Lamiapassword;"
    
    ' N.B. nel file ini ho inserito anche la stringa connString in chiaro, perchè se cambiassi parametri di connessione non sarei costretto
    ' a rimettere mano al programma e ricompilarlo...Magari dovrei criptare la stringa.
    
'Poi eseguo un refresh dei link delle tabelle collegate...Eccetera
    For Each tb In db.TableDefs

Rivedendo la documentazione di MS a proposito di collegamento DB leggo che sarebbe più performante utilizzare OLE DB.
Vi risulta?
Devo implementare sempre preventivamente il drive e la connessione dal tool "Origini Dati"?

...Qualcuno ha qualche dritta per l'Autenticazione Windows integrata?

Per l'evoluzione del programma un bel contributo mi è stato dato da @Alex , Masterdrive

Se serve posto l'immagine dei componenti abilitati:
riferimenti_db_vba.png
riferimenti_db_vba.png

Grazie

3 Risposte

  • Re: Vba - MS Sql - ODBC o OLE DB?

    ODBC non è affatto sbagliato, semmai è buona norma eliminare le tabelle di link alla chiusura del programma e re-linkarle all'accesso, ci sono vari post anche su questo forum, ti basta una ricerca.
    Se non hai pro sui client non possono entrare in dominio quindi niente connessione integrata
  • Re: Vba - MS Sql - ODBC o OLE DB?

    Intanto grazie per la risposta, avrei pronto il codice per fare i link all'apertura se non fosse che inizialmente ho rinominato le cartelle linkate, es. dbo_archivio l'ho rinominata archivio, quindi dovrei salvare in una tabella la tabella SQL ed il nome custom
    su access e poi di fondo mica ho capito il motivo di eliminare i link, adesso che ci penso non so quale comando elimina i link, per ripristinarli ogni volta.
  • Re: Vba - MS Sql - ODBC o OLE DB?

    Le Linked table hanno 2 proprietà da gestire il nome della RemoteTable e quello della Local... sono distinguibili.

    Io evito questo accrocchio, lato server ho una tabella a cui accedo in modalita diretta, nella quale salvo il nome delle tabelle da linkare, all'apertura apro un recordset su quella tabella dopo il LOGIN e ciclo tutto per creare le Linked table.

    Il motivo di linkare ed eliminare alla chiusura è che la Linked fino a versioni precedenti ma non so quando è avvenuto il cambiamento, salvava in chiaro in una LocalTable indagini autenticazione al server e consentiva sia di vederle ma anche di fare da ponte al server con un client su client.
    In pratica apri un accdb vuoto colleghi il tuo progetto come Linked w senza autenticarsi sei sul server.... e fai danni.
Devi accedere o registrarti per scrivere nel forum
3 risposte