Importare dati da un db access ad un db sql server 2005

martedì 18 settembre 2007 - 15.58

ciccios100 Profilo | Junior Member

Ciao a tutti,
volevo proporvi un quesito!
Ho una tabella con alcuni dati che mi interessano in access.Ho bisogno di importare alcuni campi della tabella access in un database di sql server 2005 express,con tracciato in parte uguale a quello della tabella access...come faccio?
Grazie in anticipo

lbenaglia Profilo | Guru

>Ho una tabella con alcuni dati che mi interessano in access.Ho
>bisogno di importare alcuni campi della tabella access in un
>database di sql server 2005 express,con tracciato in parte uguale
>a quello della tabella access...come faccio?

Ciao Ciccio,

Se si tratta di una importazione sporadica puoi utilizzare la funzione OPENROWSET per accedere ai dati contenuti nel database Access.
Mi limito a segnalarti il paragrafo dei Books Online riferito a tale funzione, dato che l'esempio B ti illustra chiaramente come accedere proprio ad un file .mdb:

"OPENROWSET (Transact-SQL)"
http://msdn2.microsoft.com/en-us/library/ms190312.aspx

>Grazie in anticipo
Prego.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

ciccios100 Profilo | Junior Member

Ciao Lorenzo,
Quindi questo sarebbe il comando da utilizzare:
>>SELECT CustomerID, CompanyName
>> FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
>> 'C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb';
>> 'admin';'',Customers)
>>GO
Giusto?
Ma quel Microsoft.Jet:OLEDB.4.0 cos'è?è una connessione odbc di driver sqlserver al DB di access?

lbenaglia Profilo | Guru

>Quindi questo sarebbe il comando da utilizzare:
>>>SELECT CustomerID, CompanyName
>>> FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
>>> 'C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb';
>>> 'admin';'',Customers)
>>>GO
>Giusto?
Giusto.

>Ma quel Microsoft.Jet:OLEDB.4.0 cos'è?è una connessione odbc
>di driver sqlserver al DB di access?
E' il provider OLE DB di Microsoft Jet. Nel caso non l'avessi già installato sul tuo computer, puoi scaricarlo dal seguente link:

"How to obtain the latest service pack for the Microsoft Jet 4.0 Database Engine"
http://support.microsoft.com/kb/239114

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

ciccios100 Profilo | Junior Member

Ciao Lorenzo,
come al solito mi risolvi tutto....
Ho fatto una prova e tutto funziona a meraviglia!
Grazie!
Cmq ti volevo chiedere un ulteriore cosa.Con il comando da te indicatomi ho selezionato i record del db "sorgente" ma come faccio ad inserirli nel db "destinazione"?
E' possibile specificare il nome della tabella e dei campi del db destinazione dove lui mi deve inserire i dati estratti dal db access?

lbenaglia Profilo | Guru

>Cmq ti volevo chiedere un ulteriore cosa.Con il comando da te
>indicatomi ho selezionato i record del db "sorgente" ma come
>faccio ad inserirli nel db "destinazione"?

INSERT dbo.TabellaLocale(CustomerID, CompanyName) SELECT CustomerID, CompanyName FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb'; 'admin';'',Customers) ;

Dove appunto dbo.TabellaLocale è una tabella nel tuo database SQL Server al quale sei connesso.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

ciccios100 Profilo | Junior Member

Ok,si è andato tutto alla grande
ma la OPENROWSET con quali altri tipi di data base la posso usare?
e se cambia il tipo di database cambia il provider ole db?
Per esempio la posso usare direttamente con un db approach o con dati presenti su tabelle excel senza fare la conversione prima in db access?

lbenaglia Profilo | Guru

>ma la OPENROWSET con quali altri tipi di data base la posso usare?
Con qualunque fonte dati che disponga di un provider OLE DB o di un driver ODBC.

>e se cambia il tipo di database cambia il provider ole db?
Esatto.

>Per esempio la posso usare direttamente con un db approach
Non conosco Approach, ma se risponde a quanto appena detto la risposta è si.

>o con dati presenti su tabelle excel senza fare la conversione
>prima in db access?
Certo.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

ciccios100 Profilo | Junior Member

dove posso trovare i vari ole db provider per i vari programmi dai quali prelevare i dati che mi servono?
Ciao e grazie ancora di tutto

lbenaglia Profilo | Guru

>dove posso trovare i vari ole db provider per i vari programmi
>dai quali prelevare i dati che mi servono?
Quelli Microsoft li trovi nell'MDAC (ad esclusione di Jet che va scaricato a parte):
http://msdn2.microsoft.com/en-us/data/aa937730.aspx

Per gli altri prodotti spulcia la loro documentazione oppure rivolgiti alle aziende produttrici di provider OLEDB (googla...)

>Ciao e grazie ancora di tutto
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

waltmc Profilo | Newbie

Salve a tutt!


Sono nuovo del forum: mi sono iscritto perchè fra molti lo trovo fra i più esaustivi e risolutivi.

Ho più o meno la stessa esigenza per cui è stato aperto il tread:

ho un SQL server 2000 con tutti i miei bei DB e un db access che sta su un pc e viene popolato da una macchina
(giusto per la cronaca: passa uno scatolone con un barcode, viene letto il codice e registrato il passaggio)

quello che vorrei ottenere è il fatto di poter inserire quel codice nei miei db SQL

La query sopra proposta mi funziona benissimo con file mdb che stanno su C: ma quando specifico un percorso UNC, o anche un percorso locale (mappando un disco di rete) ricevo l'errore

[OLE/DB provider returned message: "L:\prova.MDB" non è un percorso valido. Assicurarsi che il nome del percorso sia corretto e di essere collegati al server in cui si trova il file.]
OLE DB error trace [OLE/DB Provider 'Microsoft.Jet.OLEDB.4.0' IDBInitialize::Initialize returned 0x80004005: ].


Il percorso ovviamente è corretto... sembrerebbero più problemi di accesso, ma sia la condivisione che i permessi sul file sono di controllo completo....


Come ovviare???
mi pongo inoltre un altro interrogativo: Superato lo scoglio "file remoto" dovrò fare i conti col DB vero e non con la mia copia di prova, e il DB vero è già aperto dalla macchina che legge i barcode.... a me basta un accesso in sola lettura, ma come lo preciso???


Grazie

lbenaglia Profilo | Guru

>Il percorso ovviamente è corretto... sembrerebbero più problemi
>di accesso, ma sia la condivisione che i permessi sul file sono
>di controllo completo....

Ciao Walter,

Se i server sono nel medesimo dominio, verifica che l'account utilizzato dal servizio MSSQLServer abbia le permission necessarie per accedere al file mdb.
Se i server sono in workgroup potresti definire un account locale ad entrambi i server con stesso nome e password ed utilizzarlo per eseguire il servizio MSSQLServer.

>Grazie
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

waltmc Profilo | Newbie

Ho provato, ma col medesimo errore. Inoltre sul file ho dato permessi full control ad everyone...


Ho forse trovato un altra strada: da enterprise manager ho provato a creare un pacchetto DTS ma non l'ho mai fatto prima... ho usato "attiva trasforma dati" che funziona, MA ad ogni esecuzione reimporta tutto e duplica i record, mentre a me serve un import differenziale....

lbenaglia Profilo | Guru

>Ho provato, ma col medesimo errore. Inoltre sul file ho dato
>permessi full control ad everyone...
E sulla share?

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

waltmc Profilo | Newbie

idem sulla condivisione.

Sto provando la strada del pacchetto DTS: con quello sembra funzionare.
Però era interessante capire cxome fare con openrowset...
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5