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

Delphi Discussion :

Convertir un source venant de Lazarus en D7


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Cazaux-Moutou-Philippe
    Inscrit en
    Mai 2005
    Messages
    674
    Détails du profil
    Informations personnelles :
    Âge : 76

    Informations forums :
    Inscription : Mai 2005
    Messages : 674
    Par défaut Convertir un source venant de Lazarus en D7
    Bonjour

    ce code marche presque
    mais les foncrion préfixé par // PCM--,

    B.ReadAnsiString
    et
    L := B.ReadDWord;

    ne sont pas compatibles en D7
    comment ou par quoi les remplacer ?

    merci

    procedure TFHistoire.btnImportClick(Sender: TObject);
    var
    QueryWrite: TIBQuery;
    dossier, dico, chaine: string;
    L: Integer;
    B: TFileStream;
    Tampon: TMemoryStream;
    aFHistoireImport: TFHistoireImport;
    bImport: boolean;
    sFichier: string;
    iNumDossier: integer;
    begin

    aFHistoireImport := TFHistoireImport.create(self);
    try
    aFHistoireImport.ShowModal;
    bImport := aFHistoireImport.bImport;
    iNumDossier := aFHistoireImport.iNumDossier;
    sFichier := aFHistoireImport.sFichier;
    finally
    FreeAndNil(aFHistoireImport);
    end;

    if bImport then
    begin
    if not FileExists(sFichier) then
    begin
    Showmessage('Le fichier : ' + sFichier + ' est introuvable...');
    exit;
    end;

    B := TFileStream.Create('Histoire.dica', fmOpenRead);
    B.Seek(0, soFromBeginning);
    dossier := IntTostr(iNumDossier);
    QueryWrite := TIBQuery.Create(Application);
    QueryWrite.database := dm.ibd_BASE;

    if dossier = '0' then
    begin
    // PCM -- dico := B.ReadAnsiString;
    QueryWrite.SQL.Clear;
    QueryWrite.SQL.Add('delete from ref_histoire'
    + ' where hi_dossier = 0 and hi_dicorigine=''' + dico + '''');
    QueryWrite.ExecSQL;
    end;

    QueryWrite.SQL.Clear;
    QueryWrite.SQL.Add('insert into ref_histoire ('
    + ' hi_dossier'
    + ',hi_dicorigine'
    + ',hi_date_texte'
    + ',hi_cat'
    + ',hi_titre'
    + ',hi_texte'
    + ',hi_image'
    + ')'
    + ' values('
    + dossier
    + ',:hi_dicorigine'
    + ',:hi_date_texte'
    + ',:hi_cat'
    + ',:hi_titre'
    + ',:hi_texte'
    + ',:hi_image'
    + ')');

    Tampon := TMemoryStream.Create;
    B.Seek(0, soFromBeginning);

    while B.Position < B.Size do
    begin
    with QueryWrite do
    begin
    // PCM -- chaine := B.ReadAnsiString;
    ParamByName('hi_dicorigine').AsString := chaine;

    // PCM -- chaine := B.ReadAnsiString;
    ParamByName('hi_date_texte').AsString := chaine;

    // PCM -- L := B.ReadDWord;
    ParamByName('hi_cat').Asinteger := L;

    // PCM -- chaine := B.ReadAnsiString;
    ParamByName('hi_titre').AsString := chaine;

    // PCM -- L := B.ReadDWord;

    if L = 0 then
    ParamByName('hi_texte').value := Null
    else
    begin
    tampon.Clear;
    tampon.CopyFrom(B, L);
    tampon.Seek(0, soFromBeginning);
    ParamByName('hi_texte').LoadFromStream(tampon, ftMemo);
    end;

    // PCM -- L := B.ReadDWord;

    if L = 0 then
    ParamByName('hi_image').value := Null
    else
    begin
    tampon.Clear;
    tampon.CopyFrom(B, L);
    tampon.Seek(0, soFromBeginning);
    ParamByName('hi_image').LoadFromStream(tampon, ftBlob);
    end;
    ExecSQL;
    end;
    end;

    FreeAndNil(B);
    tampon.Clear;
    FreeAndNil(tampon);
    QueryWrite.Close;
    FreeAndNil(QueryWrite);

    showMessage('Le fichier : ' + sFichier + ' a été importé avec success...');
    doOpenQueries;
    end;
    end;

  2. #2
    Expert confirmé

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    Pour ReadDWord tu dois utiliser la procédure ReadBuffer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    B.ReadBuffer(L, 4);
    // 4 car un DWord fait 4 octets
    Pour des chaînes de caractères, il faudrait savoir dans quel format ReadAnsiString lit les données. S'il s'agit du format "longuer sur 4 octets + contenu de la chaîne", voici des routines à moi :
    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
    {*
      Lit une chaîne de caractères depuis un flux
      Cette chaîne doit avoir été écrite avec WriteStrToStream.
      @param Stream   Flux depuis lequel lire la chaîne
      @return La chaîne lue
    *}
    function ReadStrFromStream(Stream : TStream) : string;
    var Len : integer;
    begin
      Stream.ReadBuffer(Len, 4);
      SetLength(Result, Len);
      Stream.ReadBuffer(Result[1], Len);
    end;
     
    {*
      Écrit une chaîne de caractères dans un flux
      Cette chaine pourra être relue avec ReadStrFromStream.
      @param Stream   Flux dans lequel enregistrer la chaîne
      @param Str      Chaîne de caractères à écrire
    *}
    procedure WriteStrToStream(Stream : TStream; const Str : string);
    var Len : integer;
    begin
      Len := Length(Str);
      Stream.WriteBuffer(Len, 4);
      Stream.WriteBuffer(Str[1], Len);
    end;
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  3. #3
    Membre éclairé Avatar de Cazaux-Moutou-Philippe
    Inscrit en
    Mai 2005
    Messages
    674
    Détails du profil
    Informations personnelles :
    Âge : 76

    Informations forums :
    Inscription : Mai 2005
    Messages : 674
    Par défaut
    Merci bcp

    ca marche

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 21/01/2015, 14h22
  2. [Eclipse 3.0.1] Convertir des sources Dos en Unix
    Par Bicnic dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 22/09/2009, 16h38
  3. Convertir ce source code
    Par Chad11 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 26/02/2008, 04h09
  4. convertir une source C# en vb.net
    Par waspy59 dans le forum VB.NET
    Réponses: 9
    Dernier message: 22/02/2008, 11h08
  5. Convertir Source C 32--> 64 bits
    Par da_mind_stroka dans le forum Visual C++
    Réponses: 1
    Dernier message: 06/11/2006, 10h48

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