Confronto dati

di il
5 risposte

Confronto dati

Salve a tutti

Mi trovo a gestire l'inserimento di dati in un database
per quanto riguarda la procedura di inserimento tutto funziona, il problema è nel controllo dei dati inseriti.

in pratica ci sono 2 campi da inserire (RAGSOC e CM) che non possono essere omessi per vincolo della tabella inoltre CM deve essere numerico e RAGSOC deve essere univoco

per i valori nulli e errati me la sono cavata così
    Private Sub TABCLIENTIBindingNavigatorSaveItem_Click_2(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TABCLIENTIBindingNavigatorSaveItem.Click
        If txtCM.Text = "" Or txtRagSoc.Text = "" Or IsNumeric(txtCM.Text) = False Then
            MsgBox("ATTENZIONE: Dati inseriti in modo errato" + Chr(13) + "RAGIONE SOCIALE non può essere vuoto" + Chr(13) + "CANONE MENSILE non può essere vuoto e deve contenere un numero ")
        Else
            Me.Validate()
            Me.TABCLIENTIBindingSource.EndEdit()
            Me.TableAdapterManager.UpdateAll(Me.DataDataSet)
            MsgBox("Cliente inserito correttamente")
            FrmHome.Show()
            Me.Hide()
        End If
    End Sub

tutto funziona, ma rimane il problema dell'univocità di RAGSOC:

come posso fare ad impostare un controllo che dia un messaggio di errore se RAGSOC è già presente nella tabella?
c'è un metodo specifico o devo per forza fare un controllo sequenziale su tutti i record?

Grazie in anticipo

5 Risposte

  • Re: Confronto dati

    Ciao il controllo sequenziale é sicuramente da scartare.

    Ti segnalao 2 soluzioni.
    1. Fai una query di selezione sul database per la ragione sociale inserita. Se estrai il record vuol dire che é già esistente e segnali l'errore.
    2. Se c'è il vincolo unique sul campo della ragione sociale, fai la insert che ti lancia l'eccezzione in caso di rag. soc esistente. (intercetti l'errore specifico al vincolo e segnali che la rag.soc é già esistente)

    Fammi sapere, ciao
  • Re: Confronto dati

    Io optavo per la seconda ipotesi il problema è che sono "autodidatta" con questo linguaggio e non riesco a capire quale siano i moduli e la sintassi da usare per gestire la cosa a codice
  • Re: Confronto dati

    Ciao allora metti la query dentro un blocco try catch

    Try
    'qui fai la query
    Catch ex as exception
    'qui esamini il contenuto dell'oggetto ex, se dentro c'è il messaggio relativo al vincolo avverti l'utente
    End Try

    Ciao
  • Re: Confronto dati

    Dunque

    volevo fare la insert con in metodo try
    però poi ho dovuto rinunciare anche perchè avrei dovuto riprogettare metà programma

    quindi ho provato con il primo metodo ovvero cercando il valore usando una query.

    La query che ho creato si chiama "CercaCliente" e ha questo codice
    SELECT        RAGSOC
    FROM            TABCLIENTI
    WHERE        (RAGSOC = @Ragsoc)
    fino a qui tutto ok

    il problema stà nell'eseguirla da codice:

    io ho provato così, ma mi da degli errori di sintassi (che non riesco a capire neanche dopo 3 ricerche in google e sull'msdn)
    
        Private Sub TABCLIENTIBindingNavigatorSaveItem_Click_2(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TABCLIENTIBindingNavigatorSaveItem.Click
            'vorrei che controllo cliente ottenesse il contenuto del campo RAGSOC in modo da poterlo poi confrontare in una if 
            'con txtragsoc.text
            ControlloCliente = TABCLIENTITableAdapter.CercaCliente(txtRagSoc.Text)
            If txtCM.Text = "" Or txtRagSoc.Text = "" Or IsNumeric(txtCM.Text) = False Or ControlloCliente = txtRagSoc.Text Then
                MsgBox("ATTENZIONE: Dati inseriti in modo errato" + Chr(13) + "RAGIONE SOCIALE non può essere vuoto e non deve essere già presente nel database" + Chr(13) + "CANONE MENSILE non può essere vuoto e deve contenere un numero ")
            Else
                Me.Validate()
                Me.TABCLIENTIBindingSource.EndEdit()
                Me.TableAdapterManager.UpdateAll(Me.DataDataSet)
                MsgBox("Cliente inserito correttamente")
                FrmHome.Show()
                Me.Hide()
            End If
        End Sub
    
    End Class
    mi potresti spiegare dove sbaglio e come è fatta la sintassi corretta? a quanto ho capito manca un valore tra parentesi ma non riesco a capire cosa ci devo inserire
  • Re: Confronto dati

    Ci sono riuscito!! grazie mille dell'aiuto!!
    anche se alla fine ho dovuto utilizzare un procedimento alternativo che ti posto giusto per completare la discussione
    Private Sub TABCLIENTIBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TABCLIENTIBindingNavigatorSaveItem.Click
            'vorrei che controllo cliente ottenesse il contenuto del campo RAGSOC in modo da poterlo poi confrontare in una if 
            'con txtragsoc.text
            If txtCM.Text = "" Or txtRagSoc.Text = "" Or IsNumeric(txtCM.Text) = False Then
                MsgBox("ATTENZIONE: Dati inseriti in modo errato" + Chr(13) + "RAGIONE SOCIALE non può essere vuoto e non deve essere già presente nel database" + Chr(13) + "CANONE MENSILE non può essere vuoto e deve contenere un numero ")
            Else
                Try
                    Me.Validate()
                    Me.TABCLIENTIBindingSource.EndEdit()
                    Me.TableAdapterManager.UpdateAll(Me.DataDataSet)
                    MsgBox("Cliente inserito correttamente")
                    FrmHome.Show()
                    Me.Hide()
                Catch ex As Exception
                    MsgBox("Cliente già inserito")
                End Try
            End If
            
        End Sub
    però giusto per curiosità potresti rispondere all'ultimo messaggio che ti ho scritto? perchè non riesco a capire dove stava l'errore

    cmq grazie ancora
Devi accedere o registrarti per scrivere nel forum
5 risposte