Connessione a DB SQL SERVER

di il
8 risposte

Connessione a DB SQL SERVER

Ciao a tutti,
avrei la necessità di collegare (in lettura) alcune tabelle presenti su un DB SQL SERVER accedendo da Access 2010 (in alternativa mi andrebbe bene anche scaricare in locale la tabella presente sul server).

Attualmente utilizzo un file Excel 2010 per scaricare in locale i dati ma il DB è diventato >1Mio di record e non riesco a scaricalo tutto in una sola volta. la stringa di seguito riportata mi aggiorna una tabella pivot da cui poi estraggo i record filtrati (dalla pivot)

La stringa di connessione presente su Excel è la seguente (non si tratta di codice VBA):
CONNECTION STRING: Provider=SQLOLEDB.1;Password=MiaPassword;Persist Security Info=True;User ID=MioID;Initial Catalog=MioCatalogo;Data Source=10.38.111.111;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=MONITORING-MI67;Use Encryption for Data=False;Tag with column collation when possible=False
COMMAND TYPE: Default
COMMAND TEXT: MiaTABELLA "YVO2VPY5UTKBU4ISFRKD","2016","02000"
Utilizzando l'indirizzo IP riesco a connettermi al DB SQL ma non vedo le tabelle che mi interessano (MiaTABELLA) vedo altre tabelle che non mi servono.

Presumo che il problema sia tutto nei dati presenti nella stringa "COMMAND TEXT"

Ho cercato info sul sito e su WEB ma non ho capito cosa devo fare...

Cortesemente riuscite a darmi una mano?

Grazie
Roberto

8 Risposte

  • Re: Connessione a DB SQL SERVER

    Io ti suggerisco di LINKARE la Tabella... come si fa normalmente... ma usando ODBC non OLEDB...!
    
    
    Const cCnnString as String="ODBC;DRIVER={SQL Server};SERVER=NOME_SERVER;UID=USER_NAME;PWD=PASSWORD;
    DATABASE=DB_NAME;LANGUAGE=Italiano;
    
    Dim tdf As DAO.TableDef
    Set tdf = CurrentDb.CreateTableDef("NometabellaLocale")
    tdf.Connect = cCnnString
    tdf.SourceTableName = "NomeTabellaSERVER"
    DbEngine(0)(0).TableDefs.Append tdf
    Set tdf=Nothing
    Attenzione solo al Nome della Tabella lato Server, che con SQL per essere vista serve il prefisso [dbo.NomeTabella]
  • Re: Connessione a DB SQL SERVER

    Grazie Alex
    Ho già provato, mi linka il DB ma non vedo le tabelle che mi interessano (potrebbero essere viste...)
    Comunque riprovo con maggiore attenzione al tipo di connessione e vi faccio sapere
    R
  • Re: Connessione a DB SQL SERVER

    ROBERTO.F ha scritto:


    Grazie Alex
    Ho già provato, mi linka il DB ma non vedo le tabelle che mi interessano (potrebbero essere viste...)
    Comunque riprovo con maggiore attenzione al tipo di connessione e vi faccio sapere
    R
    Se sono VISTE, credo serva usare QueryPT...
  • Re: Connessione a DB SQL SERVER

    ROBERTO.F ha scritto:


    Grazie Alex
    Ho già provato, mi linka il DB ma non vedo le tabelle che mi interessano (potrebbero essere viste...)
    Comunque riprovo con maggiore attenzione al tipo di connessione e vi faccio sapere
    R
    Perché non lo fai dall'ambiente MSAccess ?

    0 - Avvii odbcad32.exe/odbcad.exe vai su DNS Utente e crei una fonte dati ODBC per il tuo database (scegli il driver di SQL Server v.xx e segui il wizard... alla fine fai il test di connessione per assicurarti che tutto sia OK).

    Da MSAccess:
    1 - apri il tuo database
    2 - DATI ESTERNI -> Database ODBC
    3 - scegli Importa.... oppure Collega...
    3 - seleziona Origine dati computer (finestra Selezione origine dati) e scegli la fonte dati in creata precedentemente
    4 - in Importa oggetti selezioni le tabelle, query, insomma quello che ti serve

    Attento che la visibilità di alcuni oggetti piuttosto che altri dipende dai permessi che hanno le credenziali che usi per creare la fonte ODBC.
  • Re: Connessione a DB SQL SERVER

    Grazie Gibra,
    ho imparato una cosa nuova che mi sarà sicuramente molto utile per le mie attività.

    Invece, per quanto riguarda il mio problema, continuo a non vedere le tabelle con i dati che mi interessano (cioè quelli che scarico su XLSX)...

    In pratica per accedere al DB SQL possiamo utilizzare solo dei file XLSX in cui è presente una pivot linkata ad una sola tabella presente su un DB SQLServer, effettuando l'aggiornamento dei dati della pivot scarichiamo in locale anche il dettaglio dei record. Il problema è che il file XLSX ha un limite di record e per leggerli tutti in un unico file pensavo di utilizzare Access. (con la logica se funziona con Excel voul dire che le credenziali sono corrette e le posso utilizzare anche su Access).

    Il vero problema è che il DB Manager non è molto collaborativo (altrimenti non servirebbe il vostro aiuto...) e io volevo cercare di lavorare in modo più pulito...

    Ho provato anche a esportare da Excel il file di connessione .ODC ma non sono riuscito ad utilizzarlo da Access: qualcuno sa come fare?

    grazie

    di seguito il file .odc creato da Excel

    <html xmlns:o="urn:schemas-microsoft-com:office:office"
    xmlns="http://www.w3.org/TR/REC-html40">
    
    <head>
    <meta http-equiv=Content-Type content="text/x-ms-odc; charset=utf-8">
    <meta name=ProgId content=ODC.Table>
    <meta name=SourceType content=OLEDB>
    <title>Connessione</title>
    <xml id=docprops><o:DocumentProperties
      xmlns:o="urn:schemas-microsoft-com:office:office"
      xmlns="http://www.w3.org/TR/REC-html40">
      <o:Name>Connessione</o:Name>
     </o:DocumentProperties>
    </xml><xml id=msodc><odc:OfficeDataConnection
      xmlns:odc="urn:schemas-microsoft-com:office:odc"
      xmlns="http://www.w3.org/TR/REC-html40">
      <odc:Connection odc:Type="OLEDB">
       <odc:ConnectionString>Provider=SQLOLEDB.1;Password=xxxx;Persist Security Info=True;User ID=xxxx;Initial Catalog=Cruscotto;Data Source=10.38.111.111;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=000A0005C04624;Use Encryption for Data=False;Tag with column collation when possible=False</odc:ConnectionString>
       <odc:CommandType>Default</odc:CommandType>
       <odc:CommandText>CruscottoGEOGRAFICO "YVO2VPY5UTKBU4ISFRKD","2016","02000033"</odc:CommandText>
      </odc:Connection>
     </odc:OfficeDataConnection>
    </xml>
    <style>
    <!--
        .ODCDataSource
        {
        behavior: url(dataconn.htc);
        }
    -->
    </style>
     
    </head>
    
    <body onload='init()' scroll=no leftmargin=0 topmargin=0 rightmargin=0 style='border: 0px'>
    <table style='border: solid 1px threedface; height: 100%; width: 100%' cellpadding=0 cellspacing=0 width='100%'> 
      <tr> 
        <td id=tdName style='font-family:arial; font-size:medium; padding: 3px; background-color: threedface'> 
          &nbsp; 
        </td> 
         <td id=tdTableDropdown style='padding: 3px; background-color: threedface; vertical-align: top; padding-bottom: 3px'>
    
          &nbsp; 
        </td> 
      </tr> 
      <tr> 
        <td id=tdDesc colspan='2' style='border-bottom: 1px threedshadow solid; font-family: Arial; font-size: 1pt; padding: 2px; background-color: threedface'>
    
          &nbsp; 
        </td> 
      </tr> 
      <tr> 
        <td colspan='2' style='height: 100%; padding-bottom: 4px; border-top: 1px threedhighlight solid;'> 
          <div id='pt' style='height: 100%' class='ODCDataSource'></div> 
        </td> 
      </tr> 
    </table> 
    
      
    <script language='javascript'> 
    
    function init() { 
      var sName, sDescription; 
      var i, j; 
      
      try { 
        sName = unescape(location.href) 
      
        i = sName.lastIndexOf(".") 
        if (i>=0) { sName = sName.substring(1, i); } 
      
        i = sName.lastIndexOf("/") 
        if (i>=0) { sName = sName.substring(i+1, sName.length); } 
    
        document.title = sName; 
        document.getElementById("tdName").innerText = sName; 
    
        sDescription = document.getElementById("docprops").innerHTML; 
      
        i = sDescription.indexOf("escription>") 
        if (i>=0) { j = sDescription.indexOf("escription>", i + 11); } 
    
        if (i>=0 && j >= 0) { 
          j = sDescription.lastIndexOf("</", j); 
    
          if (j>=0) { 
              sDescription = sDescription.substring(i+11, j); 
            if (sDescription != "") { 
                document.getElementById("tdDesc").style.fontSize="x-small"; 
              document.getElementById("tdDesc").innerHTML = sDescription; 
              } 
            } 
          } 
        } 
      catch(e) { 
    
        } 
      } 
    </script> 
    
    </body> 
     
    </html>
  • Re: Connessione a DB SQL SERVER

    Non conoscendo nulla dello scenario é davvero difficile, a distanza, capire come muoversi.

    Io, di solito collego le tabelle del db via codice, ma uso ADO:
    ACC2000: Utilizzare ADOX per creare e aggiornare collegato tabelle Jet
    https://support.microsoft.com/it-it/kb/27524

    Sicuramente c'è un modo anche con DAO di MSAccess, prova a fare una ricerca.

    Però, se con il modo che ti ho indicato prima tu dici di non vedere quelle che ti servono, è chiaro che non le potrai vedere/accedervi nemmeno da codice.

    Dato che quel foglio 'qualcuno' l'avrà pure generato, in azienda, avrete pure un sistemista/amministratore che gestisca queste cose.
    Perché non ti rivolgi a lui che ti fornisca la stringa di connessione?
  • Re: Connessione a DB SQL SERVER

    Grazie Gibra, provo con ADOX
    per quanto riguarda l'accesso al DB so già per certo che l'Admin non gradisce e volevo risolvere in "autonomia", visto però che il progetto Aziendale passero per le vie "ufficiali".

    vi faccio sapere come ho risolto, per il momento grazie ancora delle dritte.
  • Re: Connessione a DB SQL SERVER

    Una considerazione per chi usa Access... di solito si usa DAO... che evita di richiedere l'aggiunta di un a lib. ma ovviamente è equivalente se non che Access usa in ogni modo DAO.
    Valuta anche la possibilità di una connessione DSN_LESS... come già esposto.
    A prescindere dalla scelta tecnica... sei certo sia una tabella..?
    Fosse una vista sei sicuro sia una buona Idea...? Non conviene una query di tipo passtrought direttamente sul server...?
    Mi pare tutto molto strano
Devi accedere o registrarti per scrivere nel forum
8 risposte