Comment insérer une image dans la base de données à l'aide de TADOQuery Seule Composante
J'ai une simple question fondamentale, je suis en train d'insérer une image dans la base de données à l'aide de Insert
instruction avec d'autres valeurs de la colonne également à l'aide de TADOQuery
composant.
Étant donné que le code est déjà écrit par quelqu'un, quelque mannequin exemple de code que je voudrais mettre ici pour vos éclaircissements avec les différentes étapes.
Veuillez noter que cela fonctionnait très bien avec TQuery
composant, depuis que je suis le remplaçant TQuery
avec TADOQuery
composant, je dois faire la même chose en utilisant TADOQuery
seule composante.
Le même code devrait fonctionner pour SQL Server ainsi que les bases de données Oracle.
Le type de données de la colonne dans laquelle je suis en train d'essayer d'insérer l'image est de type VarBinary
dans la base de données SQL Server.
L'insertion d'une image dans la table à l'aide de TQuery
- La création d'une image à l'aide de
TImage
.msBinImgStream := TMemoryStream.Create; imgCustom := TImage.Create(self); imgJpg := TJPEGImage.Create;
- La conversion de l'image à
TJpegImage
et économie àTMemoryStream
.imgJpg.Assign(imgCustom.Picture.Bitmap); imgJpg.SaveToStream(msBinImgStream);
- De l'insertion dans la base de données en utilisant
SetBlobdata
propriété deTQuery
composant.sSql := 'INSERT INTO Table_Name(Column1, Column2, Column_Image) VALUES ( ''' + Value1 + ''', ''' + Value2 + ''', :pBlob)'; qryTQuery.SQL.Add(sSQL); qryTQuery.ParamByName('pBlob').SetBlobData(msBinImgStream.Memory, msBinImgStream.Size); qryTQuery.ExecSQL;
En train de faire la même chose en utilisant TADOQuery
:
- En mesure de créer l'image.
- Convertir en TJpeg et économie à
TMemoryStream
. - Essayer d'insérer l'image dans la base de données à l'aide de
LoadFromStream(stream, ftBlob)
mais une erreur "Chaîne ou une valeur binaire peut être tronqué".sSql := 'INSERT INTO Table_Name(Column1, Column2, Column_Image) VALUES ( ''' + Value1 + ''', ''' + Value2 + ''', :pBlob)'; qryADOQuery.SQL.Add(sSQL); qryADOQuery.Parameters.ParamByName('pBlob').LoadFromStream(msBinImgStream, ftBlob); qryADOQuery.ExecSQL;
Bien vouloir me faire savoir, avec cette approche, comment dois-je régler ce problème.
avez-vous essayé de google pour l'erreur ? google.ru/... Il indique que votre colonne de données est de longueur/limitation de la taille dans les deux serveur elvel ou ADO. Essayez d'image plus petit, serait-il en forme ? Vérifiez où vous avez mis l'image dans.
OriginalL'auteur Vishal Tiwari | 2012-08-02
Vous devez vous connecter pour publier un commentaire.
De l'enregistrement:
ou utiliser un
TADOBlobStream
au lieu d'unTStream
:De chargement:
OriginalL'auteur NGLN
Lorsque l'on travaille avec un paramètre comme vous le faites, je pense que vous avez de fournir des paramètres supplémentaires comme
Attributs
etDataType
, comme suit:C'est une nouvelle question.
OriginalL'auteur NGLN