begin process at 2013 05 26 10:04:08
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Visual Basic 6

 > 

Base de données

 > 

ADO & DAO

 > 

VB6\ADODB\Requête SQL\1 seul critère de sélection


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

VB6\ADODB\Requête SQL\1 seul critère de sélection

jeudi 16 août 2012 à 18:54:39 | VB6\ADODB\Requête SQL\1 seul critère de sélection

titicar

Bonjour à tous,

Je n'en suis qu'à mes débuts des SGBD et j'essaie d'écrire quelques simples requêtes. J'ai donc une fonction 'Requete_Execute(...)' qui s'exécute avec comme paramètre String, une séquence SQL (sSQL) :

Code Visual Basic :
Public Function Requete_Execute(myCnx As ADODB.Connection, ByVal sSQL As String) As ADODB.Recordset
'! Nota : myCnx est déjà ouverte

    '# Exécution de la requête:
    Set Requete_Execute = New ADODB.Recordset
    With Requete_Execute
        '# (La requète SQL est dans sSQL)
        '# L'exécution:
        .CursorLocation = adUseClient
        .Open sSQL, myCnx, adOpenStatic, adLockReadOnly
    End With
    
    '# Gestion des erreurs:
'    If Requete_Execute.BOF And Requete_Execute.EOF Then
    If Requete_Execute.RecordCount < 1 Then
        GoTo Requete_Execute_Fin
    End If

    '# Par précaution après Open:
    'Requete_Execute.MoveLast
    Requete_Execute.MoveFirst
    
Requete_Execute_Fin:
End Function


Ensuite, je lance un bouton de commande pour essayer.
Pour le moment je teste le fichier exemple BIBLIO.MDB donné chez Microsoft.
Dans cette DB, il y a une table "Authors" avec les champs "Au_ID","Author" et "Year Born".

Voici le bouton de commande Essai pour tester ma fonction 'Requete_Execute(...)'

Code Visual Basic :
Private Sub CmdEssai_Click()
Dim myRs As ADODB.Recordset, sSQL As String
'! Nota : MaCnx As ADODB.Connection est déjà ouverte (Provider=Microsoft.Jet.OLEDB.4.0)

    '# Construction de la requête:
    sSQL = "Select * From Authors"
    'sSQL = "Select Author From Authors Where Author Like " & """C*"""
    
    '# Envoi et récupération de la requête:
    Set myRs = Requete_Execute(MaCnx, sSQL)
    '# Puis affichage de la requête dans un LV:
    Call LV_Affiche_Recordset(Me.ListView1, myRs)

Set myRs = Nothing
End Sub

(Je ne décris pas la procédure LV_Affiche_Recordset qui n'a que peu d'intérêt dans cet exemple)
Dans un premier temps, je lance la requête sSQL = "Select * From Authors", et tout s'affiche correctement (donc tous les champs de la table).

Par contre, si je veux donner un critère, par exemple, tous les noms qui commencent par un "C" (ou "c") dans le champ "Author" de la table "Authors" avec la requête "Select Author From Authors Where Author Like " & """C*""", le résultat est zéro (ma liste est vide, et myRs.RecordCount=0). Alors qu'il existe des "Author" qui commence par la lette 'C'.

Aurais-je écrit une mauvaise syntaxe?

titicar
jeudi 16 août 2012 à 19:50:32 | Re : VB6\ADODB\Requête SQL\1 seul critère de sélection

jack

Administrateur CodeS-SourceS
Réponse acceptée !
Salut

C'est presque bon.
SQL possède ses propres règles et caractères :
% remplace le * de Windows
_ remplace le ?

Exemple pour les champs qui commencent par la lettre C
Like 'C%'
Exemple pour les champs qui accepte n'importe quel caractère ou chiffre (mais un seul) à l'emplacement 3
Like 'AB_DEF'

Méfiance :
Like est sensible à la case. 'C' n'est donc pas 'c'.
Il faut alors avoir recours aux crochets [ et ] dans lesquels tu vas pouvoir mettre les caractères recherchés (mais un seul)
Exemple pour les champs qui contient la lettre 'C' ou 'c' en troisième position et peuvent avoir d'autres caractères ensuite :
Like 'AB[Cc]%'
Exemple pour les champs qui contient la lettre 'C' ou 'c' en troisième position et peuvent avoir d'autres caractères ensuite :
Like 'AB[Cc]%'
Exemple pour les champs qui contiennent une des lettres de l'alphabet en majuscule en troisième position :
Like '__[A-B]%'

Tu peux aussi exclure certains caractères :
Exemple pour les champs qui ne doivent pas contenir la lettre 'C' ou 'c' en troisième position et peuvent avoir d'autres caractères ensuite :
Like 'AB[^Cc]%'
ou, à vérifier, je ne suis plus sûr :
Like 'AB[^C^c]%'

Tu noteras aussi que la délimitation du contenu d'un champ de type texte peut se faire avec les guillemets '
Cela simplifie l'écriture sous VB.
Exemple
sSQL = " Where monChamp Like 'C%'"

Internet regorge de sites donnant les bases et méthodes de SQL.

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 la partage (Socrate)
jeudi 16 août 2012 à 19:52:09 | Re : VB6\ADODB\Requête SQL\1 seul critère de sélection

jack

Administrateur CodeS-SourceS
Réponse acceptée !
PS : % remplace le *
Uniquement dans les Like.
Le "Select * From ..." reste une *
vendredi 17 août 2012 à 11:25:18 | Re : VB6\ADODB\Requête SQL\1 seul critère de sélection

titicar


Merci Jack

J'ai fait une batterie de tests et tout fonctionne.
Par contre, on dirait que les minuscules/majuscules sont confondus:
Exemple :
Code Visual Basic :
'! Like du genre 'AB[Cc]%'
'! Champ Author recherché = "Cope, Ken" '(champ Au_ID=963)
sSQL = "Select Author From Authors Where Author Like " & "'Co[P]e, K%'" '->Nb=1 malgré P majuscule?
'sSQL = "Select Author From Authors Where Author Like " & "'Co[p]e, K%'" '->Nb=1, OK
'sSQL = "Select Author From Authors Where Author Like " & "'Co[Pp]e, K%'" '->Nb=1, OK

Tous donnent le même résultat : "Cope, Ken", ce qui n'est pas un mal en soit car généralement, je ne tiens pas compte de la 'casse'.

titicar
vendredi 17 août 2012 à 14:45:02 | Re : VB6\ADODB\Requête SQL\1 seul critère de sélection

jack

Administrateur CodeS-SourceS
Ah bah peut-être. J'étais resté sur cette idée.
Le Like de VB, lui, est sensible. J'ai dû confondre (voir StrComp).


Cette discussion est classée dans : requete, requête, ssql, execute, color


Répondre à ce message

Sujets en rapport avec ce message

Requete ORACLE [ par pimousse75 ] A quoi peuvent bien servir ces 2 lignes ?Conn1.Execute "Alter Session Set nls_numeric_characters = ',.'" Conn1.Execute "Alter Session Set nls_date_ Executer requete sur base access depuis vb [ par gplog ] Mr_totoSalut tout le monde, Voila : Je voudrai exécuter une requete pour que les champs "Nom" de ma table "Clients" soit triés par ordre alphabétiqu Prob. Requete SQL et VB [ par seedorf ] Salut,j'ai un prob un peu con, j'execute une requete sql ds mon prob vb et elle est la suivante:STR_SQL = "UPDATE CLIENT SET CLIENT.NOM_CLT = '" & Tri urgent: requête sql [ par piervs ] j'essaye de faire un recorsdet pour faire une requete en vb, or ça ne marche que si la requête est simple, c'est à dire sans inner join, autrement il Requête SQL [ par aurelia345 ] Bonjour tout le monde,Je me bats depuis deux jours avec ma requête SQL sensée récupérer tous les champs de la table individu de ma base de données Acc Requête SQL et Variables [ par kulls ] Bonjour,voila, j'aimerais avoir un petit renseignement, c'est peut etre une question Bête mais voila, j'aimerais stocker dans une variables une requêt Mettre le résultat d'une requête dans un fichier texte [ par morpheus83z ] Salut !En premier lieu je vous fournis le code de mon "prog" :Option ExplicitPublic Function Main()Dim MyDb As DatabaseDim MyRecordset As RecordsetDim Requete avec un LIKE ! [ par Docck ] Salut, je viens de passer une bonne partie de la matinée à trouvé mon erreur.En VBA, j'execute la requete suivante :Dim cx As New ADODB.ConnectionDim empecher d executer une requete ACCESS 2000 [ par yaya31 ] Bonjour tout le mondeVoila mon probleme:quand j appuie sur un bouton, ça m execute une requete mais si j appuie plusieurs fois il m execute a chaque f Pb de requete SQL [ par lucio57 ] Bonjour je cherche à créer un requête SQL qui alimente un datagrid.Ce DataGrid est composé de 4 colonnes Comptes, Libellé, Crédit, DébitMa table ne co


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2013
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,624 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales