Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Allineamento tabelle Access
martedì 07 giugno 2005 - 16.10
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
assauei
Profilo
| Newbie
24
messaggi | Data Invio:
mar 7 giu 2005 - 16:10
Ciao a tutti,
mio malgrado mi trovo a lavorare con Access, devo fare in modo che una tabella su un database venga aggiornata quotidianamente sulla base della tabella di un altro database... sapete se Access è in grado di fare un allineamento di questo tipo?
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
mer 8 giu 2005 - 12:30
Ciao,
una bel problema. Effettivamente non ci ho mai pensato. Access in se non può farlo perchè il database è statico e risiede su disco, non c'è un servizio com in SQL Server.
Dipende dall'altra parte che database hai, dipende se sono sulla stessa subnet. In teoria se i dati non sono troppi potresti fare un webservice di transito che giri i dati da un DB all'altro che richiami tu via web, o tramite script.
Fornisci ulteriori info così troviamo una soluzione.
ciao
david
assauei
Profilo
| Newbie
24
messaggi | Data Invio:
mer 8 giu 2005 - 15:12
Ciao,
si tratta di due datbase access che girano all'interno della stessa subnet, le tabelle in questione contano circa 9000 record... non sono così tanti.
Forse la soluzione più semplice è uno script eseguito periodicamente che allinei i contenuti delle due tabelle.
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
mer 8 giu 2005 - 17:21
> mio malgrado mi trovo a lavorare con Access, devo fare in modo che una tabella su un database
> venga aggiornata quotidianamente sulla base della tabella di un altro database...
> sapete se Access è in grado di fare un allineamento di questo tipo?
Ciao assauei,
Come ti ha già indicato David, Access non possiede un engine server side, quindi non esiste una "entità" in grado di coordinare query distribuite.
Ad ogni modo Access implementa una simpatica feature che ti permette ugualmente di eseguire query distribuite ;-)
Supponiamo di avere db1.mdb e db2.mdb che risiedono fisicamente in una share su due server distinti e di voler allineare il contenuto della Tabella1.
Nel db1 potresti salvare una query che esegua il seguente comando SQL:
INSERT INTO Tabella1
SELECT T1.*
FROM [MS ACCESS;Database=\\server\share\Db2.mdb].Tabella1 AS T1
LEFT JOIN Tabella1 AS T2 ON T1.Codice=T2.Codice
WHERE T2.Codice IS NULL
Ovvero, inserisco nella Tabella1 del db1 tutte le righe di Tabella1 del db2 che non sono già presenti nel db1.
Analogamente sul db2 andrai a scrivere una query che esegue l'allineamento opposto:
INSERT INTO Tabella1
SELECT T1.*
FROM [MS ACCESS;Database=\\server\share\Db1.mdb].Tabella1 AS T1
LEFT JOIN Tabella1 AS T2 ON T1.Codice=T2.Codice
WHERE T2.Codice IS NULL
L'esecuzione di queste query puoi effettuarla scrivendo un banale .vbs che tramite DAO o ADO vada ad interfacciarsi con i db e schedularne l'esecuzione ad un orario predefinito tramite uno Scheduled Task.
Ovviamente dovrai associare al task un utente in grado di accedere alle corrispettive share.
Prova a lavorarci un po' sopra ed in caso di dubbi siamo qua a disposizione :-)
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://mvp.support.microsoft.com
http://italy.mvps.org
assauei
Profilo
| Newbie
24
messaggi | Data Invio:
mer 8 giu 2005 - 19:33
fantastico!
c'è un solo problema... mi capita spesso di usare l'asp anche se non è il linguaggio che utilizzo di più, per 'utilizzare uno script' infatti intendevo uno script asp... ma come si fa con .vbs? puoi farmi un esempio di come dovrebbe essere lo script?
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
gio 9 giu 2005 - 00:28
> intendevo uno script asp... ma come si fa con .vbs?
> puoi farmi un esempio di come dovrebbe essere lo script?
Allora, vediamo un esempio concreto.
Supponiamo di avere la tabella Students nei database db1.mdb e db2.mdb con la seguente struttura:
StudentID - Number e Primary Key
FirstName - Text(20)
LastName - Text(20)
La tabella db1.Students è popolata con i seguenti studenti:
StudentID..FirstName..LastName
----------- ----------- ---------
1.................Lorenzo.......Benaglia
2.................Luca............Bianchi
3.................Andrea........Montanari
La tabella db2.Students è popolata con i seguenti studenti:
StudentID..FirstName..LastName
----------- ----------- ---------
1.................Lorenzo.......Benaglia
4.................Gianluca......Hotz
Per semplicità i due database risiedono in locale sulla mia macchina (Supermicro) nelle seguenti share:
\\Supermicro\share1\db1.mdb
\\Supermicro\share2\db2.mdb
OK, andiamo a definire le query qryAlignDatabase in entrambi i database.
db1:
INSERT INTO Students
SELECT S1.*
FROM [MS ACCESS;Database=\\Supermicro\share2\db2.mdb].Students AS S1
LEFT JOIN Students AS S2 ON S1.StudentID = S2.StudentID
WHERE S2.StudentID IS NULL;
db2:
INSERT INTO Students
SELECT S1.*
FROM [MS ACCESS;Database=\\Supermicro\share1\db1.mdb].Students AS S1
LEFT JOIN Students AS S2 ON S1.StudentID = S2.StudentID
WHERE S2.StudentID IS NULL;
A questo punto preparo gli sctipt AlignDatabase1.vbs e AlignDatabase2.vbs che verranno schedulati sui corrispettivi server.
AlignDatabase1.vbs
<BOF>
Dim cn
Dim strFirstName
Const CN_STRING = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\share1\db1.mdb;"
On Error Resume Next
' Apro la connessione
Set cn = CreateObject("ADODB.Connection")
cn.ConnectionString = CN_STRING
cn.open
' Eseguo la query qryAlignDatabase
cn.Execute "qryAlignDatabase"
' Chiudo la connessione e distruggo l'oggetto
cn.close
Set cn = Nothing
<EOF>
AlignDatabase2.vbs
<BOF>
Dim cn
Dim strFirstName
Const CN_STRING = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\share2\db2.mdb;"
On Error Resume Next
' Apro la connessione
Set cn = CreateObject("ADODB.Connection")
cn.ConnectionString = CN_STRING
cn.open
' Eseguo la query qryAlignDatabase
cn.Execute "qryAlignDatabase"
' Chiudo la connessione e distruggo l'oggetto
cn.close
Set cn = Nothing
<EOF>
Beh, ora non ti resta che definire uno scheduled task sui due server che esegua periodicamente i .vbs
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://mvp.support.microsoft.com
http://italy.mvps.org
assauei
Profilo
| Newbie
24
messaggi | Data Invio:
ven 10 giu 2005 - 09:12
perfetto!
non potevi essere più chiaro, grazie mille.
Torna su
Stanze Forum
Elenco Threads
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 !