IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bases de données Delphi Discussion :

Delphi : Sauvegarder un Record vers un BLOB Oracle


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 18
    Par défaut Delphi : Sauvegarder un Record vers un BLOB Oracle
    Bonjour à tous,

    J'ai créé la table 'Test' sous Oracle avec 2 colonnes : Matricule (Unique - Varchar2) et Info (Blob)

    Dans mon code Delphi, j'ai un record

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    type
      TInfoRecord = record
        Sign : array[0..6000] of byte;  
        ImageFileName: string;
        ImageHandle: HImage;          // Image Handle
        ImageBmp: TBitMap;            // TBitMap
      end;
     
    Var
        MonInfo : TInfoRecord;
     
    .
    .
    .
    implementation
     
    procedure SaveToBlob;
    begin
           MonMatricule := 'ABC01';
     
          // On récupère le Record MonInfo préalablement remplit
    end;

    Le code est réduit à son strict minimum et, ma question est de savoir comment écrire la procédure de sauvegarde du Matricule et du Record MonInfo dans ma table "Test" Oracle ?
    Je bute dessus.

    Merci beaucoup

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 093
    Par défaut


    Tu n'as pas founi grand chose !
    Veux-tu faire un Append/Post ?
    Veux-tu faire un SQL ?

    Voici un code ORACLE que j'utilise en production sur un ORACLE 11g
    Je me base sur la fonction fourni ci-dessous pour l'exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    var
      Stream: TMemoryStream;
      MonInfo : TInfoRecord;
    begin
      Stream := TMemoryStream.Create();
      try 
        Stream.WriteBuffer(..., ...); 
     
        //ton record est complexe, il faut créer un format de structure 
        //soit purement binaire 
        //soit un XML (implique de convertir ton Bitmap en Base64 comme le fait le Delphi dans une DFM)
        //soit une sérialisation par TComponent, en utilisant un ancêtre classe TComponent au lieu de record, tu pourrais conserver tes données sur la forme d'un fragment de DFM
     
     
        TAutomateLogistiqueBusinessEngine.TreatStreamFile(System.Math.RandomRange(1, MaxInt), Stream);
      finally
        Stream.Free();
      end;
    end;

    Lors d'une erreur, je sauvegarde le fichier planté dans la DB, 35 fichiers en 5 mois sur 100 000 échangés en total
    Ce n'est pas une fonction très souvent lancée donc j'ignore ses performances !
    TSliteDBQuery c'est un composant perso qui encapsule ADO, ODAC, DBX, je te laisse adapter selon ta bibliothèque

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    //------------------------------------------------------------------------------
    procedure TAutomateLogistiqueBusinessEngine.TreatStreamFile(AFileID: Integer; AStream: TStream);
    const
      INSERT_BLOB_STREAM =
        ' INSERT INTO T_SCS_FILE_BLOB(SCSF_N_FILE_ID, SCSFB_PB_FILESTREAM) VALUES(:pFileID, :pStream) ' ;
    var
      Query: TSliteDBQuery;
    begin
      try
        Query := TSliteDBQuery.Create(DBConnection);
        try
          Query.SQLText := INSERT_BLOB_STREAM;
          Query.OraQuery.ParamByName('pFileID').Value := AFileID;
          Query.OraQuery.ParamByName('pStream').LoadFromStream(AStream, ftBlob);
          Query.ExecSQL();
        finally
          Query.Free();
        end;
      except
        on E: Exception do
        begin
          {$IFDEF DEBUG}
          raise EAutomateLogistiqueBusinessEngineError.CreateFmt(ERR_SQL_ERROR, [E.Message, E.ClassName()]); // Pseudo-Assert Exception !
          {$ENDIF DEBUG}
        end;
      end;
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. Sauvegarder un PDF dans un blob Oracle
    Par BenMarcel dans le forum VB.NET
    Réponses: 3
    Dernier message: 15/04/2014, 16h48
  2. Réponses: 8
    Dernier message: 20/05/2011, 11h00
  3. Réponses: 2
    Dernier message: 11/10/2010, 14h47
  4. Réponses: 12
    Dernier message: 06/11/2007, 15h17
  5. copie d'un record vers une autre table
    Par ph4prod dans le forum Bases de données
    Réponses: 2
    Dernier message: 27/10/2005, 14h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo