Istruzione vba (access) - verificare se due specifiche colonne sono presenti in una tabella - come correggere la mia istruzione

Anonimo
2024-01-06T16:17:51+00:00

descrizione: utilizzo una macro e la chiamo Fase12A

quindi, visto che nella tabella [MDCR]  potrebbero mancare le colonne [ISTAComune]  e [ISTATProvincia], e  che tale assenza  non consentirebbe l'allineamento  di MDCR  con un altro database che ne legge i contenuti, per prima cosa devo accertarmi che queste 2 colonne  siano già presenti ( NB: la condizione di verifica dovrebbe verificare la presenza di entrambe)

Avviando la macro Fase12A, pur essendo entrambe presenti le due colonne , visualizzo la maschera

'Miafinestra= MsgBox("le colonne [ISTATComune]e [ISTATProvincia]  non sono presenti",vbokonly)

ed ovviamente non vengono effettuate le nuove formattazioni

Chiarisco che non ho grandi nozioni di vba e che ho cercato di adattare istruzioni già trovate in rete secondo le mie esigenze, motivo per cui sicuramente ho fatto degli errori. ringrazio anticipatamente per i vs. chiarimenti e o suggerimenti.

Function Fase12A() ' mia macro

On Error GoTo Macro1_Err

Dim db As DAO.Database

Dim tdf As DAO.TableDef

Dim fld As DAO.Field

Set db = CurrentDb

Set tdf = db.TableDefs("MDCR")

For Each fld In tdf.Fields

    With fld

            If .Name Like "ISTATComune" And .Name Like "ISTAProvincia" Then Miafinestra= MsgBox ("confermo, entrambe le colonne presenti",vbyesno)    

if Miafinestra = vbYes Then  

'verificato che entrambe le colonne sono presenti avvio la correzione del formato da numerico in testo (6 o 3 caratteri) e modifico il formato in "000000" o "000"

           DoCmd.RunSQL "ALTER TABLE MDCR ALTER COLUMN ISTATComune TEXT(6)"

           DoCmd.RunSQL "UPDATE MDCR SET MDCR.ISTATComune = Format([ISTATComune],'000000')"

           DoCmd.RunSQL "ALTER TABLE MDCR ALTER COLUMN ISTATProvincia TEXT(3)"

           DoCmd.RunSQL "UPDATE MDCR SET MDCR.ISTATProvincia = Format([ISTATProvincia],'000')"

else

             Miafinestra= MsgBox("le colonne [ISTATComune]e [ISTATProvincia]  non sono presenti",vbokonly)

if Miafinestra = vbok Then   Exit Function

 end if

      End With

    Next

Macro1_Exit:

   Exit Function

Macro1_Err:

    MsgBox Error$

    Resume Macro1_Exit

    End Function

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

4 risposte

Ordina per: Più utili
  1. Anonimo
    2024-01-09T14:08:03+00:00

    ciao Silvestro2004,

    mi piace molto l'idea di gestire l'errore. Valuta quanto segue, da modificare inserendo quanto mancante per tutte le colonne oggetto del controllo.

    Sarebbe da capire bene l'intero scenario, soprattutto l'aspetto che i db e/o le tabella non sono allineate....

    On Error GoTo errHandler 
    
    DBEngine(0)(0).Execute "ALTER TABLE MDCR ALTER COLUMN ISTATComune TEXT(6)", H80 
    
    VBA.MsgBox prompt:="Procedura completata correttamente", _ 
    
                                   buttons:=vbInformation + vbOKOnly, _ 
    
                                   Title:="Informazione!" 
    
    exithere: 
    
        Exit Sub 
    
    errHandler: 
    
        With Err 
    
            Select Case .Number 
    
                    Case 3018 
    
                        VBA.MsgBox prompt:="Controlla l'esistenza del campo ISTATComune nella tabella di destinazione", _ 
    
                                   buttons:=vbCritical + vbOKOnly, _ 
    
                                   Title:="Attenzione!" 
    
                    Case Else 
    
                            MsgBox "ERR#" & .Number _ 
    
                            & vbNewLine & .Description _ 
    
                            , vbOKOnly Or vbCritical 
    
            End Select 
    
         End With 
    
        Resume exithere 
    

    ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. domenico laurenza 9,900 Punti di reputazione Moderatore volontario
    2024-01-08T23:12:40+00:00

    Ciao,

    dovresti mettere nel modulo ( non è una macro ) del codice tipo il seguente:

    Option Compare Database

    Option Explicit

    Function Fase12A()

    Dim db  As DAO.Database 
    
    Dim tdf As DAO.TableDef 
    
    Dim fld As DAO.Field 
    
    Dim Miafinestra As Integer 
    
    Dim sw  As Integer 
    
    Set db = CurrentDb 
    
    Set tdf = db.TableDefs("MDCR") 
    
    sw = 0 
    

    '-> Per capire se le due colonne sono presenti devi scorrere tutti i campi presenti in tabella

    For Each fld In tdf.Fields 
    
        With fld 
    
             If .Name = "ISTATComune" Or \_ 
    
                .Name = "ISTATProvincia" Then 
    
                sw = sw + 1 
    
             End If 
    
        End With 
    
    Next 
    

    '-> Se il contatore è = 2 i due campi sono presenti ....

    If sw = 2 Then 
    
       Miafinestra = MsgBox("confermo, entrambe le colonne presenti", vbYesNo) 
    
       If Miafinestra = vbYes Then 
    
          Beep  ' seguono tue istruzioni Alter .... 
    
       End If 
    
    Else 
    
       Miafinestra = MsgBox("le colonne [ISTATComune]e [ISTATProvincia]  non sono presenti", vbOKOnly) 
    
    End If 
    

    End Function

    Ciao Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2024-01-08T21:28:49+00:00

    grazie per il chiarimento, avresti suggerimenti per giungere lo stesso al risultato del duplice confronto, magari non usando For Each?

    La risposta è stata utile?

    0 commenti Nessun commento
  4. domenico laurenza 9,900 Punti di reputazione Moderatore volontario
    2024-01-07T17:45:41+00:00

    Ciao,

    ti premetto che sono sul cellulare quindi tra mille difficoltà guardo il codice.

    La prima if penso non sia valida perché con un And confronti il campo con due diversi nomi. Quindi la If non sarà mai soddisfatta.

    Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento