Filtrage d'une table

zoya23 Messages postés 14 Date d'inscription mardi 22 juillet 2008 Statut Membre Dernière intervention 5 novembre 2009 - 24 juil. 2008 à 11:42
HAFTARIFOUAD Messages postés 256 Date d'inscription mercredi 5 septembre 2007 Statut Membre Dernière intervention 6 janvier 2011 - 26 juil. 2008 à 21:00
bonjour! je veux copier des enregistrement d'une table. c'est pourquoi j'ai utilisé un filtre pour la séléction des enregistrements et la fonction dbicopytable pour stocker ces enregistrements filtrés dans une nouvelle table.
la copie se fait sans erreur mais le pb est que le filtrage n'est pas réalisé: la table copiée est la meme que la table initiale.
Voici le code de ma focntion:

procedure CopyTable(FromDir, SrcTblName, ToDir, DestTblName: String);
var
  DBHandle: HDBIDB;
  ResultCode: DBIResult;
  Src, Dest, Err: Array[0..255] of Char;
  SrcTbl, DestTbl : TTable;
begin
  SrcTbl := TTable.Create(Application);
  DestTbl := TTable.Create(Application);
  try
    SrcTbl.DatabaseName := FromDir;
    SrcTbl.TableName := SrcTblName;    SrcTbl.Filter :'Compteur'+ QuotedStr(Edit4.Text); 
    SrcTbl.Filtered := true;


    SrcTbl.Open;
    DBHandle := SrcTbl.DBHandle;
    SrcTbl.Close;
    ResultCode := DbiCopyTable(DBHandle,true,
      StrPCopy(Src,FromDir + '\' + SrcTblName),nil,
      StrPCopy(Dest,ToDir + '\' + DestTblName));
    if (ResultCode <> DBIERR_NONE) then
    begin
      DbiGetErrorString(ResultCode,Err);
      raise EDatabaseError.Create('While copying ' +
        FromDir + '\' + SrcTblName + ' to ' +
        ToDir + '\' +   DestTblName + ', the '
        + ' database engine generated the error '''
        + StrPas(Err) + '''');
    end


  finally
    SrcTbl.Free;
    DestTbl.Free;
  end;
end;

Merci d'avance.

1 réponse

HAFTARIFOUAD Messages postés 256 Date d'inscription mercredi 5 septembre 2007 Statut Membre Dernière intervention 6 janvier 2011
26 juil. 2008 à 21:00
Bonjour

1-Essaiez d'utiliser ce code;
 SrcTbl.DatabaseName := FromDir;
 SrcTbl.TableName := SrcTblName;
 SrcTbl.Open;     SrcTbl.Filter :'Compteur'+ QuotedStr(Edit4.Text); 
 SrcTbl.Filtered := true;(On peux pas appliquer un filtre sur une table Fermée.)

2-Si non, utilisez une boucle pour transfèrer les données souhaités

Table, NTable:TTable;
x,y: integer;
Table.first;// 1 enregistrement
For x:=0 to Table.RecordCount do
begin
NTable.insert; // ajouter un nouveau enregistrement
  For y :=0 to Nombre de champs souhaités transfèrés do
   begin
    NTable.Field[x].value:=Table.Fields[x].asString; // copier champs par champ
  end;
    NTable.Post;// valider l'enregistrement
    Table.Next;// se mettre à l'enregistrement suivant
end;

Ce code peut être amélioré, biensure....

Bonne chance et plein de succès
0
Rejoignez-nous