Pagina1 van 1

Lazarus – Lees user_version van SQLite3 database zonder library

Lazarus – Lees user_version van SQLite3 database zonder library

Welkom bij de Tweaking4All gemeenschapsforums!
Voor je gaat deelnemen, bekijk de Forum Regels!

Specifieke onderwerpen: Start het onderwerp met de naam van het programma of systeem.
Voorbeelden: "MacOS X - Jouw vraag", "MS Word - Jouw Tip of Truc".

Merk op: Omschakelen naar een andere taal zal niet werken als je een post aan het lezen bent.
Posts/Reacties hebben geen tegenhanger in de andere taal.




RSS Feed

Home Forums Software Development Delphi, Lazarus, Free Pascal Lazarus – Lees user_version van SQLite3 database zonder library

1 berichten aan het bekijken (van in totaal 1)
  • Auteur
    Berichten
  • 5991

    Hans
    Sleutelbeheerder

    Voor een project wilde ik de user_version van een database uitlezen, zonder gebruik te maken van de SQLite3 library.
    SQLite3 doet zelf niks met deze waarde, en is bedoelt zodat een ontwikkelaar een versie nummer kan geven aan een database. (default waarde is 0)

    Je zet deze waarde in SQL met “PRAGMA user_version=x;” waar “x” een integer is.

    Je kunt het in SQL lezen met: “PRAGMA user_version;“.

    In de SQLite3 specificaties is deze waarde gedefinieerd als de integer bij offset 60 (de bytes 60, 61, 62 en 63 = integer) in de database file.

    Dus … even snel een functie gemaakt die hopelijk ook handig is voor anderen.

    De return waarde (integer) is:

    -1  : bestand bestaat niet
    0  : user_version was nooit ingevuld
    x : de waarde van user_version 

    De functie gebruikt de SysUtils functie:

    {
      Retrieve database user version value without using a library, this is a raw file read!
      This value can be set in SQlite using "PRAGMA user_version=x" where x = integer.
    }
    function GetSQLite3Database_UserVersion(filename:string):integer;
    var
      FileHandle:THandle;
      dbUserVersion:array [1..4] of byte;
    const
      SQLite3_ByteOffset_UserVersion = 60; // see:
    begin
      Result := -1;
      if FileExists(filename) then
        begin
          FileHandle:=FileOpen(filename,fmOpenRead);
          if FileHandle<>-1 then
            begin
              FileSeek(FileHandle,SQLite3_ByteOffset_UserVersion,fsFromBeginning);
              FileRead(FileHandle,dbUserVersion[1],SizeOf(dbUserVersion));
              FileClose(FileHandle);
              Result := ( dbUserVersion[1]<<24 ) + ( dbUserVersion[2]<<16 ) + ( dbUserVersion[3]<<8 ) + dbUserVersion[4];
            end;
        end;
    end; 

1 berichten aan het bekijken (van in totaal 1)



Je moet ingelogd zijn om reacties te kunnen plaatsen voor dit onderwerp.