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

  1. La création d'une image à l'aide de TImage.
    msBinImgStream := TMemoryStream.Create; 
    imgCustom := TImage.Create(self); 
    imgJpg := TJPEGImage.Create; 
  2. La conversion de l'image à TJpegImage et économie à TMemoryStream.
    imgJpg.Assign(imgCustom.Picture.Bitmap); 
    imgJpg.SaveToStream(msBinImgStream);
  3. De l'insertion dans la base de données en utilisant SetBlobdata propriété de TQuery 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:

  1. En mesure de créer l'image.
  2. Convertir en TJpeg et économie à TMemoryStream.
  3. 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.

r u assurez-vous que est blob binaire, pas de texte blob ? serait couvrant image en base64 de l'aide ?
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