Savoir si un enregistrement existe déjà ou non

Résolu
germany1970 Messages postés 134 Date d'inscription mardi 4 mars 2008 Statut Membre Dernière intervention 22 mars 2014 - 14 avril 2011 à 12:03
germany1970 Messages postés 134 Date d'inscription mardi 4 mars 2008 Statut Membre Dernière intervention 22 mars 2014 - 15 avril 2011 à 13:03
Bonjour,
alors je développe avec VB 2005.avec une base de données acess.
je veux avant de valider un nouveau enregistrement il vérifie si le numéro de police existe déjà ou non
merci pour votre aide c'est très urgent
voilà le code que j'ai :

dans le Form_Load

'connexion base de données
conn "provider microsoft.jet.oledb.4.0 ; data source = " & Application.StartupPath & "\amc.mdb;"
cnx = New OleDbConnection
cnx.ConnectionString = conn
cnx.Open()
'-----------------------------------------------------------

'exécution de la commande(cmd),
'du dataadapter (dta),
'du dataset(dts),
'de la datatable (dtt)
'sql=>cmd=>dta
'cnx=>cmd
'dta=>dts=>dtt
sql = "select police.* from police"
cmd = New OleDbCommand(sql)
dta = New OleDbDataAdapter(cmd)
cmd.Connection() = cnx
'chargement du DataSet à partir du DataAdapter
dta.Fill(dts, "police")
'chargement de la DataTable à partir du DataSet
dtt = dts.Tables("police")

dans le button-Ok

Private Sub Button16_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button16.Click
'controle des champs-si un champ n'est pas rempli fin de procédure
'Try
If TextBox1.Text "" Or TextBox2.Text "" Or TextBox3.Text = "" Or TextBox5.Text = "" Or TextBox6.Text = "" Or TextBox7.Text = "" Or TextBox8.Text = "" Or TextBox9.Text = "" Or TextBox10.Text = "" Or TextBox11.Text = "" Or TextBox12.Text = "" Or TextBox13.Text = "" Or TextBox14.Text = "" Or TextBox15.Text = "" Or TextBox16.Text = "" Or MaskedTextBox1.Text = "" Then
MessageBox.Show("Vous devez remplir tous les champs !", "Erreur...", MessageBoxButtons.OK, MessageBoxIcon.Error)

Me.TextBox1.Focus()

Exit Sub
End If
sql = "select police.* from police"
cmd = New OleDbCommand(sql)
dta = New OleDbDataAdapter(cmd)
cmd.Connection() = cnx
'chargement du DataSet à partir du DataAdapter
dta.Fill(dts, "police")
'chargement de la DataTable à partir du DataSet
dtt = dts.Tables("police")

'crátion d'une nouvelle ligne avec les données des textbox
dtr = dts.Tables("police").NewRow
dtr("code") = Me.TextBox1.Text
dtr("souscripteur") = Me.TextBox2.Text
dtr("adresse1") = Me.TextBox3.Text
dtr("adresse2") = Me.TextBox4.Text
dtr("cville") = Me.TextBox5.Text
dtr("ville") = Me.TextBox6.Text
dtr("tpcontrat") = Me.TextBox7.Text
dtr("baseremb") = Me.TextBox8.Text
dtr("rgmbase") = Me.TextBox9.Text
dtr("produit") = Me.TextBox10.Text
dtr("deffet") = Me.MaskedTextBox1.Text
dtr("reglement") = Me.TextBox11.Text
dtr("modereg") = Me.TextBox12.Text
dtr("pvente") = Me.TextBox13.Text
dtr("nom") = Me.TextBox14.Text
dtr("adresse") = Me.TextBox15.Text
dtr("villep") = Me.TextBox16.Text

'ajout de la ligne dans le DataSet
dts.Tables("police").Rows.Add(dtr)


'création et exécution du commandbuilder
'pour mettre à jour le DataAdapter
cmdb = New OleDbCommandBuilder(dta)

'mise à jour des données du DataAdapter
'à partir du commandbuilder
dta.Update(dts, "police")
MessageBox.Show("Police ajoutée avec succés", "Administrateur...", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
'on vide le dataset pour le recréer avec
'les nouvelles données
dts.Clear()
dta.Fill(dts, "police")
dtt = dts.Tables("police")
'**********************************************************
'mise à jour de la datagrid
'DataGrid1.SetDataBinding(dts, "produ")
'vider les textbox
Dim frm As New Form1
Me.Close()
frm.Show()

'aller au début du fichier
rownum = 0

Button16.Enabled = True
Button19.Enabled = False 'valider

6 réponses

Utilisateur anonyme
14 avril 2011 à 16:51
Bonjour, je trouve ton code un peu lourd pour insérer une ligne dans une table, personnellement je préfére coder en direct sans passer par des dataset...

Et le code serait (je ne travaille pas sur ACCESS, alors il y aura surement des modifications de code à faire):

cmd.commandtext "SELECT COUNT(*) FROM POLICE WHERE CODE " + Me.TextBox1.Text
DIM isPresent as boolean iif(cmd.executescalar 0, 0, 1)
if not isPresent then
cmd.commanttext = "INSERT INTO POLICE (...) VALUES (...)"
cmd.executeNonQuery()
else
messagebox.Show("Police deja presente")
endif
3
germany1970 Messages postés 134 Date d'inscription mardi 4 mars 2008 Statut Membre Dernière intervention 22 mars 2014 3
14 avril 2011 à 18:41
Bonjour alexander,
premièrement merci de votre inttentyion à mon problème.
alors pour ta remarque en ce qui concerne l'insertion d'un nouveau enregistrement je vous remercie de me donner le code que vous utiliser.
pour le code que vous m'avez donner pour trouver le doublon j'ai une erreure au niveau de cette ligne:
Dim IsPresent As Boolean IIf(cmd.ExecuteScalar 0, 0, 1)
msg d'erreure : aucune valeur donnée pour un ou plusieurs des paramètres requis
merci encore une fois
0
Utilisateur anonyme
15 avril 2011 à 10:33
Bonjour,
Il faut voir si le "executeScalar" retourne bien 0 lorsqu'il n'y a pas de valeurs et non NULL, comme je l'ai dit je ne connait pas les bases de données ACCESS...
0
germany1970 Messages postés 134 Date d'inscription mardi 4 mars 2008 Statut Membre Dernière intervention 22 mars 2014 3
15 avril 2011 à 11:32
Bonjour,
comment je peux savoir qu'est ce que retourne executeScalar
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
15 avril 2011 à 11:56
Salut, alors remplace:

Dim IsPresent As Boolean IIf(cmd.ExecuteScalar 0, 0, 1)

par

Dim isPresent as boolean = False
IF (NOT cmd.executeScaler IS DBNULL.VALUE) THEN
IsPresent IIf(cmd.ExecuteScalar 0, 0, 1)

Si cmd.executeScalar est null alors isPresent reste à False...

Par contre je ne sais pas si "IS DBNULL.VALUE" est une commande valide avec VB 2005...
0
germany1970 Messages postés 134 Date d'inscription mardi 4 mars 2008 Statut Membre Dernière intervention 22 mars 2014 3
15 avril 2011 à 13:03
Bonjour,
je vous remercie infiniment 10/10 ça marche t un génie juste un petit rectif dans cette ligne
cmd.commandtext "SELECT COUNT(*) FROM POLICE WHERE CODE " + Me.TextBox1.Text

il faut mettre :
cmd.CommandText "select count(*) from police where code '" & TextBox1.Text & "'"
0
Rejoignez-nous