Probleme avec doublon!

trexor Messages postés 134 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 17 octobre 2010 - 19 juil. 2005 à 10:23
trexor Messages postés 134 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 17 octobre 2010 - 20 juil. 2005 à 12:01
Bonjour,
voila j'ai écris mon code mais je n'arrive pas a recupérer le nombre de ligne. Pourtant la methode ExecuteNonQuery devrait renvoyer un integer sur le nombre d'enregistrement? Ca ne doit pas être la bonne solution car la premiere méthode ExecuteNonQuery lors du premier test renvoie une erreure qd elle trouve des doublons (et ne renvoie pas le nombre de ligne..normal!). Il doit y avoir une solution toute bête mais je suis néophite en SQL.
Voilà mon code si quelqu'un a le temps de jeter un coup d'oeil.


'"""""""""""""""""""""""""""""""""""""""""
'Bouton OK
'"""""""""""""""""""""""""""""""""""""""""
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
'""""""""""""""""""
'Bon
'""""""""""""""""""
Dim i As Integer
Dim nomCouple As String
Dim abscisse As String

For i = 0 To DataGridView1.Rows.Count - 2

nomCouple = DataGridView1.Item(0, i).Value
abscisse = DataGridView1.Item(1, i).Value
Dim req1 = "SELECT [Nom couple] from couple where [Nom couple]='" + nomCouple + "'"
Dim value = executionRequete(req1)
cnx.Close()
If value > 0 Then 'test pour savoir si des lignes existes déjà

Dim req = "INSERT INTO Couple ( [Nom couple], [Abscisse] ) VALUES ('" & nomCouple + "','" + abscisse + "') "

executionRequete(req)
cnx.Close()
End If '""""""""""""""""""
Next i
End Sub

Private Function executionRequete(ByVal req As String) As Integer
cnx.Open()
' Dim myCommand = New OleDbCommand(req, cnx)
' myCommand.ExecuteNonQuery()
Dim myCommand As OleDbCommand
myCommand = New OleDbCommand
myCommand.CommandText = req
myCommand.Connection = cnx
'myCommand.ExecuteNonQuery()
Return myCommand.ExecuteNonQuery
cnx.Close()

End Function

4 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Modérateur Dernière intervention 15 juillet 2011 37
19 juil. 2005 à 11:28
Salut



ExecuteNonQuery comme son nom l'indique ne renvoie pas de données.

C'est pour les requetes ACTION MAJ, DEL, INS



Il faut que tu utilises excutereader. --> Datareader pour lire un select

Pour ta requete tu peux utilisé

excuteScalar si ta requete ne renvoie qu'une seule ligne et colonne exemple

select count(id) as nb from tab



Je ne vois pas pouruoi les doublons gene dans ton cas ( mais je ne pense pas pas me trompé )



Voila
0
trexor Messages postés 134 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 17 octobre 2010
19 juil. 2005 à 12:19
J'ai changé mon code mais ca ne marche tjs pas. As tu des exemples?


Private
Sub Button5_Click(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles Button5.Click



Me.Close()



End
Sub



'"""""""""""""""""""""""""""""""""""""""""



'Bouton OK



'"""""""""""""""""""""""""""""""""""""""""



Private
Sub Button6_Click(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles Button6.Click



'""""""""""""""""""



'Bon



'""""""""""""""""""



Dim i
As
Integer



Dim nomCouple
As
String



Dim abscisse
As
String



For i = 0
To DataGridView1.Rows.Count - 2


nomCouple = DataGridView1.Item(0, i).Value


abscisse = DataGridView1.Item(1, i).Value



Dim req1 =
"SELECT [Nom couple] from couple where [Nom couple]='" + nomCouple +
"'"


executionRequete(req1)



If erreurDoublon =
False
Then
'test pour savoir si des lignes existes déjà



Dim req =
"INSERT INTO Couple ( [Nom couple], [Abscisse] ) VALUES ('" & nomCouple +
"','" + abscisse +
"') "


executionRequete(req)



End
If



Next i



End
Sub



Private
Sub executionRequete(
ByVal req
As
String)



Try


erreurDoublon =
False


cnx.Open()



Dim myCommand
As OleDbCommand


myCommand =
New OleDbCommand


myCommand.CommandText = req


myCommand.Connection = cnx


myCommand.ExecuteReader()


cnx.Close()



Catch ex
As Exception


erreurDoublon =
True



End
Try



End
Sub
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Modérateur Dernière intervention 15 juillet 2011 37
19 juil. 2005 à 14:14
salut



commence par simple





Try



Dim req1 As String = "SELECT count(*) from matable"



OleDbConnection.Open()

Dim
oledbcommand As OleDb.OleDbCommand = New OleDb.OleDbCommand()

oledbcommand.CommandText = req1



oledbcommand.Connection = OleDbConnection

Dim nb As Int16 = CType(oledbcommand.ExecuteScalar(), Int16)



OleDbConnection.Close()



Catch ex As Exception



End Try



Methode deux retour d'un select

(dr.GetValue(0).ToString) est a bannir au niveau perf c'est peut etre bon mais au niveau conprehension c'est pas le top ;-)



accede directement au champs par leurs clefs si tu veux que ton code
soit maintenable ou par ordre si tu veux de la performance. Atention
l'ordre des colonnes colonnes peuxc evoluée ?







Dim req1 As String = "SELECT * from matable"

Dim dr As OleDb.OleDbDataReader

OleDbConnection.Open()

Dim
oledbcommand As OleDb.OleDbCommand = New OleDb.OleDbCommand()

oledbcommand.CommandText = req1



oledbcommand.Connection = OleDbConnection

dr = oledbcommand.ExecuteReader

While dr.Read


MessageBox.Show(dr.GetValue(0).ToString)

End While



OleDbConnection.Close()



Catch ex As Exception



End Try
0
trexor Messages postés 134 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 17 octobre 2010
20 juil. 2005 à 12:01
Voilà j'arrive a la fin de mon bouton grace a votre aide. J'ai encore une petite question pour la requete delete. Avez vous une methode pour rechercher rapidement dans mon datagrid (au lieu de faire une recherche ligne/ligne)?

voici mon code (il n'y a pas encore la recherche sur le datagrid), je suis preneur d'amélioration ;-)



'"""""""""""""""""""""""""""""""""""""""""



'Bouton OK



'"""""""""""""""""""""""""""""""""""""""""



Private
Sub Button6_Click(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles Button6.Click



Dim i
As
Integer



Dim nomCouple
As
String



Dim abscisse
As
String



For i = 0
To DataGridView1.Rows.Count - 2


nomCouple = DataGridView1.Item(0, i).Value


abscisse = DataGridView1.Item(1, i).Value


cnx.Open()



Dim req
As
String =
"SELECT count(*) from Couple where [Nom couple]='" + nomCouple +
"'"



Dim oledbcommand
As OleDb.OleDbCommand =
New OleDb.OleDbCommand()


oledbcommand.CommandText = req


oledbcommand.Connection = cnx



Dim nb
As Int32 =
CType(oledbcommand.ExecuteScalar(), Int32)


cnx.Close()



Try



If nb <= 0
Then



'Si la ligne n'existe pas alors on la creée



Dim req1 =
"INSERT INTO Couple ( [Nom couple], [Abscisse] ) VALUES ('" & nomCouple +
"','" + abscisse +
"') "


executionRequete(req1)



Else



'Si la ligne existe alors on la modifie



Dim req2 =
"UPDATE Couple set [Abscisse]='" + abscisse +
"' WHERE [Nom couple]='" + nomCouple +
"'"


executionRequete(req2)



End
If



'Suppression d'un enregistrement



Dim req3
As
String =
"SELECT * from Couple"



Dim dr
As OleDb.OleDbDataReader



Dim valueLigne
As
String


cnx.Open()


oledbcommand.CommandText = req3


oledbcommand.Connection = cnx


dr = oledbcommand.ExecuteReader



While dr.Read


valueLigne = dr.GetValue(0).ToString



Dim t
As
Integer



For t = 0
To DataGridView1.Rows.Count - 2



' recherche a faire si pas de ligne dans le datagrid de nom valueLigne


executionRequete(
"delete from Couple WHERE [Nom couple]='" + valueLigne +
"'")



Next t



End
While


cnx.Close()



Catch ex
As Exception


MessageBox.Show(ex.Message,
Me.Text)



End
Try



Next i



End
Sub

'"""""""""""""
'execution requete
'"""""""""""


Private Sub executionRequete(ByVal req As String)



Try


cnx.Open()



Dim myCommand
As OleDbCommand


myCommand =
New OleDbCommand


myCommand.CommandText = req


myCommand.Connection = cnx


myCommand.ExecuteScalar()


cnx.Close()



Catch ex
As Exception


MessageBox.Show(ex.Message,
Me.Text)



End
Try



End
Sub
0