Gambas France BETA


Pas de compte ? Incription

selectioner un enregistrement de base de donnée

1
AuteurMessages
hplus#1 Posté le 20/1/2011 à 18:47:00
Bonsoir,
j'ai un souci avec une variable de type Result.
Elle contient plusieurs enregistrements issus de la requete sur la BDD.
je parcours Result avec un FOR EACH Result
puis dans la boucle je fais un function(Result)
j'aurais souhaité n'envoye que le Result parcouru actuellement et pas la liste complete. comment faire?

J'ai bien tenté de faire un FOR EACH unresult IN Result puis function(unresult) ca ne marche pas...

Merci

Hplus
jeanyvon#2 Posté le 21/1/2011 à 07:33:00
Gambas? Ma! Et gustohello!
Bienvenu sur ce forum

si tu fais:
1
DIM i AS integerdim resultat[] AS STRING 'ou autre chosefor each resultresultat[i] =resultfonction(resultat[i])inc inext


Je crois que ça marche mais je n'ai pas essayé.
A+
JY
Vieillir? On peut retarder mais pas y échapper!
Prokopy#3 Posté le 21/1/2011 à 14:18:00
Kinder PinguiPetite erreur jeanyvon. ;)
Si tu par erxemple tu as une table comme ceci :
[table]idprenomtelephone1 Pierre 0123456789 2 Paul0987654321 [/table]

L'objet Result est énumérable "en interne", c'est pourquoi il faut utiliser :

1
DIM resultat AS Resultresultat = '...For Each resultatNext


C'est plus logique dans ce cas de faire comme cela : si tu traduis, tu obtiens "Pour chaque résultat, …".
La boucle va être parcourue à chaque entrée (id 1, id 2, …), et les champs sont accessibles en utilisant ton objet Result comme un tableau. Exemple :

1
DIM resultat AS Resultresultat = '...For Each resultat Print "Bonjour, je m'appelle " & resultat["prenom"] & " et vous pouvez m'appeler au " & resultat["telephone"] & ". :)"Next


Toutes les entrées vont être énumérées, et en l'occurrence tu vas obtenir en sortie quelque chose comme :

1
Bonjour, je m'appelle Pierre et vous pouvez m'appeler au 0123456789. :)Bonjour, je m'appelle Paul et vous pouvez m'appeler au 0987654321. :)


Voilà. :)
La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique, rien ne fonctionne et on ne sait pas pourquoi.
hplus#4 Posté le 21/1/2011 à 14:28:00
Merci
mais ceci ne réponds pas à ma question....
mon problème est que dans ma fonction() je fais un for each et donc je reparcours les résultats de la liste.
j'aurais souhait selectioner une des entree simplement et l'envoyer à fonction ....

jeanyvon#5 Posté le 21/1/2011 à 16:03:00
Gambas? Ma! Et gustohello!
si tu veux sélectionner un enregistrement tu en connais au moins un champ ou un bout de son contenu et du coup avec mysql tu n'as plus de problème pour une requête qui tri ce que tu veux.
Mais je n'ai peut être pas compris.
A+
JY
Vieillir? On peut retarder mais pas y échapper!
manu#6 Posté le 21/1/2011 à 19:05:00
Avec Gambas ca roule !Il semble que tu veuilles exécuter une requête (sql) pour extraire un ou plusieurs enregistrements répondant à un (ou plusieurs) critère(s).

Reprenons la table de Prokopy que nous allons appeler TablePersonnes. Je veux extraire les enregistrements pour lequel prenom = Pierre :

1
PUBLIC SUB MaRequete()DIM hResult AS ResulthResult = db.Exec("SELECT * FROM TablePersonnes WHERE prenom = '"Pierre "'") ' Tu extrais toute la fiche If hResult.Available = True Then ' si ta requete est valide ou possible alors continue Print hResult!id ' tu affiches l'id de l'enregistrement Print hResult!prenom ' tu affiches le prenom Print hResult!telephone ' tu affiches le numero de telephoneEnd

Mais attention, cette fonction suppose que tu n'as qu'un seul résultat a ta requête, je ne parcours par hresult avec une boucle....

Dans la réalité c'est plutôt risque de faire ca ! même si il y a des cas ou ca ne pose pas de problème. Par exemple, si tu fait une requête sur l'id de l'enregistrement, c'est fait aussi pour ca l'id :)

Bon j'ai supposé aussi que ta BDD etais connecté a ton projet et que tu avais acivé les composants de base de donnees dans ton projet :lol: Si c'est pas le cas ca marchera pas évidemment.

Petit rappel, cette requête sql marche quelque soit la BDD utilisée, que tu utilise MySql, sqlite ou autre BDD supporté par gambas, le code est le même.
Jeanne d'arc, elle a frit, elle a tout compris ! ;)

Config :
Manjaro linux (excellent !)
XFCE 4.1 (simple et efficace)
Gambas 3 dans les dépots (confort total)
1