Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Tabelle collegqate da VBA

834 views
Skip to first unread message

Pisinho

unread,
Mar 8, 2010, 9:51:50 AM3/8/10
to
SAlve,
vorrei gestire le Tabelle collegate tramite VBA, in questo modo posso
cambiare senza troppi click, le tabelle collegate di un DB di Produzione con
quello di TEST o fare altre cose al VOLO.

Avete qualche link da suggerirmi , per adesso non ho trovato molto di ben
fatto o almeno spiegato bene.

Grazie mille.


__________ Informazioni da ESET NOD32 Antivirus, versione del database delle firme digitali 4924 (20100308) __________

Il messaggio � stato controllato da ESET NOD32 Antivirus.

www.nod32.it

OneEDP

unread,
Mar 8, 2010, 11:53:10 AM3/8/10
to
Non so se ti ho risposto ma perdonami se l'ho gi� fatto.
Il 3d "Tabelle ODBC Collegate" spazia un po'.
Ciao
Daniele

Pisinho

unread,
Mar 9, 2010, 2:56:17 AM3/9/10
to

> Non so se ti ho risposto ma perdonami se l'ho gi� fatto.
> Il 3d "Tabelle ODBC Collegate" spazia un po'.
> Ciao
> Daniele
>
>

Capisco che l'argomento sia vasto , ma non c'� un modo semplice per linkare
al volo delle tabelle di un DB invece di un altro ?

Cambia solo il riferimento al DB.

Se hai qualche link da passare...

Comunque grazie.

Saluti

__________ Informazioni da ESET NOD32 Antivirus, versione del database delle firme digitali 4927 (20100309) __________

OneEDP

unread,
Mar 9, 2010, 3:38:59 AM3/9/10
to
Perch� non cambi la connessione ODBC al volo cambiando il database da
quello di produzione a quello di test?
Oppure ti cambi la stringa di connessione e modifichi solo
l'informazione del db.
Cmq io terrei DUE connessioni diverse e due mdb per sicurezza... se
lanci una delete in produzione pensando che sia quelle di test.... non
oso immaginare
Ciao
Daniele

marcopio

unread,
Mar 9, 2010, 3:40:21 AM3/9/10
to
On 9 Mar, 08:56, "Pisinho" <pisi...@gmail.com> wrote:
> > Non so se ti ho risposto ma perdonami se l'ho già fatto.

> > Il 3d "Tabelle ODBC Collegate" spazia un po'.
> > Ciao
> > Daniele
>
> Capisco che l'argomento sia vasto , ma non c'è un modo semplice per linkare

> al volo delle tabelle di un DB invece di un altro ?
>
> Cambia solo il riferimento al DB.
>
> Se hai qualche link da passare...
>
> Comunque grazie.
>
> Saluti
>
> __________ Informazioni da ESET NOD32 Antivirus, versione del database delle firme digitali 4927 (20100309) __________
>
> Il messaggio è stato controllato da ESET NOD32 Antivirus.
>
> www.nod32.it

Io uso delle sub che mi sono fatto,
vedi se ti possono essere utili.
La stringa di connessione (strConn) dipende dall'ODBC a cui ti
colleghi
(puoi collegare una tabella a mano e poi vedere in struttura ->
visualizza -> proprietà)

1.
Public Function CollegaTabella(strConn As String, strTbOrig As String,
strTBDest As String)

Dim tdfTbOrig As TableDef

Set tdfTbOrig = CurrentDb.CreateTableDef(strTBDest)
tdfTbOrig.Attributes = dbAttachSavePWD
tdfTbOrig.Connect = strConn
tdfTbOrig.SourceTableName = strTbOrig
CurrentDb.TableDefs.Append tdfTbOrig

End Function

2.
Public Function ScollegaTabella(strTBDest As String)

CurrentDb.TableDefs.Delete (strTBDest)

End Function

3.
Public Function ScollegaLeTabelle()

Dim rstScratch As Recordset

Set rstScratch = CurrentDb.OpenRecordset("SELECT MSysObjects.Connect,
MSysObjects.Name" _
& " FROM MSysObjects" _
& " WHERE (((MSysObjects.Connect) Is Not Null))")
If rstScratch.RecordCount > 0 Then
rstScratch.MoveFirst
Do While Not rstScratch.EOF
Call ScollegaTabella(rstScratch!Name)
rstScratch.MoveNext
Loop
End If

End Function

per sintesi ho eliminato la gestione degli errori

Dovrebbe essere quello che ti serve
HTH, mpio.

MA

unread,
Mar 9, 2010, 12:07:51 PM3/9/10
to

"marcopio" <mdre...@more-oxy.com> ha scritto nel messaggio
news:a9627394-4eff-4d4d...@f8g2000yqn.googlegroups.com...

On 9 Mar, 08:56, "Pisinho" <pisi...@gmail.com> wrote:
> > Non so se ti ho risposto ma perdonami se l'ho gi� fatto.

> > Il 3d "Tabelle ODBC Collegate" spazia un po'.
> > Ciao
> > Daniele
>
> Capisco che l'argomento sia vasto , ma non c'� un modo semplice per
> linkare
> al volo delle tabelle di un DB invece di un altro ?
>
> Cambia solo il riferimento al DB.
>
> Se hai qualche link da passare...
>
> Comunque grazie.
>
> Saluti
>
> __________ Informazioni da ESET NOD32 Antivirus, versione del database
> delle firme digitali 4927 (20100309) __________
>
> Il messaggio � stato controllato da ESET NOD32 Antivirus.
>
> www.nod32.it

Io uso delle sub che mi sono fatto,
vedi se ti possono essere utili.
La stringa di connessione (strConn) dipende dall'ODBC a cui ti
colleghi
(puoi collegare una tabella a mano e poi vedere in struttura ->

visualizza -> propriet�)

Dim tdfTbOrig As TableDef

End Function

CurrentDb.TableDefs.Delete (strTBDest)

End Function

3.
Public Function ScollegaLeTabelle()

Dim rstScratch As Recordset

End Function


___
E se dopo aver cancella la tabelle per qualsiasi motivo si interrompe il
codice?
come hai l'elenco delle tabelle dal sysobject?


Usa una tab di elenco delle tabelle


@Alex

unread,
Mar 9, 2010, 12:16:47 PM3/9/10
to
On 8 Mar, 15:51, "Pisinho" <pisi...@gmail.com> wrote:
> SAlve,
> vorrei gestire le Tabelle collegate tramite VBA, in questo modo posso
> cambiare senza troppi click, le tabelle collegate di un DB di Produzione con
> quello di TEST o fare altre cose al VOLO.
>
> Avete qualche link da suggerirmi , per adesso non ho trovato molto di ben
> fatto o almeno spiegato bene.
>
> Grazie mille.

Fatti una tabella nel BE o Server con l'elenco delle Tabelle da
Linkare.
Apri una connessione al Database accedi alla tabella Elenco ed inizia
a ciclare
i Record tentando di connettere le Tabelle con Nome recuperato dal
Recordset.
Chiudi la connessione e le tabelle sono collegate... GESTIONE ERRORI
prima di tutto.
Ricorda di rimuovere i collegamenti alla chiusura.

@Alex

marcopio

unread,
Mar 10, 2010, 5:02:13 AM3/10/10
to
On 9 Mar, 18:07, "MA" <s...@spam.it> wrote:
> "marcopio" <mdreo...@more-oxy.com> ha scritto nel messaggionews:a9627394-4eff-4d4d...@f8g2000yqn.googlegroups.com...

> On 9 Mar, 08:56, "Pisinho" <pisi...@gmail.com> wrote:
>
>
>
>
>
> > > Non so se ti ho risposto ma perdonami se l'ho già fatto.

> > > Il 3d "Tabelle ODBC Collegate" spazia un po'.
> > > Ciao
> > > Daniele
>
> > Capisco che l'argomento sia vasto , ma non c'è un modo semplice per

> > linkare
> > al volo delle tabelle di un DB invece di un altro ?
>
> > Cambia solo il riferimento al DB.
>
> > Se hai qualche link da passare...
>
> > Comunque grazie.
>
> > Saluti
>
> > __________ Informazioni da ESET NOD32 Antivirus, versione del database
> > delle firme digitali 4927 (20100309) __________
>
> > Il messaggio è stato controllato da ESET NOD32 Antivirus.

>
> >www.nod32.it
>
> Io uso delle sub che mi sono fatto,
> vedi se ti possono essere utili.
> La stringa di connessione (strConn) dipende dall'ODBC a cui ti
> colleghi
> (puoi collegare una tabella a mano e poi vedere in struttura ->
> visualizza -> proprietà)
> Usa una tab di elenco delle tabelle- Nascondi testo citato
>
> - Mostra testo citato -


> si interrompe il codice
Da quello che ho capito deve lavorare alternativamente su delle
tabelle oppure altre,
dopo aver connesso la tabella bisogna fare adeguati controlli prima di
proseguire con il codice,
non conosco l'applicazione, per questo credo che ne sappia di più
Pisinho.

Ovviamente serve anche la gestione degli errori, come dice Alex@,
io l'ho eliminata per il post, ma deve essere fatta.

Inoltre è da seguire l'altro consiglio di Alex@ di fare una tabella
con l'elenco,
ho i BE salvati sempre senza connessioni,
le faccio sempre all'avvio dell'applicazione.
Io uso una tabella sul server che come campi ha nome applicazione,
tabella da linkare, stringa di connessione
se Pisinho preferisce può anche aggiungere una flag per il link in
fase di test.

Comunque il mio intervento si limitava a dare un'indicazione su come
sonnettersi/sconnettersi.
Spero di essere stato utile.
Saluti, mpio.

NOTA a margine: leggendo quello che ho riportato è più bello se si
sostituisce tdfTbOrig con tdfTb

Pisinho

unread,
Mar 10, 2010, 8:54:42 AM3/10/10
to

>
> Fatti una tabella nel BE o Server con l'elenco delle Tabelle da
> Linkare.
> Apri una connessione al Database accedi alla tabella Elenco ed inizia
> a ciclare
> i Record tentando di connettere le Tabelle con Nome recuperato dal
> Recordset.
> Chiudi la connessione e le tabelle sono collegate... GESTIONE ERRORI
> prima di tutto.
> Ricorda di rimuovere i collegamenti alla chiusura.
>


Grazie a tutti, ma a parte che non c'ho capito niente come devo procedere
con il codice....
Mi manca un esempio semplice di una tabella con lo stesso nome su due
databases diversi, stesso server.
L'uso di questi cambiamenti al volo come ho spiegato � solo per utilizzare
in fase di Sviluppo del codice, il Databases di TEST,
quando rilascio il software, modifico solo una variabile e all'apertura
dell'applicazione vengono linkate le tabelle di produzione.

Di sicuro � banale e si pu� fare ma non ho codice diciamo di semplice
lettura per capire come operare sulle tabelle.

Grazie comunque a tutti.


__________ Informazioni da ESET NOD32 Antivirus, versione del database delle firme digitali 4931 (20100310) __________

marcopio

unread,
Mar 10, 2010, 9:25:14 AM3/10/10
to
On 10 Mar, 14:54, "Pisinho" <pisi...@gmail.com> wrote:
> > Fatti una tabella nel BE o Server con l'elenco delle Tabelle da
> > Linkare.
> > Apri una connessione al Database accedi alla tabella Elenco ed inizia
> > a ciclare
> > i Record tentando di connettere le Tabelle con Nome recuperato dal
> > Recordset.
> > Chiudi la connessione e le tabelle sono collegate... GESTIONE ERRORI
> > prima di tutto.
> > Ricorda di rimuovere i collegamenti alla chiusura.
>
> Grazie a tutti, ma a parte che non c'ho capito niente come devo procedere
> con il codice....
> Mi manca un esempio semplice di una tabella con lo stesso nome su due
> databases diversi, stesso server.
> L'uso di questi cambiamenti al volo come ho spiegato è solo per utilizzare

> in fase di Sviluppo del codice, il Databases di TEST,
> quando rilascio il software, modifico solo una variabile e all'apertura
> dell'applicazione vengono linkate le tabelle di produzione.
>
> Di sicuro è banale e si può fare ma non ho codice diciamo di semplice

> lettura per capire come operare sulle tabelle.
>
> Grazie comunque a tutti.
>
> __________ Informazioni da ESET NOD32 Antivirus, versione del database delle firme digitali 4931 (20100310) __________
>
> Il messaggio è stato controllato da ESET NOD32 Antivirus.
>
> www.nod32.it

Ci riprovo con un esempio per una tabella,
prova e fai sapere se ti riesce il tutto.
Se funzia, poi è più performante il discorso di tenere l'archivio
delle tabelle da linkare (e delle stringhe di connessione)
in una tabella e non nel codice.

Allora:

inserisci in un modulo queste tre funzioni:

Public Function EsisteTabella(NomeTabella As String) As Boolean
On Error GoTo Err_Handler

Dim dbsTb As Database
Dim tdfTb As TableDef
Dim intTab As Integer

Set dbsTb = CurrentDb
For Each tdfTb In dbsTb.TableDefs
If tdfTb.Name = NomeTabella Then
EsisteTabella = True
End If
Next tdfTb

Exit_Handler:
Exit Function
Err_Handler:
MsgBox Err.Number & Chr(10) & Err.Description & Chr(10) &
"Contattare Pisinho"
Resume Exit_Handler
End Function

Public Function CollegaTabella(strConn As String, strTbOrig As String,
strTBDest As String)

On Error GoTo Err_Handler

Dim tdfTb As TableDef

Set tdfTb = CurrentDb.CreateTableDef(strTBDest)
tdfTb.Attributes = dbAttachSavePWD
tdfTb.Connect = strConn
tdfTb.SourceTableName = strTbOrig
CurrentDb.TableDefs.Append tdfTb

Exit_Handler:
Exit Function
Err_Handler:
MsgBox Err.Number & Chr(10) & Err.Description & Chr(10) &
"Contattare Pisinho"
Resume Exit_Handler
End Function

Public Function ScollegaTabella(strTBDest As String)

On Error GoTo Err_Handler

CurrentDb.TableDefs.Delete (strTBDest)

Exit_Handler:
Exit Function
Err_Handler:
MsgBox Err.Number & Chr(10) & Err.Description & Chr(10) &
"Contattare Pisinho"
Resume Exit_Handler
End Function

poi, sull'evento click del pulsante per il test (o altro a tuo
piacere) per il test:

if EsisteTabella("NomeTuaTabella") Then
ScollegaTabella("NomeTuaTabella")
end if
strConn =
"ODBC;DSN=NomeDSN;UID=NomeUtente;PWD=password;DATABASE=DBTEST"
CollegaTabella(strConn , "NomeTuaTabella", "NomeTuaTabella")

poi, all'avvvio della tua applicazione rilasciata (se preferisci con
altro evento):

if EsisteTabella("NomeTuaTabella") Then
ScollegaTabella("NomeTuaTabella")
end if
strConn =
"ODBC;DSN=NomeDSN;UID=NomeUtente;PWD=password;DATABASE=DBWORK"
CollegaTabella(strConn , "NomeTuaTabella", "NomeTuaTabella")

come vedi cambia solamente il database.
puoi avere anche tabelle con nomi diversi (ma stessa struttura)
se così devi dare valori appropiati a strTbOrig e strTBDest

ricordati che devi costruirti un sistema sicuro per sapere dove stai
lavorando e non far confusione nei dati

HTH, mpio.


OneEDP

unread,
Mar 10, 2010, 9:41:44 AM3/10/10
to

IMHO Volendo separare il testing dalla produzione, terrei separate le
due connessioni non con il codice ma definendola proprio da
amministrazione odbc.
In pi� per ribadire la differenza utilizzare come rafforzativo nomi di
tabella con un prefisso del tipo TEST e poi creerei un utente apposito
per il testing.
COn la switching delle connessioni sono alti i rischi.
Non ce la faccio devo dirtelo. Con le qpt puoi ribadire il concetto con
"SELECT * FROM DBTesting.MyTable" lasciando inttatta la connessione
(initial catalogue magari di default su DBTesting non si sa mai). A
ridaie con le qpt. ;-)
Ciao

0 new messages