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

Lazarus Pascal Discussion :

Insérer des octets dans un champ BLOB


Sujet :

Lazarus Pascal

  1. #21
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 552
    Points : 3 918
    Points
    3 918
    Par défaut
    Salut la compagnie...

    J'ai fait un petit programme de test (TestSqlite.zip) afin de voir comment fonctionne les composants sqldb que je n'avais jamais utilisés. En PJ se trouve donc un programme qui doit être proche de ce que cherche Pierre. Je t'invite donc à étudier le code dudit exemple.

    Je me suis heurté à quelques petites choses désagréables:
    - au début l'accès dynamique à la bibliothèque libsqlite3.so ne fonctionnait pas, puis s'est mis à marcher, de la magie quoi ...,
    - l'image chargée n'est visible qu'après le post sur l'ensemble de données,
    - le composant transaction TSQLTransaction ferme les ensembles de données après le commit, c'est pénible mais on fait avec.

    Il est préférable de ne pas charger de trop grosse images, le temps de chargement est franchement perceptible.

    Question : Est-ce que quelqu'un peut me dire comment connaître les bibliothèques chargées dynamiquement pour un processus donné ? J'aimerais savoir quelle bibliothèque sqlite est chargée par mon programme.

    Merci pour vos retours là-dessus.

    Je vais essayer de migrer mon programme vers les composants ZeosLib, de mémoire avec FireBird, le comportement était meilleur (en tout cas avec Delphi).

    @+

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  2. #22
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 552
    Points : 3 918
    Points
    3 918
    Par défaut
    Comme promis, la version avec les composants ZeosDB TestSqlite(Zeos).zip.

    Après test, elle donne de meilleurs résultats que la précédente version, le chargement d'une image est effectif en cours de saisie. Le Commit ne ferme pas l'ensemble de données, c'est largement mieux. J'ai amélioré un peu le code.

    Pas de composant de script, comme dans les sqldb, j'ai utilisé un appel à TZConnection.ExecuteDirect à la place.

    A toi Pierre de jouer, maintenant. Il faut installer les composant avant, bien sûr car ils en sont pas livrés avec Lazarus, dommage...

    @+

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  3. #23
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    A titre informatif, j'avais réalisé un projet qui montrait comment utiliser des images dans une base de données sqlite avec Lazarus. Le projet consistait en une base de données de champignons vénéneux. Il a été repris par BigChimp et est disponible ici

    MushRoomsDatabase by Jurassic Pork using SQLite - January 2014
    Updated for Firebird Embedded - August 2014

    Features:
    - Use SqlDb and lazreport components.
    - Sqlite3 or Firebird embedded database DeadlyMushrooms with 5 mushrooms.
    Sqlite3 will be tried first; if no Sqlite library is available, Firebird
    embedded will be tried.
    - It demonstrates:
    - creating a new SQLite3 database with table if the db does not exist
    - use of TSQLScript to run multiple SQL statements
    - use of FBAdmin to restore Firebird backup (smaller than the live .fdb file)
    on first run, useful for keeping your setup file small and compatible with
    older Firebird versions
    - The images are stored in blob field without extension at the beginning.
    With this you can view blob images with database browser editor
    (e.g. sqlite2009pro).
    - In the database there is also a field with images links (filenames).
    - The linked images are stored in the folder images of the project.
    - You can see the linked images in a Timage.
    - You can change the images in the database:
    - for Tdbimage (image in db): double click on the component and choose your
    image.
    - for Timage (linked image): click on the button near the image filename
    (you must be in edit mode).
    - Transaction commits when you click on Tdbnavigator refresh button or on close
    form.
    - Small pictures of the mushrooms are in the sqlite3Database. Largest images are
    in files in the folder images.
    - Print button to print all the mushrooms (lazreport).
    On each page you have:
    - a title.
    - the field common_name of the mushroom database.
    - the field notes of the mushroom database.
    - the field picture of the mushroom database (picture picture1).
    - the picture of the field image_link (picture picture2).

    The report name is Mushroom_Report.lrf

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  4. #24
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Je vous remercie pour vos propositions de code et je les regarderais pour améliorer le mien qui est pour l'instant le suivant :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    procedure TForm1.btnConversionClick(Sender: TObject);
    {Création de autant de tables qu'il y a de cartes à traiter}
    var
      i: Integer;
    begin
      try
        btnConversion.Enabled:= False;
        Pos:= 0;
        ProgressConv.Position:= 0;
        for i:= 0 to Dalles.Count-1 do
        begin
          FchConv.Caption:= Dalles[i]+'  ('+IntToStr(i+1)+'/'+IntToStr(Dalles.Count)+')';
          Application.ProcessMessages;
          CreeCarte(Dalles[i]);
        end;
      finally
        btnDalles.Enabled:= True;
        btnCartes.Enabled:= False;
        FchConv.Caption:= 'Conversion terminée';
      end;
    end;
     
    procedure TForm1.CreeCarte(Dl: String);
    {Création de la table relative à une carte}
    var
      NomCarte: String;
      PictSrc: TPicture;
      PictDst: TPicture;
      xDl, yDl, dX, dY: Integer;
      i, j, nX, nY, z: Integer;
      Flux: TMemoryStream;
    begin
      NomCarte:= Copy(Dl, 1, 12);
      CreateDir(DirDst+NomCarte);
      SetCurrentDir(DirDst+NomCarte);
      SQLite3Connection.DatabaseName:= 'OruxMapsImages.db';
      SQLite3Connection.Open;
      SQLTransaction.Active:= True;
      SQLite3Connection.ExecuteDirect('CREATE TABLE android_metadata( locale TEXT);');
      SQLite3Connection.ExecuteDirect('INSERT INTO android_metadata VALUES (''fr_FR'')');
      SQLite3Connection.ExecuteDirect('CREATE TABLE tiles ('+
                     'x int, y int, z int, image blob, PRIMARY KEY (x,y,z));');
      SQLite3Connection.ExecuteDirect('CREATE INDEX IND on tiles (x,y,z)');
      SQLTransaction.Commit;
      PictSrc:= TPicture.Create;
      PictSrc.LoadFromFile(DirSrc+Dl);
      xDl:= PictSrc.Bitmap.Width;
      yDl:= PictSrc.Bitmap.Height;
      nX:= xDl div 512;
      if xDl mod 512 <> 0 then
        Inc(nX);
      nY:= yDl div 512;
      if yDl mod 512 <> 0 then
        Inc(nY);
      z:= 16;
      for j:= 0 to nY-1 do
        for i:= 0 to nX-1 do
        try
          Flux := TMemoryStream.Create;
          PictDst:= TPicture.Create;
          PictDst.BitMap.Width:= 512;
          PictDst.BitMap.Height:= 512;
          PictDst.BitMap.Canvas.CopyRect(Rect(0, 0, 512, 512), PictSrc.Bitmap.Canvas, Rect(512*i, 512*j, 512+512*i, 512+512*j));
          PictDst.BitMap.Canvas.Brush.Style:= bsSolid;
          PictDst.BitMap.Canvas.Brush.Color:= $F2D3CA;
          dX:= 511+512*i-xDl;
          if dX > 0 then
            PictDst.BitMap.Canvas.FillRect(511-dX, 0, 512, 512);
          dY:= 511+512*j-yDl;
          if dY > 0 then
            PictDst.BitMap.Canvas.FillRect(0, 511-dY, 512, 512);
          PictDst.Jpeg.CompressionQuality:= 85;
          PictDst.SaveToStream(Flux);
          PictDst.Free;
          Flux.Position := 0;
          SQLQuery.SQL.Text:= 'INSERT INTO tiles (x, y, z, image)  VALUES ('+IntToStr(i)+','+IntToStr(j)+','+IntToStr(z)+', :image)';
          SQLQuery.Params.ParamByName('image').LoadFromStream(Flux, ftBlob);
          SQLQuery.ExecSQL;
          SQLTransaction.Commit;
          IncPos:= 1000/(Dalles.Count*nX*nY);
          Pos:= Pos+IncPos;
          ProgressConv.Position:= Round(Pos);
        finally
          Flux.Free;
        end;
      PictSrc.Free;
      SQLite3Connection.Close;
      EnrgFchCoord(Dl, IntToStr(z), xDl, yDl, nX, nY); //enregistrement du fichier XML descriptif
    end;
    NOTA : les composants Zeos sont fournis avec Typhon

    Cordialement.

    Pierre

  5. #25
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 552
    Points : 3 918
    Points
    3 918
    Par défaut
    Salut

    J'étais parti sur une utilisation interactive...

    Ton code a l'air correct (pas testé de toutes façons), as-tu un problème dessus ?

    @jurassic pork : je vais sans doute regarder le code de ton programme, ça a l'air intéressant, merci de nous en avoir fait part.

    Cdlt

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  6. #26
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Citation Envoyé par e-ric Voir le message
    ... J'étais parti sur une utilisation interactive...
    Mon but était de m'adapter à un format de stockage de carte imposé pour pouvoir placer des cartes dans un format que j'avais créé pour mes applications

    Citation Envoyé par e-ric Voir le message
    ... Ton code a l'air correct (pas testé de toutes façons), as-tu un problème dessus ? ..
    Certainement perfectible, mais il tourne sans problème .

    Cordialement.

    Pierre

  7. #27
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2003
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 33
    Points : 100
    Points
    100
    Par défaut
    Puisque tu utilises les requêtes paramétrées, tu peut saisir ta requête comme çà, c'est plus propre :

    SQLQuery.SQL.Text:= 'INSERT INTO tiles (x, y, z, image) VALUES ('+IntToStr(i)+','+IntToStr(j)+','+IntToStr(z)+', :image)';
    SQLQuery.Params.ParamByName('image').LoadFromStream(Flux, ftBlob);

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SQLQuery.SQL.Text:= 'INSERT INTO tiles (x, y, z, image)  VALUES (:x, :y, :z, :image)';
     
    SQLQuery.Params.ParamByName('x').AsInteger := i;
    SQLQuery.Params.ParamByName('y').AsInteger := j;
    SQLQuery.Params.ParamByName('z').AsInteger := z;
    SQLQuery.Params.ParamByName('image').LoadFromStream(Flux, ftBlob);
    Si les champs sont de type INTEGER...

  8. #28
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 856
    Points : 11 290
    Points
    11 290
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par e-ric
    Question : Est-ce que quelqu'un peut me dire comment connaître les bibliothèques chargées dynamiquement pour un processus donné ? J'aimerais savoir quelle bibliothèque sqlite est chargée par mon programme.
    Bonsoir,
    Essaye SELECT sqlite_version() AS version qui renverra une chaîne style '3.8.7.1'
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  9. #29
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 552
    Points : 3 918
    Points
    3 918
    Par défaut
    Salut

    @tourlourou: ce n'est pas la version que je souhaite connaître mais belle et bien quelles sont les bibliothèques dynamiques chargées (leur nom de fichier avec le chemin).
    Merci quand même pour le renseignement, ça peut toujours servir.

    @jurassic pork: son exemple MushRoomsDatabase ne compile pas sous Lazarus 1.2.6, la propriété WriteHeader de TDBImage n'existe pas, sans doute existe-t-elle dans une branche à venir.

    @+

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  10. #30
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 856
    Points : 11 290
    Points
    11 290
    Billets dans le blog
    6
    Par défaut
    Sous Windows, probablement grâce à GetModuleHandle puis GetModuleFileNameEx.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  11. #31
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Merci SoftChris pour ta dernière proposition de code. C'est effectivement plus propre et surtout plus homogène.

    Cordialement.

    Pierre

  12. #32
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,

    e-ric a écrit :
    @jurassic pork: son exemple MushRoomsDatabase ne compile pas sous Lazarus 1.2.6, la propriété WriteHeader de TDBImage n'existe pas, sans doute existe-t-elle dans une branche à venir.
    Effectivement l'exemple n'est pas utilisable pour l'instant dans la version stable de Lazarus 1.2.6 (d'ailleurs il n'est pas inclus dans les exemples database de la 1.2.6). Il est dans la version courante de développement et sera certainement dans la 1.4 :
    Lazarus 1.4.0 release notes
    Template:Lazarus 1.4.0 release notes
    Lazarus 1.4.0 is not yet released. This page is under construction!
    LCL Changes
    ....
    DBImage changes versues 1.2: DbImage implements loading stream directly if it doesn't have a known header, WriteHeader property. This makes writing image header optional improving compatibility with Delphi controls - see revision 43779.
    ....
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  13. #33
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 552
    Points : 3 918
    Points
    3 918
    Par défaut
    Hi men !!

    @jurassic pork: ben, on attendra...
    @Tourlourou: je suis passé à Linux (Debian) et ta soluce n'est donc pas applicable. Avant, sous Windows, j'utilisais ProcessExplorer qui fournit plein de renseigements très utiles dont les dll utilisées. En google-ant, j'ai trouvé que lsof permet d'obtenir les fichiers ouverts (bibliothèques comprises) par un processus mais cela ne semble pas fonctionner dans mon cas de figure, il faudra que je creuse cela.

    babaille...

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  14. #34
    Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Février 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autriche

    Informations professionnelles :
    Activité : retraité
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2008
    Messages : 28
    Points : 59
    Points
    59
    Par défaut
    Bonjour,

    Sous Linux, dans un terminal, la commande ldd non_du_programme va te renvoyer tous les bibliothèques chargées par ton programme.

    Michel.

Discussions similaires

  1. Insérer des octets dans un BLOB
    Par ChPr dans le forum SQLite
    Réponses: 3
    Dernier message: 08/11/2014, 08h36
  2. Impossible d'insérer des valeurs dans un champ
    Par Sixpounder dans le forum Paradox
    Réponses: 1
    Dernier message: 08/07/2011, 16h00
  3. Lecteur des fichiers présents dans un champ blob
    Par qmike dans le forum Langage
    Réponses: 0
    Dernier message: 21/07/2010, 13h58
  4. Insérer des octets dans un fichier
    Par Hell dans le forum Langage
    Réponses: 7
    Dernier message: 13/08/2008, 10h45

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