2010-01-19 6 views
0

J'ai du mal à insérer des données dans un TdxMemData qui est lié à une grille par un TDataSourse. Les données d'achat appelées MemData ont trois colonnes: date (date), lieu (chaîne) et valeur (devise). J'ai un bouton qui effectue les opérations suivantes:Comment insérer des données dans un TdxMemData dans Borland Builder

PurchaseData->Insert(); 
PurchaseData->FieldByName("Date")->Value = TDateTime::CurrentDate().DateString(); 
PurchaseData->FieldByName("Place")->Value = ""; 
PurchaseData->FieldByName("Value")->Value = 0.0f; 
PurchaseData->Post(); 

vous cliquez dessus une fois, il insère une ligne normalement et les données apparaissent dans une nouvelle ligne de la grille, mais en cliquant sur le bouton à nouveau je reçois un popup sur l'insert() indiquant "Impossible de convertir la variante de type (Null) en type (String)".

Je suis inquiet du fait que la propriété "KeyFields" des colonnes montre dans son combo le champ "RecId" à côté des 3 autres champs. Je ne me souviens pas de créer une colonne appelée RecId et si je l'ai fait, je l'ai supprimé. Je ne peux pas comprendre ce que c'est et je n'ai pas pu trouver d'aide non plus.

Répondre

0

J'avais mappé l'événement OnSelectionChanged de la grille et lu les données dans la ligne nouvellement sélectionnée. Malheureusement, lorsque PurchaseData-> Insert() est appelé, l'événement SelectionChanged est immédiatement déclenché. avant que les données de la nouvelle ligne soient définies par les lignes suivantes. J'ai obtenu Null à partir des données lues et ai fait de mauvaises choses avec cela comme le réglage d'un edit-> Texte avec, ainsi le message dans le popup.

0

im pas un endroit pour tester ce moment, mais le changer à cela pourrait fonctionner

PurPurchaseData-> FieldByName ("Place") -> Valeur = String ("");

Si cela ne fonctionne pas, cela sera dans la façon dont vous avez configuré vos colonnes.

+0

Ni String ni AnsiString travaillé /: Merci d'avoir essayé! – Gabriel

Questions connexes