TTable : recherche de données

xpmich Messages postés 62 Date d'inscription lundi 29 novembre 2004 Statut Membre Dernière intervention 11 mars 2010 - 6 févr. 2009 à 09:53
beckerich Messages postés 302 Date d'inscription jeudi 29 septembre 2005 Statut Membre Dernière intervention 17 septembre 2013 - 7 août 2009 à 15:17
bonjour,
J'ai une table de quatre champs, je voudrais à partir de trois champ connu trouver la valeur du quatrième champ !

j'ai essayé :
if not MaTTable.Locate('T2.el_Ch1;T2.el_Ch2;T2.el_Ch3',VarArrayOf(['Renault','Rouge','1993']), [] )then
begin
   //...pas trouvé
end
else
   //...trouvé ok mais ou va le field resultant ??
end;

Les problèmes :
J'ai une erreur disant : 'Field 'T2.el_Ch1' not found'
J'ai essayé avec un filtre :
Code :

MaTTable.Filter:= '(T2.el_Ch1 like ''Renault'') AND ';
MaTTable.Filter:= MaDonnee.Liste.Filter + '(T2.el_Ch2 like ''Rouge'') AND ';
MaTTable.Filter:= MaDonnee.Liste.Filter + '(T2.el_Ch3 like ''1993'')';
MaTTable.Filtered  := true;

J'ai la même erreur.

Merci d'avane.
Xpmich

6 réponses

xpmich Messages postés 62 Date d'inscription lundi 29 novembre 2004 Statut Membre Dernière intervention 11 mars 2010
6 févr. 2009 à 12:07
Re,

J'ai trouvé la solution (qui me plait moyennement)

Le premier problème était que le nom de les colonnes n'était pas bon.

j'utilise donc le locate.

Le second problème est lié au TTable. Si je ferme la base de données,
je ne peux plus utiliser mon TTable malgré que celle ci soit une copie
de mes enregistrements retournés par la requête.

D'ou ma question :


Peut on utiliser une TTable de manière non connecté à une base de donnée ?

soit :

1- Emmision de la requête (je sais faire)

2- Copie du résultat de la requête dans un TTable

3- Déconnexion complète de la base (pouvant aller jusqu'à mabase := nil; (je sais faire)

4- Utilisation de la copie de la TTable (je sais faire)


Merci d'avance

Xpmcih
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 14
8 févr. 2009 à 22:15
J'ai une table de quatre champs, je voudrais à partir de trois champ connu trouver la valeur du quatrième champ !




Ce n'est pas Locate qu'il faut utiliser mais Lookup..

cantador
0
xpmich Messages postés 62 Date d'inscription lundi 29 novembre 2004 Statut Membre Dernière intervention 11 mars 2010
7 août 2009 à 08:36
Bonjour,
pour réactualiser ma question :
[b]
Si je ferme la base de données, je ne peux plus utiliser mon TTable/b malgré que celle ci soit une copie de mes enregistrements retournés par la requête.
D'ou ma question :

Peut on utiliser une TTable de manière non connecté à une base de donnée ?
soit :
1- Emmision de la requête (je sais faire)
2- Copie du résultat de la requête dans un TTable
3- Déconnexion complète de la base (pouvant aller jusqu'à mabase := nil; (je sais faire)
4- Utilisation de la copie de la TTable (je sais faire)
5- Permettre de faire un locate, déconnecté de la base sur un TTable

Merci d'avance
Xpmcih
0
beckerich Messages postés 302 Date d'inscription jeudi 29 septembre 2005 Statut Membre Dernière intervention 17 septembre 2013 2
7 août 2009 à 13:50
bonjour,

tu peux copier la table entière dans un TClientDataset et ensuite t'en servir.

Luc.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
xpmich Messages postés 62 Date d'inscription lundi 29 novembre 2004 Statut Membre Dernière intervention 11 mars 2010
7 août 2009 à 14:59
Re Bonjour,

Ok mais comment lié une TClientDataSet ? Je crois me souvenir qu'un TClientDataSet doit être lié à une base ? Et c'est justement ce que je ne veux pas. Mon resultat de requête arrive obligatoirement (pour moi) dans une TTable. En gros, comment faire TClientDataSet := TTable ??

Merci d'avance
Xpmich
0
beckerich Messages postés 302 Date d'inscription jeudi 29 septembre 2005 Statut Membre Dernière intervention 17 septembre 2013 2
7 août 2009 à 15:17
salut,

j'utilise les clientdataset comme table indépendante de la base en créant, soit en mode conceptuel sous delphi, soit en dynamique pendant l'exécution, la même structure de champs que la table ou le query me retournant les données de la base.

un petit exemple d'une procédure qui récupère des données de ma base interbase et qui les insère dans un TClientDataset.

procedure TFM_FTP_LISTE.ChargerFiches;
begin
b_chargement := True;
CDS_FTP.EmptyDataSet;
CDS_FTP.IndexName := '';
with TIBQuery.Create(Self) do
begin
try
Database := GO_APP.Database;
SQL.Add('select F.*, C.*, A.PRXUNT PRXACH, V.*'
+ ' from TRPCLS C, TRPPRXACH A, TRPFTP F left outer JOIN TRPPRXVEN V'
+ ' on V.SERFTP = F.SERFTP'
+ ' where'
+ ' F.CODVIS <> :CODVIS'
+ ' and C.SERCLS = F.SERCLS'
+ ' and A.SERFTP = F.SERFTP'
+ ' and A.DATEFF = (select max(X.DATEFF) from TRPPRXACH X'
+ ' where X.SERFTP = A.SERFTP'
+ ' and X.DATEFF <= :DATEFF)'
+ ' and (V.DATEFF = (select max(Y.DATEFF) from TRPPRXVEN Y'
+ ' where Y.SERFTP = V.SERFTP'
+ ' and Y.DATEFF <= :DATEFF)'
+ ' or V.DATEFF is null)');
Prepare;
ParamByName('DATEFF').Value := SED_DATEFF.Date;
ParamByName('CODVIS').Value := '9';
Open;
while not Eof do
begin
CDS_FTP.Insert;
CDS_FTP.FieldByName('SERFTP').Value := FieldByName('SERFTP').Value;
CDS_FTP.FieldByName('LIBFTP').Value := FieldByName('LIBFTP').Value;
CDS_FTP.FieldByName('CODVIS').Value := FieldByName('CODVIS').Value;
CDS_FTP.FieldByName('CODTVA').Value := FieldByName('CODTVA').Value;
CDS_FTP.FieldByName('SERCLS').Value := FieldByName('SERCLS').Value;
CDS_FTP.FieldByName('SERPRX').Value := FieldByName('SERPRX').Value;
CDS_FTP.FieldByName('PRXACH').Value := FieldByName('PRXACH').Value;
CDS_FTP.FieldByName('PRXVEN').Value := FieldByName('PRXUNT').Value;
CDS_FTP.FieldByName('UNTVEN').Value := FieldByName('UNTVEN').Value;
CDS_FTP.FieldByName('CODCLS').Value := FieldByName('CODCLS').Value;
CDS_FTP.FieldByName('LIBCLS').Value := FieldByName('LIBCLS').Value;
CDS_FTP.FieldByName('DATEFF').Value := FieldByName('DATEFF').Value;
if (CDS_FTP.FieldByName('PRXACH').AsFloat > 0) and
(CDS_FTP.FieldByName('PRXVEN').AsFloat > 0) then
CDS_FTP.FieldByName('COFMUL').Value := CDS_FTP.FieldByName('PRXVEN').AsFloat / CDS_FTP.FieldByName('PRXACH').AsFloat;
CDS_FTP.Post;
Next;
end;
CDS_FTP.IndexName := 'ix_codcls';
CDS_FTP.First;
finally
Free;
end;
end;
b_chargement := False;
b_modif := False;
end;

consulte ceci :

http://edn.embarcadero.com/delphi/database/design

tu trouveras des articles de Cary Jensen sur les clientdatasets
0