Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 7 su 7

Messaggio "Errore di compilazione. Previsto tipo definito dall’utente e non progetto"

  1. #1
    giovepan non è in linea Scolaretto
    Buongiorno a tutti,
    in una maschera per l'inserimento e modifica dei dati, vorrei che, all'aggiornamento del campo "città" venisse automaticamente aggiornato anche il campo "IDComune" della tabella "Parrocchie".
    A tale scopo ho scritto il seguente codice:

    Private Sub Città_AfterUpdate()
    
    Dim stComune As String
    Dim intComune As Integer
    Dim db As Database
    Dim rst As Recordset
    
        stComune = Me.Città
        intComune = DFirst("IDCittà", "Città", "Città = '" & stComune & "'")
        Set db = DBEngine(0)(0)
        db.Execute "UPDATE Parrocchie SET [Parrocchie]![IDComune] = " & intComune & " WHERE [Parrocchie]![Città] = " & stComune
        
    End Sub
    
    In altre applicazioni da me create, un codice analogo funziona a perfezione. Ma in quella a cui so lavorando adesso, mi si blocca e mi compare il messaggio: "Errore di compilazione. Previsto tipo definito dall’utente e non progetto" con l'evidenziazione del mio codice "db As Database".
    Ho controllato attentamente e a me sembra di aver scritto questo codice rispettando la stessa sintassi che nelle altre applicazioni in cui funziona.
    Evidentemente sbaglio in qualcosa. In che cosa? Qualcuno può aiutarmi?
    Grazie
    Ultima modifica di AntonioG; 07-07-2019 15:50 

  2. #2
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Questo codie non può funzionare ne qui ne in nessuna altra applicazione in quanto ha un errore inibente.
    Ci sono poi altre 3 osservazioni che ti faccio al fine di capire quello.che stai facendo.
    Le prime 2:
    Dim db As Database
    Dim rst As Recordset
    
    La premessa è che entrambe le dichiarazioni sono inutili, la seconda ancora piu della prima dal momento che non serve.
    Ciò detto sono da sistemare in quando si possono referenziale 2 LIBRERIE ADO e DAO/ADESSO
    che hanno oggetti simili, quindi quando si scrive codice è sempre opportuno scriverlo in modo che non sia problemi.

    Dim db As DAO.Database
    Dim rst As DAO.Recordset
    
    La 3°osservazione è che i NOMI degli oggetti, ed i campi della tabella sono oggetti, non devono contenere caratteri speciali come accenti, spazi, apostrofo ecc... Città è uno d questi casi...

    Veniamo ora all'errore vero e proprio:
    ".....WHERE [Parrocchie]![Città] = " & stComune
    
    Essendo Il campo di tipo testo va formattato nel predicato SQL come richiede la stringa.
    Fai anche attenzione che se la città si chiamasse L'Aquila avresti un'ulteriore problema.

    ".....WHERE [Parrocchie]![Città] = '" & Replace(stComune,"'","''") & "'"
    
    ℹ️ Leggi di più su @Alex ...

  3. #3
    giovepan non è in linea Scolaretto
    Grazie, Alex, dei consigli e della tempestività della risposta. Proverò a riscrivere il codice seguendo le tue preziose indicazioni. Adesso non posso, ma ci tenevo a ringraziarti subito

  4. #4
    L'avatar di nman
    nman non è in linea Topo di biblioteca
    Indipendentemente da quanto ti ha consigliato @Alex
    vorrei soffermarmi su altri aspetti della domanda ..........

    Quote Originariamente inviato da giovepan Visualizza il messaggio
    ' .........................
    Dim stComune As String
    Dim intComune As Integer
    ' ..................
        stComune = Me.Città
        intComune = DFirst("IDCittà", "Città", "Città = '" & stComune & "'")
    ' ..................................
    
    Tu hai la tabella "Citta" che contiene i campi "IDCitta" e "Citta"
    dai nomi deduco che la Key della tabella sia il campo "IDCitta" ......... (se la deduzione è errata allora il mio intervento è fuori luogo)

    Perche se vuoi cambiare citta scrivi il nome della citta per trovarve il suo ID ?????
    Non ti sarebbe piu facile in una casella combinata registrare direttamente il ID ???


    Quote Originariamente inviato da giovepan Visualizza il messaggio
    ' .........................
    db.Execute "UPDATE Parrocchie SET [Parrocchie]![IDComune] = " & intComune & " WHERE [Parrocchie]![Città] = " & stComune
    ' ..................................
    
    Poi vedo che nell'altra tabella "Parrocchie" hai i campi "[IDComune]" e "[Citta]" che sono rindondanti fra di loro, a parer mio ti basterebbe solamente il campo "[IDComune]"

    .

  5. #5
    giovepan non è in linea Scolaretto
    Ho già risolto il problema seguendo i suggerimenti di Alex, che ringrazio nuovamente.
    Mi sembra però doveroso anche rispondere alle osservazioni di nman.
    Il motivo per cui ho usato la stringa "Città" e non l'"IDCittà" nella tabella "Città" è perché ho riutilizzato una vecchia tabella, che non aveva l'ID. L'ho aggiunto successivamente, registrando poi quello, come tu giustamente mi suggerisci. Ma ho poi constatato che quella vecchia tabella era legata con join esterno ad altre tabelle attraverso la stringa "città", per cui mi saltava tutto facendo i collegamenti tra ID. E' per questo che ho pensato di usare tutti e due i campi, registrando però "Città" e non "IDCittà".
    Un motivo analogo è anche quello che mi ha portato a usare insieme i campi "Città" e "IDComune" nella tabella "Parrocchie".
    Mi rendo conto che in questo modo complico parecchio le cose. Pensavo di potermi risparmiare il grosso lavoro di reimpostare da capo tutte le tabelle e i collegamenti tra loro, nonché le query, le maschere e i report che vi fanno riferimento. Ma mi sto rendendo conto che le difficoltà che speravo di evitare me le ritrovo in seguito ancora più complicate. E forse davvero mi conviene ricominciare da capo.
    Grazie comunque del tuo interessamento, nman.

  6. #6
    L'avatar di nman
    nman non è in linea Topo di biblioteca
    Quote Originariamente inviato da giovepan Visualizza il messaggio
    ......... è perché ho riutilizzato una vecchia tabella, che non aveva l'ID. L'ho aggiunto successivamente, registrando poi quello, come tu giustamente mi suggerisci. Ma ho poi constatato che quella vecchia tabella era legata con join esterno ...........
    Allora probabilmente il campo "Citta" della tabella "Citta" è indicizzato con DuplicatiNonAmmessi
    quindi non è cosi grave come lo avevo immagginato ....... ......

    .... tutto è bene quel che finisce bene .......

  7. #7
    giovepan non è in linea Scolaretto
    OK e grazie comunque

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Risposte: 1
    Ultimo Post: 15-05-2016, 18:39
  2. Errore "Tipo definito dall'utente non definito"
    Da baltimora nel forum Visual Basic 6
    Risposte: 6
    Ultimo Post: 01-04-2016, 14:19
  3. Risposte: 5
    Ultimo Post: 13-07-2012, 08:25
  4. Risposte: 3
    Ultimo Post: 10-12-2011, 09:39
  5. tipo definito dall’utente non definito!
    Da alexvall nel forum Visual Basic 6
    Risposte: 1
    Ultimo Post: 21-06-2004, 13:30