Pagina 3 di 3 primaprima 1 2 3
Visualizzazione dei risultati da 21 a 28 su 28
  1. #21
    Originariamente inviato da alexxxb
    Ciao, riprendo questo thread per una domanda collegata: è possibile verificare in apertura che ci sia il collegamento con il db?
    Se tolgo il db collegato in apertura mi da tutta una serie di errori, mentre io vorrei evitarli, magari con un controllo che verifichi l'esistenza del db.
    Si può fare?
    secondo me avresti fatto meglio ad aprire un thread nuovo.

    guarda con la guida in linea la Funzione Dir

    se invece vuoi verificare che sul db in front end sia presenti tabelle collegate dai un'occhiata a questa routine (la tabella inserita non la devi creare, fa parte di quelle di sistema nascoste da access)
    codice:
    Dim Rst As DAO.Recordset
    Dim sql As String
    
    
    sql = "SELECT MSYSOBJECTS.* FROM MSYSOBJECTS WHERE (((MSYSOBJECTS.Type)=6))"
    
    
        Set Rst = CurrentDb.OpenRecordset(sql) 'apre recorset
    
        If Not Rst.BOF Then 'se il recordset non è vuoto
            MSGBOX "TABELLE COLLEGATE"
    
        Else 'Not Rst.BOF (il recorset è vuoto)
            MsgBox "TABELLE NON COLLEGATE"
            
        End If 'Not Rst.BOF
      
      'chiudi e azzera il recordset
            Rst.Close: Set Rst = Nothing
    Il numero di pecorelle scannate dai pastori è di gran lunga superiore al numero di pecorelle mangiate dai lupi. Per cui, se qualcuno si proponesse di essere il vostro pastore per salvarvi dai lupi, pensateci bene.

  2. #22
    Utente di HTML.it L'avatar di alexxxb
    Registrato dal
    Oct 2007
    Messaggi
    124
    Grazie!

  3. #23
    alla prossima.
    Il numero di pecorelle scannate dai pastori è di gran lunga superiore al numero di pecorelle mangiate dai lupi. Per cui, se qualcuno si proponesse di essere il vostro pastore per salvarvi dai lupi, pensateci bene.

  4. #24
    Utente di HTML.it L'avatar di alexxxb
    Registrato dal
    Oct 2007
    Messaggi
    124
    Riprendo questo thread per un'ulteriore domanda:

    come posso verificare, all'apertura della mia applicazione, che TUTTE le tabelle siano effettivamente collegate al db?

    Mi spiego meglio: con i controlli visti fino ad ora abbiamo collegato il db e verificato, in apertura, che il path sia corretto. E fino a qui tutto ok.
    Però ho notato che se io nel db cambio il nome di una tabella, all'apertura dell'applicazione non viene rilevato il nome cambiato (perchè verifica solo che il path sia corretto), e l'applicazione quando richiamerò quella particolare tabella mi andrà in errore.

    Io quindi in apertura vorrei effettuare un ulteriore controllo che mi dica che QUELLA specifica tabella non è stata trovata.
    Come posso fare?

  5. #25
    scusa ma il codice che ti avevo postato e che ti riporto di seguito credo faccia già quello che chiedi
    Originariamente inviato da borgodiavalon
    questo non l'avevo visto, abbiamo scritto insieme.

    allora possiamo gestire l'errore
    codice:
    dim rst As DAO.Recordset
    dim sql as string, MyMess as string
    
    'apre recorset
    sql = "SELECT * FROM collegamento_tabelle"
    Set rst = CurrentDb.OpenRecordset(sql)
         
        
        If Not rst.BOF Then 'verivica se il recordset non è vuoto
        
    	'scorro il recorset dal primo all'ultimo record
            With rst
                .MoveFirst 'posizionati sul primo record
    	While Not.EOF 
    	vedi sotto per l'aggiunta del codice 
               on error goto Errore_Collegamento
               DoCmd.TransferDatabase acLink, "microsoft access", rst!path, acTable, rst!nome_tabella, rst!nome_tabella, False
                on error goto 0
                .MoveNext 'passa al prossimo record
                Wend 'Not .EOF
            End With 'Rst
    	else
    msgbox "errore"
    end if
                  
            'chiudi e azzera il recordset
            rst.Close: Set rst = Nothing
    exit sub 
    
    Errore_Collegamento:
    MyMess ="errore collegamento, prendi nota della tabella. vuoi continuare?" & chr(13) & rst!nome_tabella
    Select Case MsgBox(MyMess, vbYesNo, "gestione errore")
        Case Is = vbYes
            resume next
        Case Is = vbNo
            exit sub 
    End Select
    a questo punto però ti si pone il problema di cancellare sempre le tabelle già collegate prima di ricollegare il database. quindi aggiungerei anche il codice:
    codice:
    on error resume next
    DoCmd.DeleteObject acTable, rst!nome_tabella
    on error goto 0
    dove ti ho scritto in rosso.
    Il numero di pecorelle scannate dai pastori è di gran lunga superiore al numero di pecorelle mangiate dai lupi. Per cui, se qualcuno si proponesse di essere il vostro pastore per salvarvi dai lupi, pensateci bene.

  6. #26
    Utente di HTML.it L'avatar di alexxxb
    Registrato dal
    Oct 2007
    Messaggi
    124
    Si, ma questo codice ogni volta mi esegue un nuovo link alle tabelle.
    codice:
    DoCmd.TransferDatabase acLink, "microsoft access", rst!path, acTable, rst!nome_tabella, rst!nome_tabella, False
    Io ho solo bisogno di un messaggio che mi dica se c'è una qualche tabella che nel be ha cambiato nome (o è stata cancellata) e che quindi non è più linkabile.

  7. #27
    scusa il ritardo.
    allora secondo me dovresti collegare anche la tabella di sistema MSysObjects (la vedi se da opzioni abiliti la visualizzazione degli oggetti di sistemi) chiamandola in un altro modo per non cancellare la stessa tabella del tuo db.

    dopo non farai altro che creare una query per dati non corrispondenti tra le tabelle MSysObjects collegata e rinominata e la MSysObjects del tuo db.

    questo di farà vedere le tabelle, maschere, report ecc che non corrispondono.
    Il numero di pecorelle scannate dai pastori è di gran lunga superiore al numero di pecorelle mangiate dai lupi. Per cui, se qualcuno si proponesse di essere il vostro pastore per salvarvi dai lupi, pensateci bene.

  8. #28
    Originariamente inviato da borgodiavalon
    supponendo una tabella chiamata collegamento_tabelle contenente il solo campo nome_tabella sull'evento click di un pulsante inserisci:

    codice:
    dim rst As DAO.Recordset
    dim sql as string
    
    'apre recorset
    sql = "SELECT T_VERSIONE_NUOVA.data, T_VERSIONE_NUOVA.versione FROM T_VERSIONE_NUOVA ORDER BY T_VERSIONE_NUOVA.data DESC"
    Set rst = CurrentDb.OpenRecordset(sql)
         
        
        If Not rst.BOF Then 'verivica se il recordset non è vuoto
        
    	'scorro il recorset dal primo all'ultimo record
            With rst
                .MoveFirst 'posizionati sul primo record
               DoCmd.TransferDatabase acLink, "microsoft access", "F:\test2\database2.mdb", acTable, rst!nome_tabella, rst!nome_tabella, False
                .MoveNext 'passa al prossimo record
                Wend 'Not .EOF
            End With 'Rst
    	else
    msgbox "errore"
    end if
                  
            'chiudi e azzera il recordset
            rst.Close: Set rst = Nothing


    supponendo una tabella chiamata collegamento_tabelle contenente i campi nome_tabella e path (dove in path verrà scritto il percorso completo del database compresa l'estensione es. F:\test2\database2.mdb) sull'evento click di un pulsante inserisci:

    codice:
    dim rst As DAO.Recordset
    dim sql as string
    
    'apre recorset
    sql = "SELECT T_VERSIONE_NUOVA.data, T_VERSIONE_NUOVA.versione FROM T_VERSIONE_NUOVA ORDER BY T_VERSIONE_NUOVA.data DESC"
    Set rst = CurrentDb.OpenRecordset(sql)
         
        
        If Not rst.BOF Then 'verivica se il recordset non è vuoto
        
    	'scorro il recorset dal primo all'ultimo record
            With rst
                .MoveFirst 'posizionati sul primo record
               DoCmd.TransferDatabase acLink, "microsoft access", rst!path, acTable, rst!nome_tabella, rst!nome_tabella, False
                .MoveNext 'passa al prossimo record
                Wend 'Not .EOF
            End With 'Rst
    	else
    msgbox "errore"
    end if
                  
            'chiudi e azzera il recordset
            rst.Close: Set rst = Nothing
    Scusate se riprendo, ma volendo utilizzare la soluzione con la tabella dove vi sono i nomi tabella da collegare, e il path a cui fare riferimento, se il be è protetto da password, come faccio a passargliela automaticamente da vba??
    grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.