Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Access2000: tabelle collegate

Buongiorno a tutti!
 Lavoro con VB6 Sp4 e Access2000 su WinME:
Quando collego una tabella esterna al mio anagrafico (tipicamente,
quella di un db di Località), nella tabella nascosta MSysObjects viene
registrato tale collegamento, e nella colonna Database viene inserito
il path completo del database delle Località.
Logicamente, quando andrò ad installare il mio programma sui client, i
database potranno trovarsi in tutt'altre directory, e quindi dovrei
modificare questo collegamento, rendendolo possibilmente relativo
(tipo App.Path & localita.mdb) o comunque modificare il path in
MSysObjects.
Se fossi io presente ed usassi Access, non ci sarebbero problemi, ma
vorrei farlo in automatico, tramite VB.
Ma tramite DataEnvironment, non riesco a visualizzare la MSysObjects e
quindi neanche il campo da modificare. Non posso cambiare la proprietà
"nascosto" della MSysObjects perché è classificata come "Engine"...
Come fare? Aiutatemi!
Potete rispondermi anche via email a hitech AT 
virgilio.it
--
Brian T
Risposte via email a ::
#hitech@#
virgilio.it#

 Ma tramite DataEnvironment, non riesco a visualizzare la MSysObjects e
quindi neanche il campo da modificare. Non posso cambiare la proprietà
"nascosto" della MSysObjects perché è classificata come "Engine"...
Hai considerato la possibilita` di non allegare le tabelle ed accedere
direttamente ai database?
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------

 ha scritto nel messaggio
news:d4vt4tsjbe5ia8g11...@4ax.com...

Ciao,
Io uso questo sistema con Acces 2000 (uso DAO):
Ho divisi il mio archivio in due file. Uno con le maschere i report ecc.ecc
e l' altro solo le tabelle che devo allegare al primo
la prima volta faccio aprire una finestra di Dialogo per ricercare il path
del file.mdb da cui voglio allegare le tabelle
Preventivamente ho preparato una tabellina con i nomi di tutte le tabelle
che voglio allegare e che presumibilmente si trovano nell' archivio mdb di
cui ho il percorso.
Con un loop allego tutte le tabelle.
Fatto la prima volta, non lo devi più rifare a meno che non decidi di
cambiare archivio.
Dovrebbe funzionare così com'è (???).Dovrebbe essere adattabile anche a VB4.
Ciao
'***************************************************************************
********
Function collega_2(Nome As String) As Boolean
    Dim MioDB As Database
    Dim MiaTable As TableDef
    Dim MioSet As Recordset
    Dim Num As Integer
    Dim ValRestituito As Variant
    Dim msg As String
'***************************************************************************
********
' QUESTA FUNZIONE, PERMETTE
' DI AGGIORNARE IL COLLEGAMENTO DELLE TABELLE ALLEGATE DI UN DATABASE CON
QUELLE DI
' UN ALTRO DATABASE SCELTO DALL'UTENTE TRAMITE FINESTRA DI DIALOGO.
' LE TABELLE CHE VERRANNO RIALLEGATE SONO CONTENUTE NELLA TABELLA DI
APPOGGIO:
'"create table tbl_tabelle ([nome] text(50));"
'la funzia ritorna OK se tutto è andato a buon fine, NOK altrimenti
'
Function collega_2(Nome As String) As Boolean
    Dim MioDB As Database
    Dim MiaTable As TableDef
    Dim MioSet As Recordset
    Dim Num As Integer
    Dim ValRestituito As Variant
    Dim msg As String
    '********************************************************************
    ' SE E' TUTTO OK, IN 'NOME' CI SARA' IL PERCORSO DEL DATABASE SCELTO
    '********************************************************************
        ' inizio fase di riallegamento tabelle
        On Error GoTo gestione_errori_collega_2
        Set MioDB = CurrentDb()
        Set MioSet = MioDB.OpenRecordset("tbl_tabelle")<-----elenco tabelle
da allegare
        MioSet.MoveFirst
        Num = 1
        Do Until MioSet.EOF
            ValRestituito = SysCmd(acSysCmdUpdateMeter, Num)
            Set MiaTable = MioDB.TableDefs(MioSet.Fields("NOME").Value)
            MiaTable.Connect = ";DATABASE=" & Nome
            MiaTable.RefreshLink
            Num = Num + 1
            MioSet.MoveNext
        Loop
        collega_2 = True
        Exit Function
gestione_errori_collega_2:
    If Err = 3265 Then
        msg = "La tabella allegata " & MioSet.Fields("NOME").Value & ",
necessaria "
        msg = msg & "all'elaborazione, non è stata trovata nel presente
database." & vbCrLf
        msg = msg & vbCrLf & "Contattare supporto informatico."
        MsgBox msg, 16, "ELABORAZIONE INTERROTTA!!!"
        ValRestituito = SysCmd(acSysCmdClearStatus)
        GoTo fine_collega_2_errore:
    ElseIf Err = 3011 Then
        msg = "La tabella allegata " & MiaTable.name & ", necessaria
all'elaborazione, "
        msg = msg & "non è stata trovata nel database remoto" & vbCrLf
        msg = msg & vbCrLf & Nome & vbCrLf & vbCrLf
        msg = msg & "al quale ci si è connessi." & vbCrLf
        msg = msg & vbCrLf & "Contattare supporto informatico."
        MsgBox msg, 16, "ELABORAZIONE INTERROTTA!!!"
        ValRestituito = SysCmd(acSysCmdClearStatus)
        GoTo fine_collega_2_errore:
    ElseIf Err = 3049 Then
        msg = "Il file scelto" & vbCrLf & Nome & vbCrLf
        msg = msg & "è un database danneggiato o non è un database Access."
& vbCrLf
        msg = msg & "Controllare di aver selezionato il file giusto o
tentare di "
        msg = msg & "recuperarlo chiudendo il presente database e
selezionando il "
        msg = msg & "menu File-Recupera database." & vbCrLf & vbCrLf
        msg = msg & "In caso di ulteriore insuccesso contattare il supporto
informatico."
        MsgBox msg, 16, "ELABORAZIONE INTERROTTA!!!"
        ValRestituito = SysCmd(acSysCmdClearStatus)
        GoTo fine_collega_2_errore:
    Else
        msg = "Errore non prevedibile N°." & Err & vbCrLf
        msg = msg & """" & Error(Err) & """" & vbCrLf
        msg = msg & vbCrLf & "Contattare supporto informatico."
        MsgBox msg, 16, "ELABORAZIONE INTERROTTA!!!"
        ValRestituito = SysCmd(acSysCmdClearStatus)
        GoTo fine_collega_2_errore:
    End If
fine_collega_2_errore:
    collega_2 = False
End Function


wrote:
