Piramyd Head27
Messages postés31Date d'inscriptionmercredi 19 septembre 2007StatutMembreDernière intervention28 mars 2014
-
23 août 2011 à 04:06
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018
-
24 août 2011 à 10:39
Bonjour a tous,
Encore moi avec ma fichu base de données ! Je suis aller sur un site anglo avec un tuto tres bien monté et j'ai très bien compris...hé oui c'est bizarre non ! Mais j'ai toujours une fichu d'erreur : IndexOutOfRangeException avec comme raison : There is no row at position -1.
Que ce soit avec une base vide ou pleine, lorseque je click sur mon bouton btnUpdate l'erreur est spotter sur mon sub NavigateRecords (voir code plus bas) J'ai donc encore besoin d'un expert pour cette niaiserie. SVP pouvez vous éclairer ma lanterne, d'autant plus que le type avec son tuto lui, ca l'air de marcher !
Public Class Main
Dim inc As Integer
Dim MaxRows As Integer
Dim con As New OleDb.OleDbConnection
Dim dbProvider As String
Dim dbSource As String
Dim ds As New DataSet
Dim da As OleDb.OleDbDataAdapter
Dim sql As String
Private Sub Main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
dbProvider = "PROVIDER=Microsoft.ACE.OLEDB.12.0;"
dbSource "Data Source C:\Users\Biggy\Documents\Visual Studio 2010\Projects\GenBase\GenBase\gen.accdb"
con.ConnectionString = dbProvider & dbSource
con.Open()
MsgBox("Bienvenue dans GenBase ! Une Base Modèle à été créé pour vous ! Base de données connecter, vous pouvez maintenant entrer vos données ! Vous pourez réenregistrer cette Base sous un autre nom à partir du menu Fichier.")
sql "SELECT * FROM Individu, Mariages, Enfants, Historique, Notes WHERE Individu.ID Mariages.ID AND Individu.ID = Enfants.ID AND Individu.ID = Historique.ID AND Individu.ID = Notes.ID"
da = New OleDb.OleDbDataAdapter(sql, con)
da.Fill(ds, "gen")
MaxRows = ds.Tables("gen").Rows.Count
inc = -1
If inc = -1 Then
btnFirst.Enabled = False
btnPrevious.Enabled = False
btnNext.Enabled = False
btnLast.Enabled = False
btnCommit.Enabled = False
btnAddNew.Enabled = True
btnUpdate.Enabled = False
btnDelete.Enabled = False
btnClear.Enabled = False
End If
End Sub
Private Sub NavigateRecords()
Dim cb As New OleDb.OleDbCommandBuilder(da)
Nom.Text = ds.Tables("gen").Rows(inc).Item(1)
Prenom.Text = ds.Tables("gen").Rows(inc).Item(2)
da.Update(ds, "gen")
End Sub
Private Sub btnNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNext.Click
If inc <> MaxRows - 1 Then
inc = inc + 1
NavigateRecords()
Else
MsgBox("Dernier Individu de la Base !")
End If
End Sub
Private Sub btnPrevious_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrevious.Click
If inc > 0 Then
inc = inc - 1
NavigateRecords()
ElseIf inc = -1 Then
MsgBox("Pas d'Individu !")
ElseIf inc = 0 Then
MsgBox("Premier Individu de la Base !")
End If
End Sub
Private Sub btnLast_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLast.Click
If inc <> MaxRows - 1 Then
inc = MaxRows - 1
NavigateRecords()
End If
End Sub
Private Sub btnFirst_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFirst.Click
If inc <> 0 Then
inc = 0
NavigateRecords()
End If
End Sub
Private Sub btnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpdate.Click
Dim cb As New OleDb.OleDbCommandBuilder(da)
ds.Tables("gen").Rows(inc).Item(1) = Nom.Text
ds.Tables("gen").Rows(inc).Item(2) = Prenom.Text
da.Update(ds, "gen")
MsgBox("Mise à jour de la Base réussis !")
End Sub
Private Sub btnAddNew_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAddNew.Click
btnCommit.Enabled = True
btnAddNew.Enabled = False
btnUpdate.Enabled = False
btnDelete.Enabled = False
Nom.Clear()
Prenom.Clear()
End Sub
Private Sub btnClear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClear.Click
btnCommit.Enabled = False
btnAddNew.Enabled = True
btnUpdate.Enabled = True
btnDelete.Enabled = True
inc = 0
NavigateRecords()
End Sub
Private Sub btnCommit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCommit.Click
If inc <> -1 Then
Dim cb As New OleDb.OleDbCommandBuilder(da)
Dim dsNewRow As DataRow
dsNewRow = ds.Tables("gen").NewRow()
dsNewRow.Item(1) = Nom.Text
dsNewRow.Item(2) = Prenom.Text
ds.Tables("gen").Rows.Add(dsNewRow)
da.Update(ds, "gen")
MsgBox("Individu Enregistrer avec succès !")
btnCommit.Enabled = False
btnAddNew.Enabled = True
btnUpdate.Enabled = True
btnDelete.Enabled = True
End If
End Sub
Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDelete.Click
If MessageBox.Show("Voulez-vous vraiment effacer cette entrée ?", "Effacer", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) = DialogResult.No Then
MsgBox("Operation Annuler")
Exit Sub
End If
Dim cb As New OleDb.OleDbCommandBuilder(da)
ds.Tables("gen").Rows(inc).Delete()
MaxRows = MaxRows - 1
inc = 0
NavigateRecords()
da.Update(ds, "gen")
End Sub
Private Sub Nom_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Nom.TextChanged
btnFirst.Enabled = True
btnPrevious.Enabled = True
btnNext.Enabled = True
btnLast.Enabled = True
btnCommit.Enabled = True
btnAddNew.Enabled = True
btnUpdate.Enabled = True
btnDelete.Enabled = True
btnClear.Enabled = True
End Sub
End Class
NHenry
Messages postés15102Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention27 mars 2024159 23 août 2011 à 12:25
Bonjour,
Que vaut inc ?
En voyant cette ligne (pas tout regardé, dsl) :
inc = MaxRows - 1
Si MaxRows=0, que se passe-t-il ?
---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list ---
NHenry
Messages postés15102Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention27 mars 2024159 24 août 2011 à 09:22
Bonjour,
Quand je vois que sur la ligne
ds.Tables("gen").Rows(inc).Item(1) = Nom.Text
Il dit qu'il n'arrive pas à trouver la ligne -1 (traduit de l'anglais vers le français, ça donne ça) je me dit que peut être que "inc" vaut -1 ...
Regardes où est assigné inc, mets-y des points d'arrêts et espionnes les variables pour repérer l'origine du pb.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 24 août 2011 à 10:39
Bonjour,
Plusieurs choses me rendent assez perplexe
1)
ceci au load :
inc = -1
If inc = -1 Then ' pourquoi cette condition ? (inutile puisque
'l'on sait -on lui a attribué la valeur -1) qu'on est dans ce cas !
btnFirst.Enabled = False
btnPrevious.Enabled = False
btnNext.Enabled = False
btnLast.Enabled = False
btnCommit.Enabled = False
btnAddNew.Enabled = True
btnUpdate.Enabled = False
btnDelete.Enabled = False
btnClear.Enabled = False
End If
2)
If inc > 0 Then
inc = inc - 1
NavigateRecords()
ElseIf inc = -1 Then
MsgBox("Pas d'Individu !")
ElseIf inc = 0 Then
MsgBox("Premier Individu de la Base !")
End If
qui fait que le msgbox vient en retard si inc 1 (car 1-1) déjà 0
3)
Private Sub btnLast_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLast.Click
If inc <> MaxRows - 1 Then ' totalement inutile
inc = MaxRows - 1
NavigateRecords() 'totalement inutile
End If
End Sub
Je crains fort que tu ne doives commebncer par faire un algo plus "terre-à-terre" avant d'écrire tes instructions.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient