Copiare tabelle di Microsoft access

mercoledì 02 luglio 2008 - 09.51

barbara802000 Profilo | Newbie

Buongiorno a tutti il mio problema è il seguente:
Ho due database.mdb
db1.mdb si trova nella directory E:,db2.mdb si trova nella directory X:;
I due database hanno la stessa struttura e ciascuno contiene 4 tabelle
Io vorrei creare una query che mi prenda una tabella da db1.mdb e me la copi nella corrispettiva tabella(le tabelle dei due database hanno gli stessi nomi)del db2.mdb
Come posso fare?
La funzione che ho utilizzato è la seguente:
Private Sub CommandButton1_Click() Dim query As String Dim rs As DAO.Recordset Set db = DAO.OpenDatabase(pathDbaseLocal) query = "INSERT INTO GeneraleProcesso SELECT * FROM GeneraleProcesso IN 'E:\db1.mdb' " db.Execute (query) db.Close MsgBox ("Database Locale copiato su Remoto"), vbInformation End Sub
Io quindi vorrei copiare la tabella GeneraleProcesso di X:\db2.mdb in GeneraleProcesso di E:\db1.mdb cioè sovrascrivere la tabella
Come posso Fare?
Grazie

exeicom Profilo | Newbie

Ciao Barbara, mi puoi dire che linguaggio usi per lo script ? Fai tutto in access o utilizzi asp/aspx ?

barbara802000 Profilo | Newbie

Il visual basic;
Lo faccio utilizzando una userform che lancia attraverso il visual basic quella funzione

lbenaglia Profilo | Guru

>Io vorrei creare una query che mi prenda una tabella da db1.mdb
>e me la copi nella corrispettiva tabella(le tabelle dei due database
>hanno gli stessi nomi)del db2.mdb
>Come posso fare?

Ciao Barbara,

fai riferimento a questo thread:
http://www.dotnethell.it/forum/messages.aspx?ThreadID=3853

>Grazie
Prego.

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

barbara802000 Profilo | Newbie

Mi ero dimenticata di postare la suguente linea di codice che è presente nella mia funzione
Const pathDbaseLocal = "E:\RicettaCalandraBollate.mdb"
e volevo chiedere devo aprirmi anche il database X:\RicettaCalandraBollate.mdb ?

lbenaglia Profilo | Guru

>volevo chiedere devo aprirmi anche il database X:\RicettaCalandraBollate.mdb?
Se utilizzerai la tecnica suggerita nel thread che ti ho indicato, non è necessario.

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

barbara802000 Profilo | Newbie

Ho provato a utilizzare la tecnica suggerita in quel Threads scrivendo il codice in questa maniera
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
Ma non funziona mi da un errore dicendomi che ci sono parametri insufficenti quando esegue la query
Sbaglio qualcosa nella scrittura del codice?
Grazie

lbenaglia Profilo | Guru

>Private Sub CommandButton1_Click()
>Dim query As String
>Const pathDbaseLocal = "E:\RicettaCalandraBollate.mdb"
>Set db = DAO.OpenDatabase(pathDbaseLocal)
>query = " INSERT INTO GeneraleProcesso SELECT T1.* FROM [MS ACCESS;Database=E:\RicettaCalandraBollate.mdb].GeneraleProcesso
>AS T1 LEFT JOIN GeneraleProcesso AS T2 ON T1.Codice=T2.Codice
>WHERE T2.Codice IS NULL"

1) Stai aprendo una connessione a "E:\RicettaCalandraBollate.mdb" e nella query referenzi ancora "E:\RicettaCalandraBollate.mdb"... c'è qualcosa che non quadra, no?

2) Le tabelle GeneraleProcesso hanno una colonna denominata "Codice" che costituisce la Primary Key?

>Grazie
Prego.

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

barbara802000 Profilo | Newbie

Le tabelle sono fatte in questa maniera (vedi allegato)
e io devo lanciare la query attraverso una userform,perchè io gestisco tutto questo con un supervisore(Rs View della rockwell)
Io ho un database sul mio Pc sulla partizione E: e un altro database sull'altro pc (quindi condivido in rete la partizione) chiamata x:
Io attravrso il mio supervisore do la possibilità di visualizzare le due tabelle e attraverso un buttone (CommandButton1_Click) dò la possibilità all'utente di scegliere se sovrascrivere tabella GeneraleProcesso del database su E: su tabella GeneraleProcesso di X: o il contrario con un altro bottone.
Capito il problema?
Grazie

lbenaglia Profilo | Guru

>Capito il problema?
Io si, ora scrivi correttamente le query che eseguono la sovrascrittura

>Grazie
Prego.

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

barbara802000 Profilo | Newbie

E su quello ho chiesto una mano perchè non so come si posso sovrascrivere solo una tabella del database;
Prima lo facevo sovrascrivendo tutto il database con la funzione FileCopy ora lo vorrei fare dando la possibilità di scegliere quale tabella sovrascrivere e non so come si fa
Puoi aiutarmi?
Grazie

barbara802000 Profilo | Newbie

se scrivessi in questa maniera la query
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
dove Calandra2 e il nome del server dell'altro pc(corrispondente a X:) e backup è la cartella dove e condivisa il file access.mdb non funziona comunque perchè mi dice parametri insufficienti nella query dove è allora l'errore?
Grazie

lbenaglia Profilo | Guru

>query = " INSERT INTO GeneraleProcesso SELECT T1.* FROM [MS ACCESS;Database=\\Calandra2\backup\RicettaCalandraBollate.mdb].GeneraleProcesso
>AS T1 LEFT JOIN GeneraleProcesso AS T2 ON T1.Codice=T2.Codice
>WHERE T2.Codice IS NULL"

>dove Calandra2 e il nome del server dell'altro pc(corrispondente
>a X:) e backup è la cartella dove e condivisa il file access.mdb
>non funziona comunque perchè mi dice parametri insufficienti
>nella query dove è allora l'errore?

La tabella GeneraleProcesso non ha la colonna Codice, pertanto Access interpreta "Codice" come un parametro mancante.
Quello che mi premeva farti notare è la sintassi per referenziare oggetti remoti (quindi "FROM [MS ACCESS;Database=\\ServerRemoto\share\database.mdb]").
Ora, se intendi sovrascrivere una tabella remota devi prima di tutto svuotarla con una DELETE e ripopolarla tramite INSERT...SELECT, lasciando perdere la LEFT JOIN.

>Grazie
Prego.

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

barbara802000 Profilo | Newbie

E non esiste una maniera più breve?
perchè lo sapevo che esisteva una maniera dove svuotavo la tabella e poi inserivo i dati caricandola dall'altro ma non esiste una maniera più breve?
una funziona che mi permetta di sovrascriere solo la tabella (come ad esempio esisteva la FileCopy per sovrascrivere database?)?
Grazie

lbenaglia Profilo | Guru

>E non esiste una maniera più breve?
No.

>Grazie
Prego.

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

barbara802000 Profilo | Newbie

E questo forum http://www.dotnethell.it/forum/messages.aspx?ThreadID=10116
o meglio questa riga di codice
insert into tabella1 select * from tabella1 in 'c:\\db1.mdb'
scritta in questa discussione cosa fa?
Grazie

lbenaglia Profilo | Guru

>E questo forum http://www.dotnethell.it/forum/messages.aspx?ThreadID=10116
>o meglio questa riga di codice
>insert into tabella1 select * from tabella1 in 'c:\\db1.mdb'
>scritta in questa discussione cosa fa?

Accoda in tabella1 le righe della tabella tabella1 che risiede nel file db1.mdb
Attenzione che se tabella1 contiene già delle righe, al termine del comando di INSERT le due tabelle NON saranno uguali.
Per esserlo devi preventivamente svuotarla con una DELETE FROM tabella1;

>Grazie
Prego.

Ciao!

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

barbara802000 Profilo | Newbie

Esiste una maniera per cancellare solo i valori della tabella e non anche tutti i campi(cioè nomi delle colonne?)
Perchè se io facessi
query="delete * from GeneraleProcesso"
sicuramente andrebbe a cancellarmi tutti i campi compreso i nomi delle colonne vero?

lbenaglia Profilo | Guru

>Esiste una maniera per cancellare solo i valori della tabella
>e non anche tutti i campi(cioè nomi delle colonne?)
>Perchè se io facessi
>query="delete * from GeneraleProcesso"
>sicuramente andrebbe a cancellarmi tutti i campi compreso i nomi
>delle colonne vero?
No, il comando DELETE elimina LE RIGHE di una tabella, le colonne e tutti gli altri metadati rimangono immutati.

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

barbara802000 Profilo | Newbie

Allora ciò che ho fatto a livello di codice è questo:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Questo però non funziona come mai?
POtresti aiutarmi a capire dove è l'errore?
Grazie

lbenaglia Profilo | Guru

>Allora ciò che ho fatto a livello di codice è questo:
>Const pathDbaseLocal = "E:\RicettaCalandraBollate.mdb"
>Const pathDbaseRemote = "X:\RicettaCalandraBollate.mdb"
>Private Sub CommandButton1_Click()
>Dim query As String
>Dim query1 As String
>Dim rs As DAO.Recordset
>Set db = DAO.OpenDatabase(pathDbaseLocal)
>Set db1 = DAO.OpenDatabase(pathDbaseRemote)
>
>'cancella tabella remoto
>
>query = "Delete * From GeneraleProcesso"
>db1.Execute (query)
Qui stai svuotando la tabella remota (X:)

>'a questo punto devo prendere i dati da tabella di locale e copiarli
>in remoto
>query1 = "INSERT INTO GeneraleProcesso select * From GeneraleProcesso
>in 'E:\RicettaCalandraBollate.mdb' "
>db.Execute (query1)
Qui stai popolando la tabella locale (E:) con se stessa.
Se ho capito bene quello che vuoi fare prova a modificare il comando in questo modo:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

>Grazie
Prego.

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

barbara802000 Profilo | Newbie

Se faccio una cosa del genere mettendo poi alla fine
db1.Execute(query1)
o anche provando con db.Execute(query1)
mi da un errore
dicendo "Nessun record corrente"

lbenaglia Profilo | Guru

>Se faccio una cosa del genere mettendo poi alla fine
>db1.Execute(query1)
>o anche provando con db.Execute(query1)
>mi da un errore
>dicendo "Nessun record corrente"

Ho provato in locale da me a creare un esempio completo, popolando la tabella remota Students (la cui struttura è riportata nel thread indicato) con la seguente query:

INSERT INTO [MS ACCESS;Database=D:\documenti\db2.mdb].Students SELECT * FROM Students;

La query funziona perfettamente.
Sinceramente non ho idea per quale motivo a te non funzioni...

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

barbara802000 Profilo | Newbie

Ok funziona, si era bloccato semplicemente il programma
Grazie mille
Ciao

maury1704 Profilo | Newbie

Salve mi chiamo Maurizio e sono un Autodidatta con il Linguaggio di Programmazione Visual Basic 6.0 :
Vi Scrivo Perche' desidererei sapere e come posso fare , per far comparire sul form1 un icona Gif o video in
movimento in modo che sisulti senpre attivo o ripetitivo che sia !
in poche parole vorrei visualizzare in un modo anche molto blando dato il Linguaaggio Adottato ;
le previsioni del tempo pero' in modo
animato, come si vede spesso per Televisione.

In piu' vorrei sapere come posso far comparire un indice che va dall 1 all 30 / 31 in " label " Separate
che in modo tale pero' che ad ogni numero richiesto ed evidenziato per " Label ", mi vada a corrispondere
esattamente al giorno della settimana come se fosse un calendario Perpetuo ma in questo caso con a tabelle
(Label).
In quanto sino ad qui sono gia' riuscito anche io ad construire un qualche cosa di analogo : soltanto che il
numero da me richiesto non corrisponde mai al giorno della Settimana ; e se' sforzo il tutto mi spariscono
dei numeri Iniziali ; Come devo fare per risolvere il Tutto !
Grazie della Collaborazione Distinti saluti . G. Maurizio

Tabella Riassuntiva:
-----------------------------------------------|
Lun - Mar - Mer - Gio - Ven - sab - Dom |
-----------------------------------------------|
1 2 3 4 5 6 7 |
|
8 9 10 11 12 13 14 |
|
15 16 17 18 19 20 21 |
|
22 23 24 25 26 27 28 |
|
29 30 31 |
----------------------------------------------|
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