none
Charger la ligne d'une table de ma bdd quand une variable de mon programme correspond à 2 éléments de cette ligne mis bout à bout RRS feed

  • Question

  • Bonjour,

    je cherche à charger la ligne d'une table de ma bdd quand une variable de mon programme correspond à 2 éléments de cette ligne mis bout à bout.

    Exemple : ma variable "symbole" = 1234ABCD

    Si dans ma colonne A je trouve 1234,  ET que dans ma colonne B il a ABCD, alors symbole = AB donc la ligne est retournée.

    Je sais pas si j'ai réussi à être très clair mais bon voilà mon code (qui ne marche pas):

    monemballage = BASE_DE_DONNEESDataSet.BASE_ETIQUETTES.Select("A & B=' "& symbole &" ' ")

    If Not monemballage Is Nothing Then
        ....
    Else
        
    MsgBox(symbole & " non trouv dans la base.", MsgBoxStyle.Critical OrMsgBoxStyle.OkOnly)
    End If

     

    jeudi 12 janvier 2012 09:52

Réponses

  • Select est totalement général. Le critère peut être ce que l'on veut et cela retourne donc toujours un tableau qui va contenir toutes les lignes qui répondent au critère quel que soit leur nombre (0, 1 ou plus). Si on sait que l'on récupère au plus une ligne on pourra utiliser l'élement d'index 0 voire provoquer volontairement une erreur si on trouve plus d'une ligne pour indiquer une situation anormale.

    Si éventuellement il s'agit de la clé primaire on peut utiliser Find. Comme Find est spécifiquement prévu pour sélectionner sur la clé primaire cete fonction retourne nécessairement une seule ligne.

    Voir http://msdn.microsoft.com/fr-fr/library/y06xa2h1(v=vs.80).aspx

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    • Marqué comme réponse Fy789 vendredi 13 janvier 2012 12:57
    vendredi 13 janvier 2012 12:14
    Modérateur

Toutes les réponses

  • Bonjour,

    Cf la doc http://msdn.microsoft.com/fr-fr/library/det4aw50.aspx qui pointe vers la page indiquant les expressions possibles. C'est + pour la concaténation.

    Attention cela ne donne pas forcément la même chose que A='1234' AND B='ABCD'

    (si A vaut '12' et B vaut '34ABCD' le premier critère sélectionnera la ligne, le second ne la sélectionnera pas)


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    • Proposé comme réponse SOW Bano jeudi 12 janvier 2012 12:41
    jeudi 12 janvier 2012 12:30
    Modérateur
  • Merci de l'aide !

    J'ai cependant une erreur que je n'arrive pas à enlever :

    Une valeur de type 'Tableau à 1 dimension(s) de System.Data.DataRow' ne peut pas être convertie en
    'MonDossier.BASE_DE_DONNEESDataSet.BASE_ETIQUETTESRow'.

    Je dois voir si ma variable correspond à 2 données concaténées de ma table Access et si aucun résultat n'est trouvé, alors je revérifie si ma variable correspond cette fois à une seule donnée de ma table.

    monemballage = BASE_DE_DONNEESDataSet.BASE_ETIQUETTES.Select(

    "A + B='" & symbole & "'")

    If monemballage.Length = 0 Then
          
    monemballage = BASE_DE_DONNEESDataSet.BASE_ETIQUETTES.Select("A='" & symbole & "'")
    End If






    • Modifié Fy789 jeudi 12 janvier 2012 15:24
    jeudi 12 janvier 2012 15:17
  • Voir comment est déclarée "monemballage"  et le type retournée par "BASE_ETIQUETTESRow" (en plaçant la souris sur cette fonction) et s'assurer qu'ils correspondent...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    jeudi 12 janvier 2012 15:31
    Modérateur
  • Dim monemballage As BASE_DE_DONNEESDataSet.BASE_ETIQUETTESRow

     



    • Modifié Fy789 jeudi 12 janvier 2012 15:44
    jeudi 12 janvier 2012 15:40
  • Donc c'est une seule ligne et non pas un tableau. Select retourne un tableau de toutes les lignes qui répondent au critère...

    Que donne Dim MonEmballage() As...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    jeudi 12 janvier 2012 18:20
    Modérateur
  • Dim monemballage () As BASE_DE_DONNEESDataSet.BASE_ETIQUETTESRow me bloque pour la suite, je dois comparer une variable avec 2 données concaténées pour ensuite, en cas de résultat, récupérer toutes les autres données de la ligne. 

    J'avais penser à tout simplement ajouter une colonne dans ma bdd qui reprenait les 2 qui permettent la vérification mais je ne dois pas toucher à la bdd...

    Je suis un peu perdu là...

    vendredi 13 janvier 2012 09:10
  • Select est totalement général. Le critère peut être ce que l'on veut et cela retourne donc toujours un tableau qui va contenir toutes les lignes qui répondent au critère quel que soit leur nombre (0, 1 ou plus). Si on sait que l'on récupère au plus une ligne on pourra utiliser l'élement d'index 0 voire provoquer volontairement une erreur si on trouve plus d'une ligne pour indiquer une situation anormale.

    Si éventuellement il s'agit de la clé primaire on peut utiliser Find. Comme Find est spécifiquement prévu pour sélectionner sur la clé primaire cete fonction retourne nécessairement une seule ligne.

    Voir http://msdn.microsoft.com/fr-fr/library/y06xa2h1(v=vs.80).aspx

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    • Marqué comme réponse Fy789 vendredi 13 janvier 2012 12:57
    vendredi 13 janvier 2012 12:14
    Modérateur
  • Merci pour la doc !
    J'ai enfin trouvé mon bonheur et avec l'ajout d'une requète SQL tout marche bien.

    Encore merci pour les aides et la rapidité de traitement !

    vendredi 13 janvier 2012 12:57