Savoir si un enregistrement existe déjà ou non [Résolu]

germany1970 136 Messages postés mardi 4 mars 2008Date d'inscription 22 mars 2014 Dernière intervention - 14 avril 2011 à 12:03 - Dernière réponse : germany1970 136 Messages postés mardi 4 mars 2008Date d'inscription 22 mars 2014 Dernière intervention
- 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
Afficher la suite 

6 réponses

Répondre au sujet
alexandrevandenberghe 149 Messages postés lundi 24 décembre 2007Date d'inscription 16 juillet 2013 Dernière intervention - 14 avril 2011 à 16:51
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de alexandrevandenberghe
germany1970 136 Messages postés mardi 4 mars 2008Date d'inscription 22 mars 2014 Dernière intervention - 14 avril 2011 à 18:41
0
Utile
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
Commenter la réponse de germany1970
alexandrevandenberghe 149 Messages postés lundi 24 décembre 2007Date d'inscription 16 juillet 2013 Dernière intervention - 15 avril 2011 à 10:33
0
Utile
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...
Commenter la réponse de alexandrevandenberghe
germany1970 136 Messages postés mardi 4 mars 2008Date d'inscription 22 mars 2014 Dernière intervention - 15 avril 2011 à 11:32
0
Utile
Bonjour,
comment je peux savoir qu'est ce que retourne executeScalar
Commenter la réponse de germany1970
alexandrevandenberghe 149 Messages postés lundi 24 décembre 2007Date d'inscription 16 juillet 2013 Dernière intervention - 15 avril 2011 à 11:56
0
Utile
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...
Commenter la réponse de alexandrevandenberghe
germany1970 136 Messages postés mardi 4 mars 2008Date d'inscription 22 mars 2014 Dernière intervention - 15 avril 2011 à 13:03
0
Utile
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 & "'"
Commenter la réponse de germany1970

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.