[..] Création de la fonction "Recherche" de mon script.

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
BeCool
Niveau 5
Niveau 5
Messages : 173
Enregistré le : jeu. 30 oct. 2008 08:48
Status : Hors ligne

Re: [..] Création de la fonction "Recherche" de mon script.

#21

Message par BeCool »

Je pense qu'effectivement un tuto bien claire serrait la bienvenue.

Je ne comprend pas. Je n'ai pas la fonction ADO_Open ().

J'ai fais plusieurs test mais qui ne mènent a rien. Impossible de lancer mon script.au3.

Et au passage, ma bdd a une extension en .accdb. Peut être que ca peut changer quelque chose ?

P.S: Dans mon script je n'ai mis que ces 2 lignes :

Code : Tout sélectionner

Global $bdd= "c:\trombidb.accdb"
Global $oConn = ADO_Open($bdd)
Il n'y a pas d'include ou autre a mettre ?

Edit : Après avoir lu votre message, je comprend un tout petit peu mieux comment lire une bdd. Mais vraiment très légèrement.
Je comprend aussi maintenant pourquoi je ne pouvais pas lire ma BDD juste avec les 2 lignes du dessus :oops:
En revanche, pour ce qui est de l'extension de ma BDD, ça me dit "Format de base de données ('C:\trombidb.accdb') non reconnu." Avec une petite phrase juste au dessus "We intercepted a COM Error !"

Edit 2 : Je viens de changer l'extension de la BDD en .mdb et ca ne change rien, toujours le même message qui dit que le format de la base de donnée n'est pas reconnu.
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Création de la fonction "Recherche" de mon script.

#22

Message par GaRydelaMer »

J'ai pas Access 2007. A voir avec si tu peux pas créer la base au format Access 2000/2003 ?

Edit:
La mienne en version 2000:http://dl.free.fr/jvdTIYLX8
BeCool
Niveau 5
Niveau 5
Messages : 173
Enregistré le : jeu. 30 oct. 2008 08:48
Status : Hors ligne

Re: [..] Création de la fonction "Recherche" de mon script.

#23

Message par BeCool »

J'ai ouvert la BDD de 1.4 Mo en format access 2007 (.accdb) et je l'ai enregistrer sous un format 2000 (.mdb) C'est tout de suite moins gros (276 Ko) et en plus ça marche ! (Quand je lance le script, il ne m'affiche rien, donc je considère que ca marche vu qu'il n'y a pas d'erreur !

:mrgreen:

Edit : Je viens de voir votre "Edit" juste après avoir poster ce message ^^

Edit2 : Je viens de regarder votre DB, nous n'avons pas la même. Je le dis juste, histoire qu'il n'y ait pas de confusion ;)
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Création de la fonction "Recherche" de mon script.

#24

Message par GaRydelaMer »

Avant de compiler le script teste le dans Scite.

Tous les messages je les affiches dans la console de Scite, Commande Exécuter touche F5.

Avec els petits bout de code j'affiche la liste des tables et des infos sur les champs.

Je file je re dans 1 heure.
BeCool
Niveau 5
Niveau 5
Messages : 173
Enregistré le : jeu. 30 oct. 2008 08:48
Status : Hors ligne

Re: [..] Création de la fonction "Recherche" de mon script.

#25

Message par BeCool »

Je vois très bien la liste des tables, mais je ne vois pas ou ce trouvent les infos sur les champs
► Afficher le texte
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Création de la fonction "Recherche" de mon script.

#26

Message par GaRydelaMer »

Juste 3 posts avant j'ai fai un Edit
BeCool
Niveau 5
Niveau 5
Messages : 173
Enregistré le : jeu. 30 oct. 2008 08:48
Status : Hors ligne

Re: [..] Création de la fonction "Recherche" de mon script.

#27

Message par BeCool »

Je viens de voir.

Code : Tout sélectionner

For $Field In $oRS.Fields
    ConsoleWrite($Field.Name & @LF)
    ConsoleWrite("  " & $Field.Type & @LF)
    ConsoleWrite("  " & $Field.Value & @LF)
Next


ConsoleWrite sert a écrire, dans mon cas pour faire une recherche, ce ne serrait pas plutôt ConsoleRead qu'il faudrait que je face ?
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Création de la fonction "Recherche" de mon script.

#28

Message par GaRydelaMer »

Non j'utilise consolewrite() pour avoir une sortie lisible par 1 humain.

pour l'instant je te présente comment accéder aux différents objets contenu dans une base de données.

Une fois les principes d'accès aux données comprise, tu pourras en faire ce que tu veux. Les afficher dans une belle fenêtre, dans 1 fichier etc...
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Création de la fonction "Recherche" de mon script.

#29

Message par GaRydelaMer »

Bon maintenant on va acceder à la table tb_personnes et lire son contenu.

1 on créer un objet ADODB.RecordSet.
2 on lui donne une requête à exécuter (du SQL la plupart du temps)
3 on va lire et afficher dans la console les données de la table.

Code : Tout sélectionner

Global Const $adOpenStatic = 3
Global Const $adLockOptimistic = 3

Global $SQL = "SELECT * FROM tb_Personnes"
$oRS = ObjCreate("ADODB.Recordset")
$oRS.Open($SQL, $oConn, $adOpenStatic, $adLockOptimistic)
If $oRS.EOF Then
    ConsoleWrite("Aucun enregistrement dans la table" & @LF)
Else
    ConsoleWrite($oRS.RecordCount & " enregistrement dans la table" & @LF)
    For $Field In $oRS.Fields
        ConsoleWrite($Field.Name & @TAB)
    Next
    ConsoleWrite(@LF)
    While Not $oRS.EOF
        For $Field In $oRS.Fields
            ConsoleWrite($Field.Value & @TAB)
        Next
        ConsoleWrite(@LF)
        $oRS.MoveNext
    WEnd
EndIf
$oRS.Close
 
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Création de la fonction "Recherche" de mon script.

#30

Message par GaRydelaMer »

Comme tu peux le voir on est pas trop renseigner sur la fonction et le service, on a juste l'identifiant des 2 tables.

Alors on va modifier la chaine SQL et utiliser ce qu'on appelle des jointures pour relier les tables entre elle.

Code : Tout sélectionner

Global $SQL = " SELECT Nom, Prenom, Service, Fonction, NumTel1, NumTel2 " & _
        "FROM (tb_Personnes INNER JOIN tb_Services ON tb_Personnes.Service_id=tb_Services.Service_id) " & _
        "INNER JOIN tb_Fonctions ON tb_Personnes.Fonction_id=tb_Fonctions.Fonction_id"
;à utiliser comme ca:
$oRS.Open($SQL, $oConn, $adOpenStatic, $adLockOptimistic)
 
le reste du code est le même.
le résultat pour moi

Code : Tout sélectionner

2 enregistrement dans la table
Nom Prenom  Service Fonction    NumTel1 NumTel2 
toto    tata    Compta  Chef    0401020304      
titi    tutu    Compta  Secrétaire 0404030201      
 
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Création de la fonction "Recherche" de mon script.

#31

Message par GaRydelaMer »

Comme tu le vois en changeant juste le SQL on a 2 résultat identique avec le même code.

Pour effectuer une recherche on va faire de même on va utiliser du SQL

Mais avant tout il faut savoir ce que l'on va chercher et ou se cache cette information et son type.

Donc 1 on chercher une personne par son nom:
Nom = toto
Nom commence par t
Nom contient t

En SQL:
c'est la clause WHERE que l'on va ajouter à la suite.

Code : Tout sélectionner

Global $SQL = " SELECT Nom, Prenom, Service, Fonction, NumTel1, NumTel2 " & _
        "FROM (tb_Personnes INNER JOIN tb_Services ON tb_Personnes.Service_id=tb_Services.Service_id) " & _
        "INNER JOIN tb_Fonctions ON tb_Personnes.Fonction_id=tb_Fonctions.Fonction_id"

Global $rec = InputBox("Recherche", "Rechercher un nom")
Global $WHERE = " WHERE Nom='" & $rec & "'" ; penser a entouré la chaine chercher avec '

$oRS.Open($SQL & $WHERE, $oConn, $adOpenStatic, $adLockOptimistic)
 
essaye aussi ceux la:

Code : Tout sélectionner

;; en SQL % et le caractère de remplacement le joker
Global $WHERE = " WHERE Nom like '" & $rec & "%'"; commence par
Global $WHERE = " WHERE Nom like '%" & $rec & "%'"; contient 
 
BeCool
Niveau 5
Niveau 5
Messages : 173
Enregistré le : jeu. 30 oct. 2008 08:48
Status : Hors ligne

Re: [..] Création de la fonction "Recherche" de mon script.

#32

Message par BeCool »

Quand je lance le script ci-dessous, il m'affiche une fenêtre qui me demande de chercher un nom, normale jusqu'à maintenant, mais une fois le nom entré, que le nom éxiste dans la BDD ou pas, il me met une erreur.

Voici le code :
► Afficher le texte
et voici l'erreur:
Image
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Création de la fonction "Recherche" de mon script.

#33

Message par GaRydelaMer »

Bonjour

message clair la connexion est fermée.

tu as un $oConn.Close avant d'ouvrir ton dernier RecordSet.

Fais une fonction quitter que tu appelle dans le While a la place du ExitLoop

Code : Tout sélectionner

Func _Quitter()
    $oRs.Close
    $oConn.Close
    GuiDelete($GUI)
    Exit
EndFunc
BeCool
Niveau 5
Niveau 5
Messages : 173
Enregistré le : jeu. 30 oct. 2008 08:48
Status : Hors ligne

Re: [..] Création de la fonction "Recherche" de mon script.

#34

Message par BeCool »

Heu, j'ai peur de ne pas comprendre .
Je ne vois pas de ExitLoop dans le code.

J'ai quand même essayé de faire ce que vous m'avez dit.
J'ai donc supprimer $oRS.Close et $oConn.Close des lignes 35 et 36, et j'ai mis un _Quitter() a la ligne 34.

J'ai ensuite rajouté la fonction _Quitter() a la suite de la fonction _MY_AU3_ErrFunc() mais là, problème. Dans la fonction _Quitter(), vous dites de supprimer la GUI $GUI alors qu'elle n'existe pas. Et si je supprime cette ligne, quand le lance le script, il ne ce passe rien.
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Création de la fonction "Recherche" de mon script.

#35

Message par GaRydelaMer »

oui pas de Exitloop c'est vrai, je me suis mis dans l'hypothèse ou tu avais une fenêtre afficher avec un while et un exitloop pour quitter le programmme.

Mais ceci dit les principes que l'on a abordé dans le post reste les même.

1 connexion
2 Requête SQL
3 on affiche
4 on est propre on ferme la requête et la connexion.

Tu peux pas faire une requête si la base est pas ouverte !!!
BeCool
Niveau 5
Niveau 5
Messages : 173
Enregistré le : jeu. 30 oct. 2008 08:48
Status : Hors ligne

Re: [..] Création de la fonction "Recherche" de mon script.

#36

Message par BeCool »

Ok, et c'est normale si il ne se passe rien quand je tape sur la touche "entré" après avoir rentré un nom valide ?
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Création de la fonction "Recherche" de mon script.

#37

Message par GaRydelaMer »

Oui, c'est normal, mais il me semble qu'il se passe quelque chose, puisque tu as un message d'erreur qui t'indique que la base est fermé.
Réfléchis un peu tu as toutes les infos nécessaires.
BeCool
Niveau 5
Niveau 5
Messages : 173
Enregistré le : jeu. 30 oct. 2008 08:48
Status : Hors ligne

Re: [..] Création de la fonction "Recherche" de mon script.

#38

Message par BeCool »

Oui mais justement, si je pose cette question, c'est parce que j'ai vu dans le code :

Code : Tout sélectionner

If $oRS.EOF Then
    ConsoleWrite("Aucun enregistrement dans la table" & @LF)
Else
    ConsoleWrite($oRS.RecordCount & " enregistrement dans la table" & @LF)
Et si je comprend bien, normalement ca m'affiche un message, or, là, il n'y a pas de message qui s'affiche. Voilà pourquoi j'ai posé la question au dessus ;)
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Création de la fonction "Recherche" de mon script.

#39

Message par GaRydelaMer »

L'erreur est juste avant quand tu ouvre le recordset, donc ces bout de codes ne sont pas exécuter puisque une erreur est intercepter et te renvoie a la fonction de gestion d'erreur ;):p
BeCool
Niveau 5
Niveau 5
Messages : 173
Enregistré le : jeu. 30 oct. 2008 08:48
Status : Hors ligne

Re: [..] Création de la fonction "Recherche" de mon script.

#40

Message par BeCool »

Je n'y comprend décidément rien ...
J'ai beau essayé pleins de façons différentes qui me paraissent logique, ça ne change rien ...
Répondre