2012-08-03 4 views
1

Ma question est: Comment puis-je commander un DBGrid par un champ calculé. J'utilise C++ Builder Starter Editon et n'ai pas de ClientDataSet disponible dans cette version pour créer un Index sur le champ et l'ordonner par l'index d'une colonne. Donc ce n'est pas une option. (Lisez ceci dans plusieurs threads) J'utilise un TIBDataSet (ibds ci-dessous) et je filtre les données. Fonctionne bien .... pour les colonnes DB, pas pour les calculs ... Des idées de comment je pourrais contourner ce problème?Ordre DBGrid par champ calculé

void __fastcall TForm1::DBGrid3TitleClick(TColumn *Column) 
{ 
    static cIdx = 0; 
    static String oby = "ASC"; 

    TBookmark CurrentPosition; 
    TIBDataSet *ibds = IBDS_accountsDist; 
    CurrentPosition = ibds->GetBookmark(); 
    if (cIdx != Column->Index) { 
     oby = "ASC"; // ANOTHER column choosen 
    } else if (oby == "ASC") { 
     oby = "DESC"; 
    } else oby = "ASC"; 
    cIdx = Column->Index; 

    ibds->Filtered = false; 
    switch (Column->Index){ 
     case 0: ibds->Filter = "ORDER BY SumAj "+oby; break; // SumAj is a calculated field => Does not work 
     case 1: ibds->Filter = "ORDER BY CSAL_ACCOUNTNAME "+ oby; break; // DB-field WORKS FINE 
    } 
    ibds->Filtered = true; 
    ibds->GotoBookmark(CurrentPosition); 
} 

Répondre

0

Vous ne pouvez pas le faire. TIBDataSet est une représentation de la base de données sous-jacente. Fondamentalement, il récupère les enregistrements dans l'ordre défini dans le SQL. La méthode la plus simple consiste à utiliser TDBClientDataset, mais elle n'est pas incluse dans la version Starter de C++ Builder. Vous pouvez explorer d'autres moyens, par exemple, pré-charger tous les enregistrements dans une liste std :: puis utiliser la fonction de commande pour commander les enregistrements. Enfin, vous pouvez les montrer en utilisant un simple TGrid o TStringGrid.

Dans tous les cas, je recommande de mettre à niveau C++ Builder car TClientDataSet est l'un des éléments principaux dans la plupart des projets de données, en particulier lorsque vous devez créer des projets de taille moyenne à grande.

Le mélange de composants spécifiques à une base de données tels que TIBDataSet avec l'interface utilisateur pénalise l'évolutivité et la maintenance du projet.

+0

Merci pour votre réponse. Je dois encore résoudre le problème et avoir beaucoup lu et maintenant votre post ... OUI, je pense que nous allons passer à la version normale de C++ Builder! –

Questions connexes