defrelefou
Messages postés15Date d'inscriptionmercredi 19 août 2009StatutMembreDernière intervention15 juin 2013
-
7 juin 2013 à 13:37
defrelefou
Messages postés15Date d'inscriptionmercredi 19 août 2009StatutMembreDernière intervention15 juin 2013
-
15 juin 2013 à 14:25
Bonjour,
j'ai développé une application sous VB2012 Express, avec sql serveur compact 4.0.
Ce qui me permet de gérer des fiche d'intervention.
Je renseigne différents éléments d'une form et je vais ensuite les stocker dans une base de donnée via une form contenant un
datagridview de ma bdd.
Jusque la tout ce passe bien sauf que si ma bdd dépasse environs les 350 lignes ca ne marche plus.
Exemple avec 950 lignes l'ajout d'une nouvelle ligne , le remplissage des champs et l'enregistrement ce font.
Par contre je retrouve ma nouvelle ligne en position 330 et non en 951 et si j'ajoute plus de 6 lignes elles écrasent une ancienne.
(Compris entre 330 et 336).
J'utilise sql serveur compact 4.0
J'ai essayé de remplir ma nouvelle ligne manuellement ou automatique (via mon code) même problème.
Je pose le code de la gestion de mise à jour de ma bdd:
Class MajHisto
Dim NbLigne As Integer
'
Public FinSauvHisto As Boolean
Private Sub HistoriqueBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles HistoriqueBindingNavigatorSaveItem.Click
Me.Validate()
Me.HistoriqueBindingSource.EndEdit()
Me.TableAdapterManager.UpdateAll(Me.GestInterDataSet)
End Sub
Private Sub MajHisto_Activated(sender As Object, e As EventArgs) Handles Me.Activated
Call Me.Traitement()
End Sub
Private Sub MajHisto_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
Intervention.Sauv_Inter.EnHisto = True
Call Me.Dispose()
End Sub
Private Sub AccessBddHisto_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'TODO: cette ligne de code charge les données dans la table 'GestInterDataSet.Historique'. Vous pouvez la déplacer ou la supprimer selon vos besoins.
Me.HistoriqueTableAdapter.Fill(Me.GestInterDataSet.Historique)
Application.DoEvents()
If Intervention.Code_RecupInfo.VersionInter = 0 Then
Intervention.Code_Tempo.Main(5000)
Me.BindingNavigatorAddNewItem.PerformClick()
While BindingNavigatorPositionItem.Text <> CStr(Me.NbLigne + 2)
ElseIf Intervention.Code_RecupInfo.VersionInter = 2 Then
Intervention.Code_Tempo.Main(100)
While BindingNavigatorPositionItem.Text <> CStr(CInt(Intervention.Code_RecupInfo.PositionBdd) + 1)
BindingNavigatorMoveNextItem.PerformClick()
Intervention.Code_Tempo.Main(10)
End While
Intervention.Code_Tempo.Main(100)
Me.RecupDon()
HistoriqueBindingNavigatorSaveItem.PerformClick()
Call Intervention.Code_Générale.GestionEtatFiche(3)
Call Intervention.Code_Générale.ContEtatInter(3)
End If
defrelefou
Messages postés15Date d'inscriptionmercredi 19 août 2009StatutMembreDernière intervention15 juin 2013 15 juin 2013 à 14:25
Bonjour a tous et merci pour votre aide.
J'ai trouvé le problème.
Il ai du à un problème sur vb express2012 ou sql server compact 4 sur mon ordi portable.
Car sur l'un de mes autres pc toujours avec les même applications de développement j'ai pu recréer mes base de données sans
souci, alors que sur le portable si je recréait ces même base de donnée toujours problème d'enregistrement sur les positons 330 dès que je dépassait 350 lignes.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 7 juin 2013 à 14:29
Salut
Pour être lisible, surtout quand il y a beaucoup de lignes et des boucles.
Merci d'utiliser la coloration syntaxique = 3ème icone à droite
Sujet trop vague.
En survolant tes lignes, je n'ai pas trouvé l'endroit où se font les écritures (les noms de tes fonctions n'étant pas très parlant, vu de l'extérieur).
L'ordre des items dans une table n'a pas vraiment de sens. Les données sont là ou pas là, mais dire qu'elles ne sont pas au bon endroit, je ne vois pas trop ce que tu veux dire.
Quand tu enregistres tes données, s'agit-il d'ajout ou bien de mise à jour ?
Où se trouve le code de ces écritures ?
As-tu exécuté ton code en ligne à ligne avec le débug afin de vérifier le contenu des champs, des boucles ... ?
As-tu vérifier que les déclarations de type de champ étaient suffisant pour accueillir tes données ... bien qu'une limite à 330 ne ressemble pas trop à ce genre de problème.
Attention : Si le champ (dans ta table) est de type texte et que tu y stockes des chiffres, ceux-ci seront considérés comme des textes, donc 111 sera avant 8 (par exemple)
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on le partage (Socrate)
defrelefou
Messages postés15Date d'inscriptionmercredi 19 août 2009StatutMembreDernière intervention15 juin 2013 7 juin 2013 à 14:41
salut jack,
merci pour ton retour et désolée pour la présentation.
Pour tes questions
L’exécution ligne par ligne fonctionne.
Ce n'ai pas un problème de longueur de champ ni de type de donnée.
Sinon il s'agit d'un ajout, les mise à jour de ligne ne pose pas de problème.
Je vais essayer de clarifier mon problème:
Si je pars d'une bdd vide ou inférieur à 350 et que j'ajoute une ligne en renseignent ma ligne avec des valeurs A1 (ensemble de donnée).
Pas de problème mes colonnes de la ligne sont bien renseigné sur le bon numéro de ligne.
Par contre si je pars sur un bdd d'environ 950 lignes et que je renseigne ma ligne avec des valeurs A1 (les mêmes qu'avant)
De la ma ligne vas être écrite en position 330 au lieu de951
Vous n’avez pas trouvé la réponse que vous recherchez ?
defrelefou
Messages postés15Date d'inscriptionmercredi 19 août 2009StatutMembreDernière intervention15 juin 2013 7 juin 2013 à 14:59
ici on trouve les parties écrites automatique lors de l'insertion d'un datagridview
Private Sub HistoriqueBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles HistoriqueBindingNavigatorSaveItem.Click
Me.Validate()
Me.HistoriqueBindingSource.EndEdit()
Me.TableAdapterManager.UpdateAll(Me.GestInterDataSet)
End Sub
Private Sub MajHisto_Activated(sender As Object, e As EventArgs) Handles Me.Activated
Call Me.Traitement()
End Sub
Private Sub MajHisto_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
Intervention.Sauv_Inter.EnHisto = True
Call Me.Dispose()
End Sub
Private Sub AccessBddHisto_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'TODO: cette ligne de code charge les données dans la table 'GestInterDataSet.Historique'. Vous pouvez la déplacer ou la supprimer selon vos besoins.
Me.HistoriqueTableAdapter.Fill(Me.GestInterDataSet.Historique)
Application.DoEvents()
defrelefou
Messages postés15Date d'inscriptionmercredi 19 août 2009StatutMembreDernière intervention15 juin 2013 7 juin 2013 à 15:00
Ici cette focntion me permet d'écrire dans les textboxs de ma form (représentant mes différentes colonnes de ma bdd)
Sub RecupDon()
Dim Tmp As String
Dim i As Integer
defrelefou
Messages postés15Date d'inscriptionmercredi 19 août 2009StatutMembreDernière intervention15 juin 2013 7 juin 2013 à 15:01
Ici on vas trouver le nerf de la guerre:
Sub Traitement()
FinSauvHisto = False
If Intervention.Code_Excel.Import = False Then
Call Intervention.Code_RecupInfo.RécupInfo() 'démarre une focntion qui récupère les renseignement de ma fiche d'intervention en vue de les écrire dans ma bdd
If Intervention.Code_RecupInfo.VersionInter = 0 Then 'ici on trouve la condition qui me dit que c un ajout à effectuer
Intervention.Code_Tempo.Main(5000) 'ici une temporisation qui me permet d'attendre que ma bdd soit bien chargé (certain des pc ou tourne l'appli sont plus long au traitement
Me.BindingNavigatorAddNewItem.PerformClick() 'ici la demande d'ajout d'une nouvelle ligne
While BindingNavigatorPositionItem.Text <> CStr(Me.NbLigne + 2) 'ici j'attend que je soit bien arrivé à la nouvelle ligne (pas sur que ce soit utile)
End While
Intervention.Code_Tempo.Main(5000)
Intervention.Code_Tempo.Main(10000)
Me.RecupDon() 'ici je vient remplir mes champs de ma lignes
Me.HistoriqueBindingNavigatorSaveItem.PerformClick() 'ici j'enregistre dans ma bdd
Call NumItem() 'A partir de maintenant ce sont que des gestions d'animations fenêtre, bouton,...)
Call Intervention.Code_Générale.GestionEtatFiche(1)
Call Intervention.Code_Générale.ContEtatInter(1)
ElseIf Intervention.Code_RecupInfo.VersionInter = 2 Then 'Toute la partie qui suit est la mise à jour d'une ligne
Intervention.Code_Tempo.Main(100)
While BindingNavigatorPositionItem.Text <> CStr(CInt(Intervention.Code_RecupInfo.PositionBdd) + 1)
BindingNavigatorMoveNextItem.PerformClick()
Intervention.Code_Tempo.Main(10)
End While
Intervention.Code_Tempo.Main(100)
Me.RecupDon()
HistoriqueBindingNavigatorSaveItem.PerformClick()
Call Intervention.Code_Générale.GestionEtatFiche(3)
Call Intervention.Code_Générale.ContEtatInter(3)
End If
Call Intervention.Code_Générale.VerFiche(False) 'ici une autre animation et divers manipe
Else
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 7 juin 2013 à 22:24
Et tu n'as toujours pas trouvé la bonne icone pour le coloriage de code, dommage; c'est illisible
"Pas de problème mes colonnes de la ligne sont bien renseigné sur le bon numéro de ligne."
Honnêtement, ça ne veut rien dire.
Il n'y a pas de n° de ligne dans les tables.
Explique par l'exemple, car là, c'est incompréhensible.
Il est anormal d'avoir recourt à des tempos.
Une fois que tes ordres sont envoyés, ils sont envoyés.
Il faut approfondir, car je pense que tu as un premier problème de conception.
Pour pouvoir t'aider, il faut que tu fournisses tous les détails; n'attends pas qu'on te les demande.
Pour commencer, de quoi est composée ta table ? Quels champs et de quel types ?
Perso, je n'ai toujours pas compris de quel objet il s'agit pour 'intervention' (par exemple)
"Call Intervention.Code_Générale.ContEtatInter(1)"
Que veut dire cette ligne, que fait-elle ?
A quoi correspond le paramètre '1' ?
Est-ce important ?
Tu as collé trop de code qui nous écarte de ton problème qui est mal expliqué.
Alors commence par le début : utilise les termes adaptés.
Hélas, on ne peut pas te demander tous les détails de ton appli.
C'est à toi de ne fournir que le code en rapport avec le problème, au risque de noyer le lecteur (c'est mon cas)
Il serait peut-être bon de renommer les objets pour laisser comprendre de quels types ils sont. Ce sera plus pratique pour toi ET pour nous.
defrelefou
Messages postés15Date d'inscriptionmercredi 19 août 2009StatutMembreDernière intervention15 juin 2013 9 juin 2013 à 00:30
Je vais prendre en compte des observations.
J'ai recréer une form avec les textboxs liée à ma bdd.
Ou comme seul code ce trouve le chargement de la bdd et sont enregistrement (code fourni par défaut par VB)
soit:
private Sub HistoriqueBindingNavigatorSaveItem_Click(sender As Object, e As EventArgs) Handles HistoriqueBindingNavigatorSaveItem.Click
Me.Validate()
Me.HistoriqueBindingSource.EndEdit()
Me.TableAdapterManager.UpdateAll(Me.GestInterDataSet)
End Sub
Private Sub GestionHisto_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'TODO: cette ligne de code charge les données dans la table 'GestInterDataSet.Historique'. Vous pouvez la déplacer ou la supprimer selon vos besoins.
Me.HistoriqueTableAdapter.Fill(Me.GestInterDataSet.Historique)
End Sub
Donc pour info "Intervention " est le nom de mon projet, code_général l'une de mes class, ContEtatInter une fonction qui me permets d'animer mes boutons fenêtres et (1) correspond à un état pour mes animations.
Donc j'ai le même problème avec cette forme sans recodage de ma pars.
Soit des que je dépasse les 400 lignes les ajouts ce positionnent en lignes 330 et écrase les enregistrement à partir de 334 à 336 et ne dépasse pas 336.
Donc je dois avoir un problème sur les connexions, relations ou même conception de ma bdd. Mais la je ne sais plus quoi faire ...
Ma Bdd ai composé de 20 colonnes comprenant des chaines de caractère, entier, et bit.
je ensuite fait un dataset pour faire la liaison avec l'application on sont situé le fill,getdata() je n'irai pas plus long car a partir de la je ne sais pas car le bdd et moi c pas une folle histoire d'amour...