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

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

Votre réponse

6 réponses

Meilleure réponse
Messages postés
149
Date d'inscription
lundi 24 décembre 2007
Dernière intervention
16 juillet 2013
- 14 avril 2011 à 16:51
3
Merci
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

Merci alexandrevandenberghe 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de alexandrevandenberghe
Messages postés
136
Date d'inscription
mardi 4 mars 2008
Dernière intervention
22 mars 2014
- 14 avril 2011 à 18:41
0
Merci
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
Messages postés
149
Date d'inscription
lundi 24 décembre 2007
Dernière intervention
16 juillet 2013
- 15 avril 2011 à 10:33
0
Merci
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
Messages postés
136
Date d'inscription
mardi 4 mars 2008
Dernière intervention
22 mars 2014
- 15 avril 2011 à 11:32
0
Merci
Bonjour,
comment je peux savoir qu'est ce que retourne executeScalar
Commenter la réponse de germany1970
Messages postés
149
Date d'inscription
lundi 24 décembre 2007
Dernière intervention
16 juillet 2013
- 15 avril 2011 à 11:56
0
Merci
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
Messages postés
136
Date d'inscription
mardi 4 mars 2008
Dernière intervention
22 mars 2014
- 15 avril 2011 à 13:03
0
Merci
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.