IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[PPC][C#][SQL2000] Problème au niveau de donné controlé


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2004
    Messages : 75
    Points : 44
    Points
    44
    Par défaut [PPC][C#][SQL2000] Problème au niveau de donné controlé
    Bonjour à tous,

    J'essaie de faire afficher un panel selon une donné prit dans une DB SQL2000. Cependant il affiche seulment le dernier choix (AWD) et je ne comprend pas pour. La donné est entrè dans une autre parti de l'application et la donné se retrouve belle et bien dans la db, j'ai vérifier.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    			try
    			{
    				SqlCeConnection SqlCnx = new SqlCeConnection(@"Data Source=dbvehiaai.sdf");
    				string sSQL = "SELECT opt_trac FROM vehiaai WHERE lot = "+LotNum;
    				SqlCeCommand SqlCommand = new SqlCeCommand(sSQL, SqlCnx);
    				SqlCnx.Open();
    				SqlCeDataReader SqlData = SqlCommand.ExecuteReader();
    				while(SqlData.Read())
    				{
    					string suspType = SqlData.GetString(0);
    					if(suspType == "1")
    					{
    						panelFwd.Visible = true;
    						panelRwd.Visible = false;
    						panelAwd.Visible = false;
    					}
    					else if(suspType == "2")
    					{
    						panelFwd.Visible = false;
    						panelRwd.Visible = true;
    						panelAwd.Visible = false;
    					}
    					else if(suspType == "3")
    					{
    						panelFwd.Visible = false;
    						panelRwd.Visible = false;
    						panelAwd.Visible = true;
    					}
    				}
    				SqlCnx.Close();
    			}
    			catch(SqlCeException ex)
    			{
    				MessageBox.Show("SqlCE Error :\n"+ex.Message, "SQLCE ERROR", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
    			}
    J'aimerais savoir de quel façon je peux mit prendre pour faire afficher le bon panel.

    Merci a tous.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2004
    Messages : 75
    Points : 44
    Points
    44
    Par défaut
    J'ai esseyer avec ceci aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    string suspType = SqlData["opt_trac"].ToString();

  3. #3
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    salut roach
    pourquoi utilises-tu un
    while(SqlData.Read())
    je croyais que tu recevais qu'une seule valeur : si oui alors tu n'a pas besoin de la boucle, de plus tu peux utiliser un switch plutôt que if

  4. #4
    Membre expérimenté
    Avatar de freddyboy
    Homme Profil pro
    Architecte technique
    Inscrit en
    Novembre 2003
    Messages
    810
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2003
    Messages : 810
    Points : 1 696
    Points
    1 696
    Par défaut
    ca va pas resoudre ton probleme mais attention de bien fermé le datareader une fois que tu ne l'utilise plus.

    @+

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2004
    Messages : 75
    Points : 44
    Points
    44
    Par défaut
    Oui vous avez ben raison merci

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2004
    Messages : 75
    Points : 44
    Points
    44
    Par défaut
    Bon voici se que j'ai fait suite a vos conseil :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    			try
    			{
    				SqlCeConnection SqlCnx = new SqlCeConnection(@"Data Source=dbvehiaai.sdf");
    				string sSQL = "SELECT opt_trac FROM vehiaai WHERE lot = "+LotNum;
    				SqlCeCommand SqlCommand = new SqlCeCommand(sSQL, SqlCnx);
    				SqlCnx.Open();
    				SqlCeDataReader SqlData = SqlCommand.ExecuteReader();
    				string suspType = SqlData["opt_trac"].ToString();
    				switch(suspType)
    				{
    					case "1":
    						panelFwd.Visible = true;
    						panelRwd.Visible = false;
    						panelAwd.Visible = false;
    						break;
    					case "2":
    						panelFwd.Visible = false;
    						panelRwd.Visible = true;
    						panelAwd.Visible = false;
    						break;
    					case "3":
    						panelFwd.Visible = false;
    						panelRwd.Visible = false;
    						panelAwd.Visible = true;
    						break;
    					default:
    						panelFwd.Visible = false;
    						panelRwd.Visible = false;
    						panelAwd.Visible = false;
    						break;
    				}
    				SqlCnx.Close();
    				SqlData.Close();
    			}
    			catch(SqlCeException ex)
    			{
    				MessageBox.Show("SqlCE Error :\n"+ex.Message, "SQLCE ERROR", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
    			}
    Cela me donne encore le panel AWD avec n'importe quel choix fait avant. Et quand je ferme le form j'ai cette erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    An unhandled exception of type 'System.InvalidOperationException' occurred in System.Data.SqlServerCe.dll
     
    Additional information: No data exists for the row/column.
    Y a t'il qulque chose que je n'ai pas comprit?

  7. #7
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Tu sembles ne pas avoir suivi le conseil de freddyboy ajoutes un Finally dans ton Try Catch pour correctement tout fermer en verifiant tout ce qu'il faut.
    Par contre je te conseille aussi de catcher toutes les exceptions et pas seulement les SqlCeException

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2004
    Messages : 75
    Points : 44
    Points
    44
    Par défaut
    ok et je met les deux close dans le finally ou le finally close tout du try automatiquement.

  9. #9
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    An unhandled exception of type 'System.InvalidOperationException' occurred in System.Data.SqlServerCe.dll 
     
    Additional information: No data exists for the row/column.
    Ta requête SQL ne semble rien retourner, ce qui expliquerait ton message d'erreur....

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2004
    Messages : 75
    Points : 44
    Points
    44
    Par défaut
    C'est ce que je regarde depuis tantot mais il y a belle et bien une donné dans la colonne "opt_trac". Les donné possible sont 1,2 ou 3. 1 = FWD 2 = RWD 3 = AWD/4X4.

    Donc selon le numéro il m'affiche les bon panel.

    Je continu a investiguer se problème, probablement un trouble de requête.

    Je vous tien au courant du développement.

    Merci encore.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2004
    Messages : 75
    Points : 44
    Points
    44
    Par défaut
    Je confirme qu'il y a bien la donné (1 pour "FWD") dans la colonne opt_trac de la table vehiaai.

    J'ai syncroniser le pocketpc avec sql et la donné y est lorsque je regarde dans la table vehiaai.

    Voila le contenu de la table vehiaai : (la ligne noir est mon test)

    http://infosalvage.wiredlinux.ca/infosalvage/image/opt_trac.bmp

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2004
    Messages : 75
    Points : 44
    Points
    44
    Par défaut
    le LotNum vient de ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    		public void SortLot(string LotNum)
    		{
    			txtLotNum.Text = LotNum;
    			this.ShowDialog();
    			ViewPanel(LotNum);
    		}
    ViewPanel étant le code ci-haut pour l'affichage du bon panel.


    Voici la methode complète :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    		public void ViewPanel(string LotNum)
    		{
    			try
    			{
    				SqlCeConnection SqlCnx = new SqlCeConnection(@"Data Source=dbvehiaai.sdf");
    				string sSQL = "SELECT opt_trac FROM vehiaai WHERE lot = "+LotNum;
    				SqlCeCommand SqlCommand = new SqlCeCommand(sSQL, SqlCnx);
    				SqlCnx.Open();
    				SqlCeDataReader SqlData = SqlCommand.ExecuteReader();
    				string suspType = SqlData.GetString(0);
    				switch(suspType)
    				{
    					case "1":
    						panelFwd.Visible = true;
    						panelRwd.Visible = false;
    						panelAwd.Visible = false;
    						break;
    					case "2":
    						panelFwd.Visible = false;
    						panelRwd.Visible = true;
    						panelAwd.Visible = false;
    						break;
    					case "3":
    						panelFwd.Visible = false;
    						panelRwd.Visible = false;
    						panelAwd.Visible = true;
    						break;
    					default:
    						panelFwd.Visible = false;
    						panelRwd.Visible = false;
    						panelAwd.Visible = false;
    						break;
    				}
    				SqlData.Close();
    				SqlCnx.Close();
    			}
    			catch(SqlCeException SqlCEex)
    			{
    				MessageBox.Show("SqlCE Error :\n"+SqlCEex.Message, "SQLCE ERROR", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
    			}
    			catch(Exception ex)
    			{
    				MessageBox.Show("Error :\n"+ex.Message);
    			}
    			finally
    			{
    			}
    		}
    ** je ne peux pas mettre les 2 close dans le finally car cela donne une erreur : The type or namespace name 'SqlData' could not be found (are you missing a using directive or an assembly reference?)

    Je sais pas si cela peux vous aidez un peut plus. Je l'espère

  13. #13
    Membre du Club Avatar de Manralf
    Inscrit en
    Août 2005
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 43
    Points : 48
    Points
    48
    Par défaut
    Bonjour,
    il te manque un SqlData.Read(); après le ExecuteReader();
    tu dois déclarer l'objet SqlData avant le bloc try.

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2004
    Messages : 75
    Points : 44
    Points
    44
    Par défaut
    Effectivement j'avais oublié le SqlData.Read() cela annule l'erreur comme quoi il ne trouve pas de donné dans la colonne spécifié (opt_trac).

    Cependant il n'affiche toujours pas le bon panel. Le seul panel qu'il affiche est le derniere dans le switch avant le default.

    Je continue a travailler sur cela, si vous avez des idées se serait apprécier.

    PS : Pour le finally cela fonction merci à toi pour les deux indication.

    Voila la nouvelle version :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    		public void ViewPanel(string LotNum)
    		{
    			SqlCeConnection SqlCnx = new SqlCeConnection(@"Data Source=dbvehiaai.sdf");
    			string sSQL = "SELECT opt_trac FROM vehiaai WHERE lot = "+LotNum;
    			SqlCeCommand SqlCommand = new SqlCeCommand(sSQL, SqlCnx);
    			SqlCeDataReader SqlData = SqlCommand.ExecuteReader();
    			try
    			{
    				SqlCnx.Open();
    				SqlData.Read();
    				string suspType = SqlData.GetString(0);
    				switch(suspType)
    				{
    					case "1":
    						panelFwd.Visible = true;
    						panelRwd.Visible = false;
    						panelAwd.Visible = false;
    						break;
    					case "2":
    						panelFwd.Visible = false;
    						panelRwd.Visible = true;
    						panelAwd.Visible = false;
    						break;
    					case "3":
    						panelFwd.Visible = false;
    						panelRwd.Visible = false;
    						panelAwd.Visible = true;
    						break;
    					default:
    						panelFwd.Visible = false;
    						panelRwd.Visible = false;
    						panelAwd.Visible = false;
    						break;
    				}
    			}
    			catch(SqlCeException SqlCEex)
    			{
    				MessageBox.Show("SqlCE Error :\n"+SqlCEex.Message, "SQLCE ERROR", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
    			}
    			catch(Exception ex)
    			{
    				MessageBox.Show("Error :\n"+ex.Message);
    			}
    			finally
    			{
    				SqlData.Close();
    				SqlCnx.Close();
    			}

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2004
    Messages : 75
    Points : 44
    Points
    44
    Par défaut
    J'ai placé un label pour ecrit le résultat de la requête, et rien ne s'écrit. C'est donc que mon problème est au niveau du SqlCeDataReader.

    Qu'est ce que vous en penssez ?

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2004
    Messages : 75
    Points : 44
    Points
    44
    Par défaut
    j'avais oublier de mettre le panelAwd.

    Cependant j'ai toujours aucune donné en sorti donc les 3 panel on comme propriété de visibilité à false.

    J'ai esseyer avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    				string suspType = SqlData["opt_trac"].ToString();
    et ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    				string suspType = SqlData.GetString(0);
    Sans aucun résultat potable

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2004
    Messages : 75
    Points : 44
    Points
    44
    Par défaut
    JE LAI EU

    cela ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    		public void SortLot(string LotNum)
    		{
    			txtLotNum.Text = LotNum;
    			this.ShowDialog();
    			ViewPanel(txtLotNum.Text);
    		}
    Mais cela oui :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    		public void SortLot(string LotNum)
    		{
    			txtLotNum.Text = LotNum;
    			ViewPanel(txtLotNum.Text);
    			this.ShowDialog();
    		}
    La variable LotNum ne passait pas dans le première exemple elle passe dans le deuxième.

    C'est bien beau tout sa mais je ne comprend pourquoi sa ne fonctionnait pas et j'ai juste montre une ligne de code de deux ligne et pouf cela fonctionne. Pourtant la variable LotNum peux être utilisé n'importe ou dans la méthode SortLot, non ???

    Si qqu peut m'éclairer, j'aime bien comprendre se que je fait

    Merci à tout ceux qui on mit sont grain de sel pour m'aider, je l'apprécie.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] problème au niveau de l'insertion des données
    Par mtcsmohamed dans le forum VB.NET
    Réponses: 4
    Dernier message: 20/06/2014, 14h44
  2. problème au niveau donnée formulaire
    Par cabotine202000 dans le forum Excel
    Réponses: 11
    Dernier message: 11/09/2011, 21h03
  3. probléme au niveau de base donnée
    Par najoua01 dans le forum VB.NET
    Réponses: 3
    Dernier message: 20/01/2011, 18h08
  4. Réponses: 6
    Dernier message: 24/09/2010, 00h32
  5. Réponses: 1
    Dernier message: 29/04/2009, 18h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo