Page 2 sur 3

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

Posté : ven. 24 avr. 2009 15:01
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.

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

Posté : ven. 24 avr. 2009 15:10
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

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

Posté : ven. 24 avr. 2009 15:18
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 ;)

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

Posté : ven. 24 avr. 2009 15:24
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.

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

Posté : ven. 24 avr. 2009 15:38
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

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

Posté : ven. 24 avr. 2009 16:43
par GaRydelaMer
Juste 3 posts avant j'ai fai un Edit

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

Posté : ven. 24 avr. 2009 16:54
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 ?

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

Posté : ven. 24 avr. 2009 17:01
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...

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

Posté : ven. 24 avr. 2009 17:10
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
 

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

Posté : ven. 24 avr. 2009 17:19
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      
 

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

Posté : ven. 24 avr. 2009 17:49
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 
 

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

Posté : lun. 27 avr. 2009 10:53
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

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

Posté : lun. 27 avr. 2009 19:48
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

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

Posté : mar. 28 avr. 2009 09:24
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.

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

Posté : mar. 28 avr. 2009 11:21
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 !!!

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

Posté : mar. 28 avr. 2009 11:52
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 ?

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

Posté : mar. 28 avr. 2009 13:13
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.

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

Posté : mar. 28 avr. 2009 14:27
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 ;)

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

Posté : mar. 28 avr. 2009 14:48
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

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

Posté : mar. 28 avr. 2009 15:03
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 ...