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

VBScript Discussion :

ADODB.Recordset = Nombre ligne


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 89
    Par défaut ADODB.Recordset = Nombre ligne
    Bonjour

    voici mon 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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    Function Msj_Data_Courbe(Byval Des,Nr_Courbe)
     
    Dim objConnection, objCommand, objRecordset, strConnectionString
    Dim strSQL, lngCount , lngValue
    Dim L,V,T,D,E,N
     
    Set L = HMIRuntime.Tags("LABEL")
    Set V = HMIRuntime.Tags("VISIBLE")
    Set T = HMIRuntime.Tags("TAGNAME")
    Set D = HMIRuntime.Tags("DES")
    Set E = HMIRuntime.Tags("ETAT_SQL")
    Set N = HMIRuntime.Tags("NAME")
     
    E.Value = "en cours"
    E.write
     
     
    strConnectionString = "Provider=MSDASQL;DSN=SampleDSN;UID=;PWD=;"
    Set objConnection = CreateObject("ADODB.Connection")
    objConnection.ConnectionString = strConnectionString
    objConnection.Open
    Set objRecordset = CreateObject("ADODB.Recordset")
    Set objCommand = CreateObject("ADODB.Command")
    objCommand.ActiveConnection = objConnection
    '---------------------- SQL ---------------
     
     
    strSQL = "SELECT WINCC_COURBE.Description, WINCC_COURBE.Tag, WINCC_COURBE.LABEL, WINCC_COURBE.Visible,WINCC_COURBE.Courbes"
    StrSQL = StrSQL + " FROM WINCC_COURBE "
    StrSQL = StrSQL + " WHERE WINCC_COURBE.Description='"
    StrSQL = StrSQL + Des +"' And WINCC_COURBE.Nr_Courbes= " 'Parametre
    StrSQL = StrSQL + Nr_Courbe +";"  'Parametre de la fonction
    strSQL = Replace (strSQL,vbNullChar ,"") ' suprimer les carectere null
     
     
     
    T.Value ="11111111111111"
    T.Write
     
     
    objCommand.CommandText = strSQL
    Msj_debug(Strsql)
     
    Set objRecordset = objCommand.Execute
    lngCount = 0
    lngCount = objRecordset.Fields.count
    'objRecordset.
    'Msj_debug("Lire 01")
     
     
    T.Value = "222222"
    T.write
     
    'If (LngCount = vbNullChar)then
    '    T.Value = "NULL"
    '    T.write
     
    'End If
     
     
    'MISE AJOUR DE LA VARIABLE
    If (lngCount>0) Then        
       D.Value = objRecordset.Fields(0).Value
       T.Value = objRecordset.Fields(1).Value
       L.Value = objRecordset.Fields(2).Value	
       V.value = objRecordset.Fields(3).Value   
       N.value = objRecordset.Fields(4).Value   
       E.Value = "ok"
     
       Else
       T.Value = "&"
       V.Value = False
       T.Value = "&"
       D.Value = "&"
       N.value = "&"
       E.Value = "0 lignes"
     
     
    End If
    L.Write
    V.Write
    T.Write
    D.Write
    N.Write
    E.write
     
    End Function
    Lorsque ma fonction trouve un ligne, tous se passe bien.

    Mais si ma fonction ne trouve rien, il plante avant l'instruction
    Je ne sais pas la valeur de ma variable LngCount quand il trouve rien.

    Quel comparaison, je pourrais faire ?

  2. #2
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 130
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Set objRecordset = objCommand.Execute
     
    If objRecordset.State = 0 Then 'adStateClosed = 0
        'pas d'enregisrement disponnible
        Else
        'enregisrement disponnible 'adStateOpen = 1
    End If
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 89
    Par défaut
    Voila mon nouveau 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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    Function Msj_Data_Courbe(Byval Des,Nr_Courbe)
    Msj_debug("debut fonction")
     
    Dim objConnection, objCommand, objRecordset, strConnectionString
    Dim strSQL 
    Dim L,V,T,D,E,N
     
    Set L = HMIRuntime.Tags("LABEL")
    Set V = HMIRuntime.Tags("VISIBLE")
    Set T = HMIRuntime.Tags("TAGNAME")
    Set D = HMIRuntime.Tags("DES")
    Set E = HMIRuntime.Tags("ETAT_SQL")
    Set N = HMIRuntime.Tags("NAME")
     
    E.Value = "en cours"
    E.write
     
    strConnectionString = "Provider=MSDASQL;DSN=SampleDSN;UID=;PWD=;"
    Set objConnection = CreateObject("ADODB.Connection")
    objConnection.ConnectionString = strConnectionString
    objConnection.Open
    Set objRecordset = CreateObject("ADODB.Recordset")
    Set objCommand = CreateObject("ADODB.Command")
    objCommand.ActiveConnection = objConnection
    '---------------------- SQL ---------------
     
    strSQL = "SELECT WINCC_COURBE.Description, WINCC_COURBE.Tag, WINCC_COURBE.LABEL, WINCC_COURBE.Visible,WINCC_COURBE.Courbes"
    StrSQL = StrSQL + " FROM WINCC_COURBE "
    StrSQL = StrSQL + " WHERE WINCC_COURBE.Description='"
    StrSQL = StrSQL + Des +"' And WINCC_COURBE.Nr_Courbes= " 'Parametre
    StrSQL = StrSQL + Nr_Courbe +";"  'Parametre de la fonction
    strSQL = Replace (strSQL,vbNullChar ,"") ' suprimer les carectere null
     
    '------------------------- fin sql
    objCommand.CommandText = strSQL
    Set objRecordset = objCommand.Execute
    '-------------------- test du nombre de ligne
    Msj_debug("avant le if (State) avec sql = " + strSQL)
    'MISE AJOUR DE LA VARIABLE
    If objRecordset.State = 0 Then  'test state       
       ' 'pas d'enregisrement disponnible
       Msj_debug("Je suis dans ALORS du if ")
       T.Value = "&"
       V.Value = False
       T.Value = "&"
       D.Value = "&"
       N.value = "&"
       E.Value = "0 lignes"
       Msj_debug("pas_trouvé")	
       Else
       'enregisrement disponnible 'adStateOpen = 1
       D.Value = objRecordset.Fields(0).Value
       T.Value = objRecordset.Fields(1).Value
       L.Value = objRecordset.Fields(2).Value	
       V.value = objRecordset.Fields(3).Value   
       N.value = objRecordset.Fields(4).Value   
       E.Value = "ok"
       Msj_debug("trouvé")
     
    End If
    '--------------- ecriture des variables
    L.Write
    V.Write
    T.Write
    D.Write
    N.Write
    E.write
    '------------  mémoire
    Set objRecordset = Nothing
    Set objCommand = Nothing
    objConnection.close
    Set objConnection = Nothing
    Msj_debug("Fin fonction avec sql "+ strSQL)
     
    End Function
    cela ne marche toujours pas.
    (D'apres mon Msj_debug) Quand je fait ma requette avec des paramètre pour ne rien trouvé, ma fonction plante avant le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If objRecordset.State = 0 Then.
    Mais aujourd'hui ce n'est pas mon jour.

  4. #4
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 130
    Par défaut
    La rédaction de la requête n'est pas bonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSQL = strSQL + Nr_Courbe + ";" 'Parametre de la fonction
    Nr_Courbe étant un numérique et le fait de concaténer avec des + (plus), VBscript ne comprend pas ce qu'il doit faire.
    2 solutions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    strSQL = "SELECT WINCC_COURBE.Description, WINCC_COURBE.Tag, WINCC_COURBE.LABEL, WINCC_COURBE.Visible,WINCC_COURBE.Courbes"
    strSQL = strSQL + " FROM WINCC_COURBE "
    strSQL = strSQL + " WHERE WINCC_COURBE.Description='"
    strSQL = strSQL + Des + "' And WINCC_COURBE.Nr_Courbes= " 'Parametre
    strSQL = strSQL + Cstr(Nr_Courbe) + ";" 'Parametre de la fonction
    ou mieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    strSQL = "SELECT WINCC_COURBE.Description, WINCC_COURBE.Tag, WINCC_COURBE.LABEL, WINCC_COURBE.Visible,WINCC_COURBE.Courbes"
    strSQL = strSQL & " FROM WINCC_COURBE "
    strSQL = strSQL & " WHERE WINCC_COURBE.Description='"
    strSQL = strSQL & Des & "' And WINCC_COURBE.Nr_Courbes= " 'Parametre
    strSQL = strSQL & Nr_Courbe & ";" 'Parametre de la fonction
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 89
    Par défaut
    ce matin, j'ai changé ma méthode. Voici mon nouveau 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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    Function Msj_Data_Courbe(Byval Des,Nr_Courbe)
    Msj_debug("debut fonction")
     
    Dim objConnection, objCommand, objRecordset, strConnectionString
    Dim strSQL 
    Dim L,V,T,D,E,N,fini,Desc,Nrc
     
    Set L = HMIRuntime.Tags("LABEL")
    Set V = HMIRuntime.Tags("VISIBLE")
    Set T = HMIRuntime.Tags("TAGNAME")
    Set D = HMIRuntime.Tags("DES")
    Set E = HMIRuntime.Tags("ETAT_SQL")
    Set N = HMIRuntime.Tags("NAME")
     
    T.Value = "&"
    V.Value = False
    T.Value = "&"
    D.Value = "&"
    N.value = "&"
     
    E.Value = "en cours"
    E.write
    Msj_debug("0.1")
     
    Desc=Replace (des,vbNullChar ,"") ' suprimer les carectere null
    Nrc = "0"
     
    strConnectionString = "Provider=MSDASQL;DSN=SampleDSN;UID=;PWD=;"
    Set objConnection = CreateObject("ADODB.Connection")
    objConnection.ConnectionString = strConnectionString
    objConnection.Open
    Set objRecordset = CreateObject("ADODB.Recordset")
    Set objCommand = CreateObject("ADODB.Command")
    objCommand.ActiveConnection = objConnection
    '---------------------- SQL ---------------
     
    strSQL ="SELECT WINCC_COURBE.* FROM WINCC_COURBE;"
     
    strSQL = Replace (strSQL,vbNullChar ,"") ' suprimer les carectere null
    Msj_debug(strSQL)
    '------------------------- fin sql
    objCommand.CommandText = strSQL
    Set objRecordset = objCommand.Execute
    objRecordset.movefirst
    fini = False 
     
    Do While Not fini
      Msj_debug("03 "+Des)
      If objRecordset.EOF Then 
           fini = True
         Else   
          If ((objRecordset.Fields(2).Value = Desc) And (objRecordset.Fields(1).Value = "0") )Then 
               	    'J'ai trouvé
             		D.Value = objRecordset.Fields(2).Value
    		 		T.Value = objRecordset.Fields(3).Value
    		 		L.Value = objRecordset.Fields(4).Value	
    		 		V.value = objRecordset.Fields(5).Value   
    			 	N.value = objRecordset.Fields(0).Value   
    		 		E.Value = "ok"
                    fini = True
            End If   
     
           objRecordset.MoveNext	
      End If
    Loop 
     
    Msj_debug("06.01.19 des : " & Desc & " Nr_courbe : " & Nrc & " e.value : " & E.Value)
     
     
    '--------------- ecriture des variables
    L.Write
    V.Write
    T.Write
    D.Write
    N.Write
    E.write
    '------------  mémoire
    Set objRecordset = Nothing
    Set objCommand = Nothing
    objConnection.close
    Set objConnection = Nothing
    End Function
    cela marche bien mais avec ce test

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ((objRecordset.Fields(2).Value = Desc) And (objRecordset.Fields(1).Value = "0") )Then

    Mais avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          If ((objRecordset.Fields(2).Value = Desc) And (objRecordset.Fields(1).Value = Nr_Courbe) )Then
    il ne trouve pas ma ligne.

    voici l'appel de ma fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Msj_Data_Courbe Objc.Caption,"0"
    donc je lui passe bien un string.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 89
    Par défaut
    je pense avoir trouvé une solution.

    Dans acces, j'ai déclarée ma colonne "Nr_courbes" de type texte au lieu de Type entier.

    et cela marche bien

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

Discussions similaires

  1. [VB.NET] Nombre ligne d'un DataGrid
    Par botanique dans le forum Windows Forms
    Réponses: 11
    Dernier message: 05/11/2005, 16h45
  2. [jawin][DLL][VB] ADODB.recordset
    Par blaz dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 09/08/2005, 18h42
  3. Problème avec ADODB.Recordset
    Par Edouard Kaiser dans le forum ASP
    Réponses: 13
    Dernier message: 09/08/2005, 17h54
  4. Nombre ligne dans un ensemble de fichier
    Par devdev2003 dans le forum Linux
    Réponses: 8
    Dernier message: 13/05/2005, 18h59
  5. Compter le nombre ligne listée (COUNT) ?
    Par StouffR dans le forum Langage SQL
    Réponses: 7
    Dernier message: 02/09/2002, 09h41

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