Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Errore in access 2007

  1. #1

    Errore in access 2007

    Salve a tutti ,
    Sto cercando di creare un db di componenti elettronici in access 2007 per l'ufficio in cui lavoro.
    Ho creato una query di accodamento che, tramite il click di un pulsante, dovrebbe inserire il record da alcune textbox e combobox nella tabella "tb_componenti".
    Quando clicclo sul pulsante mi restituisce il seguente errore :master:

    Impossibile accodare tutti i record nella query di accomodamento
    Numero di campi impostati a Null per un errore di conversione tra tipi:0; numero di record non aggiunti alla tabella a causa di violazioni di chiave:1; a causa di violazione di condivisione;0; a causa di violazioni della regola di convalida:0
    Continuare comunque l'esecuzione della query di comado?
    Fare click su si per ignorare l'errore o gli errori ed eseguire la query.
    per una descrizione delle cause delle violazioni consultare la guida in linea


    Posto il codice che ho scritto in vba:

    codice:
    Private Sub cmd_inserisci_Click()
    
        Dim recComponenti As New ADODB.Recordset
        Dim trovato As Boolean
        Dim query1 As String
        
        
        recComponenti.Open "tb_componenti", CurrentProject.Connection, adOpenForwardOnly, adLockOptimistic
        query1 = "INSERT INTO tb_componenti ([Nome Componente], [ID Tipologia], [ID Produttore], Descrizione, Giacenza, [ID Posizione], [ID Fornitore], [Codice Fornitore]) values ('" & txt_nomecomponente & "','" & txt_tipologia & "','" & txt_produttore & "','" & txt_descrizione & "','" & txt_giacenza & "','" & txt_posizione & "','" & txt_fornitore & "','" & txt_codicefornitore & "')"
        
        trovato = False
        
        If IsNull(txt_nomecomponente) Or IsNull(txt_tipologia) Or IsNull(txt_produttore) Or IsNull(txt_descrizione) Or IsNull(txt_giacenza) Or IsNull(txt_posizione) Or IsNull(txt_fornitore) Or IsNull(txt_codicefornitore) Then
            trovato = True
            MsgBox ("Alcuni campi sono vuoti!")
        Else
            Do Until recComponenti.EOF
                If StrComp(txt_fornitore, recComponenti![ID Fornitore]) = 0 And StrComp(txt_codicefornitore, recComponenti![Codice Fornitore]) = 0 Then
                    trovato = True
                    MsgBox ("Elemento già presente!")
                End If
                recComponenti.MoveNext
            Loop
        End If
        If trovato = False Then
            DoCmd.RunSQL query1
            MsgBox ("Componente inserito nel Database")
        End If
    
    End Sub
    Qualcuno mi sa spiegare come posso andare avanti?
    Grazie

  2. #2
    Bisognerebbe capire cos'è questa violazione di chiave che viene segnalata.

    Trattandosi di una insert credo che i problemi più comuni siano di formato errato dei campi, (ma qui mi sembra che siano tutti dei char), o di chiavi doppie.

    La tabella ha delle chiavi univoche?

    L'errore te lo da sempre o solo con alcuni dati ?

    Prova a visualizzare, prima di tentare l'inserimento, i valori dei campi txt_.... e vedi se sono già presenti in tabella e se sono puliti.




    Ciao
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

  3. #3
    duplichi una chiave primaria e questo non è possibile. verifica la tabella e magari la tua pk mettilla come contatore se è posibile.
    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. #4
    Grazie per aver risposto

    La tabella ha delle chiavi univoche?
    Si, ha una chiave univoca chiamata ID Componente, è un contatore

    L'errore te lo da sempre o solo con alcuni dati?
    L'errore lo da quasi sempre, solo in quelche raro caso ha funzionato tutto perfettamente

    Prova a visualizzare, prima di tentare l'inserimento, i valori dei campi txt_.... e vedi se sono già presenti in tabella e se sono puliti.
    Ho fatto un debug completo di tutte le variabili, sono tutte come devono essere.

    duplichi una chiave primaria e questo non è possibile. verifica la tabella e magari la tua pk mettilla come contatore se è posibile.
    Non duplico una chiava primaria, quella che c'è è unica.

    Sto diventando pazzo, cosa sbaglio???

  5. #5
    Ciao, ho dato un'occhiata in rete e sembra che questo problema riguardi più che altro le chiavi di tabelle in relazione fra di loro. Il tuo DB è in questa situazione? Cioè ci sono tabelle collegate?

    Un'altra cosa che ho trovato riguarda i campi contatore che possono essere ad incremento progressivo o a valori casuali. Il tuo contatore com'è definito?

    E' un po' che non uso access ma se non ricordo male i contatori si possono definire di diversi tipi (integer, smallint, date ecc...), non sarà che lo hai definito troppo piccolo e che quindi si sta avvicinando alla saturazione?



    Facci sapere, ciao
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

  6. #6
    Ciao, prima di tutto ringrazio per la gentilezza e la pazienza nel dare risposte
    allora, comincio a scrivere
    Ciao, ho dato un'occhiata in rete e sembra che questo problema riguardi più che altro le chiavi di tabelle in relazione fra di loro. Il tuo DB è in questa situazione? Cioè ci sono tabelle collegate?
    Nel DB ci sono 5 tabelle, tb_componenti è quella "principale", con ID Componente, Nome Componente, ID Tipologia, ID Produttore, Descrizione, Giacenza, ID Posizione, ID Fornitore, Codice Fornitore, Ultimo Aggiornamento, Datasheet, poi ci sono altre 4 tabelle "secondarie, "che sono:
    tb_tipologia che contiene ID Tipologia, Tipologia, Iniziali Tipologia
    tb_produttori che contiene ID Produttore, Produttore
    tb_fornitori che contiene ID Fornitore, Fornitore
    tb_posizione che contiene ID Posizione, Posizione

    queste 4 tabelle sono relazionate con la tb_componenti

    Un'altra cosa che ho trovato riguarda i campi contatore che possono essere ad incremento progressivo o a valori casuali. Il tuo contatore com'è definito?
    Tutte le chiavi univoche delle tabelle, sono contatori ad incremento (ho fatto la prova anche mettendo casuale)

    E' un po' che non uso access ma se non ricordo male i contatori si possono definire di diversi tipi (integer, smallint, date ecc...), non sarà che lo hai definito troppo piccolo e che quindi si sta avvicinando alla saturazione?
    non può essere, perchè non è un DB già fatto, lo sto progettando io ora... quindi ancora è vuoto

    una cosa che ho dimenticato a dire prima è che già faccio 3 query di inserimento (perfettamente funzionanti) molto simili a quella dove ho il problema, inserisco dei dati nelle tabelle tb_tipologia, tb_produttori e tb_fornitori.

    sono 2 giorni che giro e rigiro su internet, ma non trovo una soluzione al problema...

    Grazie!!!!

  7. #7
    Ammettendo che il problema non sia nel codice (che sembra corretto) ma nelle relazioni fra tabelle e chiavi, l'unica cosa che mi viene ancora in mente, ma è proprio l'ultima spiaggia, è di verificare che i campi di collegamento con le quattro tabelle secondarie che, immagino, sono chiavi univoche delle quattro tabelle (perché, ad esempio, il produttore pippo è uno solo), non siano definiti univoci anche nella tb_componenti (perché il produttore pippo produce più di un componente).

    Come vedi mi sto arrampicando sugli specchi perché non so proprio che altre ipotesi fare ancora.

    Certo, resta sempre il suggerimento principe: "prova a spegnere e riaccendere" ma immagino che tu lo abbia già fatto.

    Se mi verrà in mente altro mi rifarò vivo, tu comunque tienici informati che potrebbero esserci altri col tuo stesso problema.

    Ciao
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

  8. #8
    Ciao, nella tabella tb_componenti non sono chiavi univoche, perchè possono esserci tanti componenti con fornitore "pippo"

    Spegnere e riaccendere l'ho provato 1000 volte...

    Vediamo un po' che fare, a presto

    Ciaoooo

  9. #9
    Tutto risolto , c'era un problema con la relazione che c'è fra tb_tipologia e tb_componenti , ho cancellato del tutto la tabella tb_tipologia, l'ho rifatta e adesso funziona tutto egregiamente

    Ti ringrazio per l'aiuto che mi hai dato e il tempo che hai perso per me

    Ciao, Francesco.

  10. #10
    Non è tempo perso quello dedicato al forum.

    Sono contento che tu abbia risolto.

    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

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 © 2025 vBulletin Solutions, Inc. All rights reserved.