xpmich
Messages postés62Date d'inscriptionlundi 29 novembre 2004StatutMembreDernière intervention11 mars 2010
-
6 févr. 2009 à 09:53
beckerich
Messages postés302Date d'inscriptionjeudi 29 septembre 2005StatutMembreDernière intervention17 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;
xpmich
Messages postés62Date d'inscriptionlundi 29 novembre 2004StatutMembreDernière intervention11 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)
xpmich
Messages postés62Date d'inscriptionlundi 29 novembre 2004StatutMembreDernière intervention11 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
xpmich
Messages postés62Date d'inscriptionlundi 29 novembre 2004StatutMembreDernière intervention11 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 ??
beckerich
Messages postés302Date d'inscriptionjeudi 29 septembre 2005StatutMembreDernière intervention17 septembre 20132 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;