Parcourir une table Paradox pour remplir des champs..

Parcourir une table Paradox pour remplir des champs.. - Delphi/Pascal - Programmation

Marsh Posté le 22-04-2003 à 15:33:46    

Slt !
 
Je souhaite réaliser une petite application
qui utilise des tables Paradox.
En fait, on doit choisir tout d'abord un nom
de fournisseur à l'aide d'une comboBox.
Mais je souhaite remplir cette comboBox
à partir de ma table des fournisseurs bien
évidemment  :)  
 
Mais en fait, je ne sais pas par quels moyens
je peux lire ma table, dans une colonne donnée,
en la parcourant pour remplir ma comboBox..  :??:  
 
Dois-je obligatoirement passer par des requêtes SQL
et si oui comment ?? ou y a t'il un autre moyen ??
 
Merci d'avance !  :jap:

Reply

Marsh Posté le 22-04-2003 à 15:33:46   

Reply

Marsh Posté le 22-04-2003 à 17:16:12    

le moyen le plus rapide est d'utiliser une DBComboBox
 
est-ce que tu utilises Paradox par choix ou par obligation ? c'est pas le meilleur choix :/ idem pour BDE que tu utilises aussi j'imagine (plutôt qu'ADO)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 23-04-2003 à 09:29:02    

Paradox par obligation..
En fait, c'est dans le cadre d'un stage
et je me plie à ce que l'on me demande..  :heink:  
 
Mais quant à ta 2e question, je n'en sais rien
car je n'y connais pas encore grand chose..
 
Sinon, je ne vois pas comment écrire une
requête SQL afin d'utiliser le résultat,
en parcourant un à un, afin de remplir ma
combo. En fait, je ne sais pas quels composants
utiliser et comment les mettre en relation,
et surtout, où vont se trouver les enregistrements
ici du résultat de la requête ??
 
Merci.

Reply

Marsh Posté le 23-04-2003 à 10:36:35    

enfin, soit, donc Paradox puisque c'est une obligation.
 
Tu utilises les composants TDatabase, TTable, TQuery je suppose ? (donc BDE)
Une des solutions est d'utiliser le TQuery, et de lui assigner soit un DatabaseName soit un DataSource selon ce que tu utilises pour la connexion aux tables, puis de faire ta requête et tu remplis ta liste :
 
with Query1 do
begin
  ComboBox1.Items.Clear;
  Close;
  SQL.Text := 'SELECT * FROM BIDULE';
  Open;
  while not Eof do  
  begin
    ComboBox1.Items.Add(FieldByName('Champ1';).AsString);
    Next;
  end;
end;
 
Sinon tu peux aussi mettre ta requête en design time dans le TQuery (ou utiliser un TTable si c'est une requête simple), mettre un TDataSet, le lier au TQuery (ou TTable), mettre une TDBComboBox, la lier au TDataSet, et normalement les données qui y apparaissent quand la connexion est ouverte sur le TQuery/TTable.
 
Mais souvent quand on utilise ces composants on se retrouve avec des trucs bricolés sur toutes les forms, et ça devient l'enfer.
 
Un conseil : passe par un TDataBase, et met tous les composants de connexion aux BD dans un Data Module (File -> New -> Data Module) pour isoler tout ce qui est accès BD, de manière à ce que dans les forms tu ne touches pas directement à la BD, tu fais juste des demandes de listes etc. (fonctions que tu ajoutes au Data Module)
C'est juste un conseil; tu n'es pas obligé de le suivre, mais je t'assure que le jour où tu dois changer des trucs dans la connexion à la BD toi (ou ton successeur sur le programme) va être très content de ça ;)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 23-04-2003 à 10:56:43    

Ok, je te remercie beaucoup de toutes
ces explications et conseils.
Ca fait plaisir de voir quelqu'un qui
ne traite pas de "newbie" comme énormément font..
 
En plus, je viens juste d'avoir des conseils
d'une personne ici, et je pense que combinés
aux tiens, je devrais aboutir à quelque chose
avant la fin de la journée  ;)  
 
Il m'a conseillé d'utiliser un alias, et ensuite
de me servir de TDataBase et TQuery.
Je ne sais plus si j'aurais besoin d'un TDataSource
mais bon, je verrai bien.
 
Voilà, je vais essayer tout ça.
Merci beaucoup  :jap:  
et je te tiens au courant !!

Reply

Marsh Posté le 23-04-2003 à 11:06:48    

le TDataSource (que j'ai appelé à tord TDataSet :o) c'est pour si tu veux lier un TQuery/TTable à un composant "automatique" genre TDBEdit, TDBComboBox, etc. (composants qui affichent tout seul le contenu d'une table, ou la valeur du champ courant, etc.)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 23-04-2003 à 11:27:08    

Ok, merci  :jap:

Reply

Marsh Posté le 23-04-2003 à 11:56:01    

Haa, là j'ai un tout petit pb..
Je reprends un ancien prog pour tester
les DataModules, avant de le faire dans
le programme dont j'ai parlé ici.
 
J'ai mis un DataModule comprenant une TTable,
une TDataSource et une TDataBase.
La TDataBase est reliée a un alias comprenant mes
tables  Paradox.
J'ai mis la propriété DataBaseName de la TTable
au nom de la même propriété de la TDataBase.
Enfin, la TDataSource est reliée à la TTable.
 
Je souhaite obtenir la liste des tables
référencées dans l'alias que j'ai créé,
et je ne vois pas comment..
J'ai testé plusieurs méthodes et j'ai tjs rien..
Ca ne doit pas être bien compliqué je pense.
Sois un doit falloir parcourir l'alias
avec un FindFirst et FindNext, ou alors
obtenir la liste de ces tables dans une TStrings.
 
Mais là, je bloque encore.. :heink:

Reply

Marsh Posté le 23-04-2003 à 12:14:39    

TDatabase.GetTableNames ?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 23-04-2003 à 12:21:26    

Ben il me fait une erreur à l'exécution..
Je mets une TStrings en paramètre,
mais erreur au niveau mémoire je crois.

Reply

Marsh Posté le 23-04-2003 à 12:21:26   

Reply

Marsh Posté le 23-04-2003 à 12:27:54    

"Je mets une TStrings en paramètre" c'est très vague :D
tu déclares juste une variable de type TStrings que tu lui passe ? c'est normal que ça plante :D
 
ex:
 
var
  liste: TStringList;
begin
  liste := TStringList.Create; // TStrings et ses dérivé ce sont des classes, il faut en créer une instance pour l'utiliser
  DataBase.GetTableNames(liste);
  // ici tu joues avec ta liste
  liste.Free; // on la supprime quand on n'en a plus besoin
end;


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 23-04-2003 à 12:36:55    

Haaa, OK (je suis vraiment à l'Ouest..  :lol: )
Merci bien, je vais manger et j'essaie ça juste
après. Bon appétit  ;)  
 
 :jap:

Reply

Marsh Posté le 23-04-2003 à 14:32:14    

Bon, c'est bon, ça marche nickel pour la liste !!
Merci beaucoup.
En plus maintenant, mon programme est beaucoup
plus léger et simple (avant je changeait le répertoire
courant, puis j'allais dans le répertoire des
tables et je le parcourais en prenant le nom de chaque
fichier *.db, sans prendre l'extension, et enfin
je l'ajoutait à ma combo...  :kaola: )
 
Mais maintenant, la combo est remplie de façon
très simple et c'est vrai que c'est plus sympa
avec le Module de Données.  :sol:  
 
Bon, je vais maintenant regarder pour lancer
la table sélectionnée (ça devrait encore simplifier
mon prog) et juste après, je reprends mon programme
avec les requêtes SQL !!
 
Merci merci !!  :jap:  :jap:  

Reply

Marsh Posté le 23-04-2003 à 15:05:43    

Bon, c'est bon, les toutes petites modif
ont été faites et j'ai testé ==> NO PROBLEME !!!  :sol:  
 
Bon, je repasse donc à celui de ce matin.
J'espère que tu resteras dans les parages,
on ne sait jamais..  ;)  
 
Merci.

Reply

Marsh Posté le 23-04-2003 à 16:23:02    

Bon, pour l'instant, ça fonctionne.
J'ai réussi à mettre dans une TDBComboBox
le résultat d'une requête.
 
Je me suis basé sur ce que tu m'avais donné
plus haut, mais j'ai dû me résigner à utiliser
FindFirst et FindNext sur la Query car ça me
faisait comme une boucle infinie avec le EOF..
 
Mais tu m'avais dit plus haut que la TDBComboBox
se remplissait "toute seule" mais je n'ai pas
réussi à le faire, bien que je lui ai appliqué
la propriété DataField..
Je ne sais pas alors si ça vaut le coup de la garder..

Reply

Marsh Posté le 23-04-2003 à 16:25:17    

si tu la remplis manuellement vaut mieux pas la garder :D
une combobox normale suffira
Si l'Eof n'est pas détecté, à part un manque de "Next" je vois pas trop ce que ça pourrait être :??:
Faut peut-être faire un First entre le Open et le while.


Message édité par antp le 23-04-2003 à 16:25:41

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 23-04-2003 à 16:38:32    

OK. Bon, je vais laisser comme ça pour le moment
et si vraiment je suis embêté, j'essairai avec l'Eof.
 
Je vais remettre une ComboBox toute simple.

Reply

Marsh Posté le 23-04-2003 à 16:39:35    

Au fait, je ne vois pas à quoi sert mon
TDataSource dans ce cas-là..  :??:

Reply

Marsh Posté le 23-04-2003 à 17:04:12    

Reply

Marsh Posté le 23-04-2003 à 17:25:30    

Je me disais aussi  :D  :D  
Bon, je continuerai tout ça demain.
 
Encore merci et bonne soirée !   :jap:

Reply

Marsh Posté le 24-04-2003 à 08:49:24    

Bon, ça y est, je suis de retour!
Je vais donc me remettre au boulot ;)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed