2010-02-09 23 views
1

Je suis un programmeur C++ en utilisant le C de Borland ++ Builder 5. Je travaille sur une application de base de données et sa me causer de dommages sérieux en ce moment ...Utilisation d'images et des données avec des champs BLOB dans C++ Builder

I J'utilise une table Paradox 7.0 avec C++ Builder et je ne trouve tout simplement pas un moyen d'insérer des données dans les objets BLOB. Je ne peux pas non plus enregistrer ou afficher des images en utilisant le composant TDBImage VCL. Ma dernière tentative déjouée tentait d'enregistrer une image dans un champ BLOB en utilisant ce qui semble être un morceau de code revêtu de fer.

//----------------------------------------- 
Table1->Edit(); 
Open->Execute(); 
String file=Open->FileName; 
ShowMessage(file); 

TBlobField *blob; blob=new (TBlobField); 

blob->FieldName="Image"; 
blob->LoadFromFile(file); 

Table1->Post(); 
//----------------------------------------- 

sur la compilation de ce code a échoué, que le choix de l'emplacement BlobField n'a pas la fonction d'allocation dynamique des objets ou quelque chose.

Je ne peux pas non plus ajouter un contrôleur OCX pour un composant OLE2 ni le sauvegarder dans son propre champ BLOB.

S'il vous plaît, quelqu'un, viens à mon aide

: '(

+0

Pouvez-vous s'il vous plaît poster le message d'erreur exact, ce serait vraiment aider. –

+0

Il est peut-être temps de mettre à jour. Même si vous pouvez mettre la main sur la version 6, vous seriez mieux. –

Répondre

1

Une chose qui m'a frappé, était votre ligne:

TBlobField *blob; blob=new (TBlobField); 

Tout d'abord, je ne sais pas pourquoi vous pouvez utiliser cette syntaxe au lieu de:

TBlobField *blob = new TBlobField; 

Deuxièmement, le constructeur TBlobField prendre un argument, un pointeur vers un TComponent, qui agit en tant que propriétaire de l'objet, et est l'objet responsable de l'effacement de la mémoire par la suite. Une chose que vous pourriez essayer est de le faire:

TBlobField *blob = new TBlobField(Table1); 

Je dois avouer cependant que je ne l'ai pas fait trop de programmation beaucoup de bases de données dans C++ Builder, cependant, le travail devrait au-dessus.

Editer: Encore une chose cependant, la façon dont vous utilisez TBlobField n'est jamais associée à la table. Vous pourriez trouver cet article à partir de about.com intersting: Storing Record Data in a BLOB Field [1]. Il est écrit en Delphi, mais devrait être facilement porté en C++, en raison de la structure VCL.

Vous pouvez essayer d'utiliser ce qui suit à la place, il n'a pas été testé, donc vous pourriez rencontrer quelques problèmes à le faire, si oui s'il vous plaît me dire:

TField *field = Table1->FieldByName("image"); 
TBlobField *blob = dynamic_cast<TBlobField *>(field); 
if (blob) 
{ 
    blob->LoadFromFile(file); 
} 

[1] http://delphi.about.com/od/database/a/record2blob.htm