2009-06-05 6 views
0

Je suis en train d'expérimenter avec des objets instantanés. J'ai deux classes simples tband et tcountry les deux sont définis comme stockés. tband a une propriété appelée tcountry référençant la classe/table tcountry. (le pays est la table de recherche). Lors de la création d'un nouveau groupe, je souhaite que l'utilisateur puisse sélectionner le pays dans le formulaire à partir d'une liste/liste déroulante, puis enregistrer l'objet groupe. J'ai essayé quelque chose comme:Comment puis-je créer des objets avec référence en utilisant le programme framework instantobjects dans le code Delphi

Band.Create(nil); 
Country.Create(nil); 
Country := CountrySelector.CurrentObject as TCountry; // here I get an exception 
Band.Country := Country; 
Band.Store; 

CountryConnector est un TInstantConnector. Il a une requête "select * from TCountry" et affiche les valeurs dans un DbComboBox.

Répondre

1

Votre code devrait ressembler plus à ceci. Veuillez noter qu'il est supposé que le Connecteur est connecté à un Broker approprié, que la connexion à la base de données est active et que le schéma de la base de données a été créé (vous pouvez facilement faire l'étape suivante à partir de Model Explorer).

var 
    Band : TBand; 
begin 
    // Query the database for all TCountry instances or descendants 
    CountrySelector.Close; 
    CountrySelector.Command.Text := 'SELECT * FROM ANY TCountry'; 
    CountrySelector.Open; 

    if ContactSelector.ObjectCount > 0 then 
    begin 
     Band := TBand.Create(Connector); 

     try 
     // Take currently selected Country and assign to Band's Country property 
     // Reference counting is handled automatically 
     Band.Country := CountrySelector.CurrentObject as TCountry; 
     Band.Store; 
     finally 
     Band.Free; // Free reference to Band so we do not leak an object 
     end; 
    end; 
end; 

Je devrais également mentionner que je n'utilise pas le sélecteur très souvent puisqu'il ne répond pas à mes conditions d'application typiques. Mes utilisateurs récupèrent souvent des enregistrements 20k + de Firebird en utilisant les grilles DevExpress Quantum et attendent des temps de réponse de manière constante en moins de 2 secondes. Pour répondre à cette exigence, IBExpert (un outil excentrique mais par ailleurs excellent) a nécessité une conception et un réglage très minutieux, car mes requêtes couvrent souvent plusieurs tables et ont des exigences de filtrage complexes. Ce que je peux dire à propos d'IO, c'est qu'il facilite la modélisation des données puisque la conception est réduite à un point et cliquez sur le processus en utilisant Model Explorer. IO est également un bon framework de liaison de données car il vous permet d '«exposer» même des graphiques d'objets complexes en tant qu'ensembles de données et de lier les propriétés aux contrôles visuels. L'autre partie que j'aime est que je n'ai plus besoin d'embêter avec la création manuelle de requêtes d'insertion ou de mise à jour et la définition de valeurs de colonne pour ajouter ou modifier des objets persistants. IO fait cela et plus pour vous dans les coulisses avec très peu de codage.

David

+0

20 + K est une quantité excentrique. Mon approche principale est de ne pas trop utiliser l'inspecteur d'objets de Delphi. Cependant, étant donné que Country fait référence à une table de recherche avec peu d'enregistrements, je l'utilise de cette façon. J'expérimente toujours avec IO, et j'ai réussi à progresser autant que je m'y attendais. En utilisant "stocké" j'ai le design de table que je désire. Et la facilité de persistance obtient 10 sur 10. Maintenant, je vais essayer de concevoir ma propre validation sur IO. J'essaierai d'utiliser les modules de données et l'héritage de forme. Il est temps de passer à autre chose :) – user114285

-1

Est-ce que CountrySelector a une valeur autre que zéro?

+0

CountrySelector est actuellement actif. Connecté de la manière RAD et peupler les éléments dans le DBComboBox via DataSource – user114285

Questions connexes