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

Commentaires

  1. Avatar de tourlourou
    • |
    • permalink
    Bonjour,

    Mieux vaut tard que jamais... 2 correctifs de fonctions dans lySQLiteFields :

    Code pascal : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function  TlySQLiteTable.getSubsetFieldByIndex(aCol, aIndex: integer): TlyField;
    begin
      if (aCol<0) or (aCol>FColCount-1) or (aIndex<0) or (aIndex>SubsetCount-1)
      then Result:=nil
      // correction du 18/04/2024
      // else Result:=TlyField(FFields[Subset[aIndex]]);
      else Result:=TlyField(FFields[Subset[aIndex]*FColCount+aCol]);
      // fin correction
    end;

    Code pascal : 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
    function TlySQLiteTable.Locate(aValue: string; aCol: integer): Boolean;
    var
      i, l, index: integer;
    begin
    //  FSubsetIndex:=-1; // comme ça, Next place sur First !
      // toute nouvelle recherche efface et reconstitue l'ensemble résultat
      SetLength(Subset, 0);
      if (aCol<0) or (aCol>FColCount-1)
      then Result:=False
      else begin
        for i:=0 to FRowCount-1
        do begin
          index:=i*FColCount+aCol;
          if TlyField(FFields[index]).AsText=aValue
          then begin
            l:=Length(Subset);
            SetLength(Subset, l+1);
            // correction du 18/04/2024
            // Subset[l]:=index;
            Subset[l]:=i; 
            // fin correction
          end;
        end;
        Result := (Length(Subset) > 0);
      end;
    end;
  2. Avatar de tourlourou
    • |
    • permalink
    Cette interface de s�rialisation est beaucoup plus r�cente (apparue avec la version 3.23, le 02/04/2018) que les fonctions que j'ai utilis�es.
    Qui plus est, je ne suis pas s�r d'avoir pens� en les d�couvrant qu'on puisse les utiliser dans cette optique !
    Il me semble qu'avec cette solution se poserait le probl�me de coh�rence des donn�es en cas de bug avant r��criture chiffr�e, si j'ai bien compris la philosophie d'utilisation, avec risque de perte de donn�es ajout�es ou modifi�es pendant la session.
  3. Avatar de nicolassalocin
    • |
    • permalink
    Bravo et merci de partager cet excellent article !

    Il tombe � point nomm� alors que je me penchais sur cette probl�matique.

    J'envisage 2 solutions :
    - la v�tre
    - l'utilisation des fonctions sqlite3_serialize et sqlite3_deserialize

    Sauf erreur de ma part, vous ne mentionnez pas les fonctions sqlite3_serialize et sqlite3_deserialize.
    La fonction sqlite3_serialize permet d'obtenir un pointeur vers une zone m�moire contenant la base de donn�es.
    Il est donc possible de chiffrer cette zone vers un fichier sur le disque.
    La fonction sqlite3_deserialize permet de charger une base de donn�es � partir d'une zone m�moire dont le contenu peut �tre le r�sultat du d�chiffrement d'un fichier sur le disque.
    C'est une autre mani�re de faire et pour laquelle je n'ai pas suffisamment de recul (notamment par rapport � la taille de la base de donn�es).

    Avez-vous envisag� cette derni�re solution ?
    Et si oui, pourquoi ne pas l'avoir retenue ?
    Merci beaucoup
  4. Avatar de barunson
    • |
    • permalink
    trop top ce tuto
  5. Avatar de Aesahetr
    • |
    • permalink
    Article int�ressant, le chiffrement c'est bien !
    Cependant, petite incoh�rence sur les termes employ�s : on dit chiffrer/chiffrement et non crypter/cryptage.
    D'un point de vue cryptographique, crypter n'a pas de sens : �a voudrait dire qu'on chiffre une donn�e sans savoir comment ni avec quelle cl�.
    Et sans pouvoir la d�chiffrer du coup puisqu'on ne sait pas comment elle a �t� chiffr�...
    Plus d'infos l� : https://chiffrer.info/
  6. Avatar de tourlourou
    • |
    • permalink
    C'est un reliquat de Delphi 5, en effet... Le tutoriel Impl�mentation d'un singleton fait un tour de la question plus actuel. Merci.
  7. Avatar de Invit�
    • |
    • permalink
    La variable [c]UneSeuleInstance[/c] devrait �tre une variable de classe.
    Mais c'est peut �tre que ce n'est pas support� par les anciennes versions de Delphi.
  8. Avatar de tourlourou
    • |
    • permalink
    Citation Envoy� par SergioMaster
    Par contre je trouve que c'est la porte ouverte � de l'injection SQL.
    Merci, Serge.

    Ta remarque est tr�s int�ressante sur la faiblesse par rapport � l'injection SQL. Je ressors des vieux trucs du placard, et le format blog me plaisait pour avoir justement ces retours sur des bugs ou �volutions/suggestions.

    Pourquoi, au bout du compte, ne pas retravailler l'ensemble en fonction des remarques, et en faire une synth�se sous une forme un peu diff�rente ? L'avenir le dira...
  9. Avatar de Malick
    • |
    • permalink
    Salut,

    Citation Envoy� par SergioMaster
    le billet un peu long, pourquoi ne pas en avoir fait un tutoriel ? Tout y est.
    Il a cependant �t� publi� sur les diff�rents portails concern�s comme tutoriel pour une meilleure visibilit�.

    Excellent tutoriel

    Merci encore
  10. Avatar de SergioMaster
    • |
    • permalink
    Bonjour,

    le billet un peu long, pourquoi ne pas en avoir fait un tutoriel ? Tout y est.
    Par contre je trouve que c'est la porte ouverte � de l'injection SQL.

    En tout cas on y retrouve presque tout ce qu'offre les fonctionnalit�s de Firedac (param�tres, macros) et �a c'est :cool: