L'en-tête format de fichier de bases de données interbase/firebird fichiers
Une classe simple pour obtenir des informations sur la structure du disque d'un serveur interbase/firebird.
Cette classe simple vous permettra de spécifier un serveur interbase/firebird et il retrive d'informations sur la base de données
fichiers Secondaires
tailles de Page
Sur le disque numéro de structure
Nombre de pages pour chaque fichier
etc
Pour l'utiliser, vous pouvez simplement faire ceci
GDBInfo := TGDBInfo.Create('c:\something.gdb')
& nbsp & nbsp for I := 0 to GDBInfo.Count - 1 do
& ! & ! & ! & nbsp ShowMessage(GDBInfo[I].Nom de fichier)
enfin
& nbsp & nbsp GDBInfo.Gratuit
fin
unité de GDBInfo
interface
& nbsp & nbsp SysUtils, Les Classes
const
& nbsp & nbsp cMAX_PAGE_SIZE = 32768
type
& nbsp & nbsp SChar = type shortint
& nbsp & nbsp SShort = Smallint
& nbsp & nbsp UShort = Mot
& nbsp & nbsp SLong = Longint
& nbsp & nbsp ULong = LongWord
& nbsp & nbsp TPag = paniers enregistrement
& ! & ! & ! & nbsp pag_type: SChar
& ! & ! & ! & nbsp pag_flags: SChar
& ! & ! & ! & nbsp pag_checksum: UShort
& ! & ! & ! & nbsp pag_generation: ULong
& ! & ! & ! & nbsp pag_seqno: ULong
& ! & ! & ! & nbsp pg_offset: ULong
& nbsp & nbsp fin
& nbsp & nbsp THdr = paniers enregistrement
& ! & ! & ! & nbsp hdr_header: TPag
& ! & ! & ! & nbsp hdr_page_size: UShort
& ! & ! & ! & nbsp hdr_ods_version: UShort
& ! & ! & ! & nbsp hdr_pages: SLong
& ! & ! & ! & nbsp hdr_next_page: ULong
& ! & ! & ! & nbsp hdr_oldest_transaction: SLong
& ! & ! & ! & nbsp hdr_oldest_active: SLong
& ! & ! & ! & nbsp hdr_next_transaction: SLong
& ! & ! & ! & nbsp hdr_sequence: UShort
& ! & ! & ! & nbsp hdr_flags: UShort
& ! & ! & ! & nbsp hdr_creation_date: array[0..1] de SLong
& ! & ! & ! & nbsp hdr_attachment_id: SLong
& ! & ! & ! & nbsp hdr_shadow_count: SLong
& ! & ! & ! & nbsp hdr_implementation: SShort
& ! & ! & ! & nbsp hdr_ods_minor: UShort
& ! & ! & ! & nbsp hdr_ods_minor_original: UShort
& ! & ! & ! & nbsp hdr_end: UShort
& ! & ! & ! & nbsp hdr_page_buffers: ULong
& ! & ! & ! & nbsp hdr_bumped_transaction: SLong
& ! & ! & ! & nbsp hdr_oldest_snapshot: SLong
& ! & ! & ! & nbsp hdr_misc: array[0..3] de SLong
& nbsp & nbsp fin
& nbsp & nbsp THdrPage = paniers enregistrement
& ! & ! & ! & nbsp fix_data: THdr
& ! & ! & ! & nbsp var_data: array[0..cMAX_PAGE_SIZE - 1 - SizeOf(THdr)] de Byte
& nbsp & nbsp fin
& nbsp & nbsp //Pas IB connexes
& nbsp & nbsp EGDBError = classe(Exception)
& nbsp & nbsp PGDBFile = ^TGDBFileInfo
& nbsp & nbsp TGDBFileInfo = enregistrement
& ! & ! & ! & nbsp en-Tête: THdr
& ! & ! & ! & nbsp nom de fichier: ShortString
& ! & ! & ! & nbsp ContinuationFile: ShortString
& ! & ! & ! & nbsp FirstLogicalPage: LongWord
& ! & ! & ! & nbsp LastLogicalPage: LongWord
& ! & ! & ! & nbsp TotalPages: LongWord
& nbsp & nbsp fin
& nbsp & nbsp TGDBInfo = classe
& nbsp & nbsp privé
& ! & ! & ! & nbsp FList: TList
& ! & ! & ! & nbsp Ffichier: string
& ! & ! & ! & nbsp procédure GetDBFiles
& ! & ! & ! & nbsp fonction GetItem(I: Integer): TGDBFileInfo
& nbsp & nbsp protégé
& nbsp & nbsp public
& ! & ! & ! & nbsp constructeur Créer(const AFilename: string)
& ! & ! & ! & nbsp destructeur de Détruire remplacer
& ! & ! & ! & nbsp fonction Count: Integer
& ! & ! & ! & nbsp propriété des Articles[I: Integer]: TGDBFileInfo lire GetItem par défaut
& nbsp & nbsp fin
application
{ TGDBInfo }
fonction de TGDBInfo.Count: Integer
begin
& nbsp & nbsp Résultat := FList.Le comte
fin
constructeur TGDBInfo.Créer(const AFilename: string)
begin
& nbsp & nbsp hérité de Créer
& nbsp & nbsp FList := TList.Créer
& nbsp & nbsp Ffichier := AFilename
& nbsp & nbsp GetDBFiles
fin
destructeur TGDBInfo.Détruire
var
& nbsp & nbsp I: Integer
begin
& nbsp & nbsp for I := Count - 1 downto 0 do
& nbsp & nbsp commencer
& ! & ! & ! & nbsp FreeMem(FList[I])
& ! & ! & ! & nbsp FList.Supprimer(I)
& nbsp & nbsp fin
& nbsp & nbsp hérité
fin
procédure TGDBInfo.GetDBFiles
var
& nbsp & nbsp FS: TFileStream
& nbsp & nbsp HeaderPage: THdrPage
& nbsp & nbsp NewFile: PGDBFile
& nbsp & nbsp CurrentFilename: ShortString
& nbsp & nbsp FilenameSize: Octet
& nbsp & nbsp StartPage: LongWord
& nbsp & nbsp SourceDir: string
& nbsp & nbsp DataOffset: Entier
begin
& nbsp & nbsp si pas FileExists(Ffichier)
& ! & ! & ! & nbsp élever EGDBError.Créer ('Fichier n'existe pas -' Ffichier)
& nbsp & nbsp SourceDir := ExtractFilePath(Ffichier)
& nbsp & nbsp si SourceDir = ' ensuite SourceDir := IncludeTrailingBackSlash(GetCurrentDir)
& nbsp & nbsp StartPage := 0
& nbsp & nbsp CurrentFilename := SourceDir ExtractFilename(Ffichier)
& nbsp & nbsp repeat
& ! & ! & ! & nbsp FS := TFileStream.Créer(CurrentFilename, fmOpenRead ou fmShareDenyNone)
& ! & ! & ! & nbsp essayer
& ! & ! & ! & ! & ! & nbsp GetMem(NewFile, SizeOf(TGDBFileInfo))
& ! & ! & ! & ! & ! & nbsp FS.Lire(HeaderPage, SizeOf(HeaderPage))
& ! & ! & ! & ! & ! & nbsp Déplacer(HeaderPage, NewFile.L'en-tête, SizeOf(THdr))
& ! & ! & ! & ! & ! & nbsp DataOffset := 0
& ! & ! & ! & ! & ! & nbsp //Format de var_data est répété
& ! & ! & ! & ! & ! & nbsp //1 = nom de fichier Racine
& ! & ! & ! & ! & ! & nbsp //2 = Journal du serveur
& ! & ! & ! & ! & ! & nbsp //3 = Continuation fichier (c'est celui que nous voulons)
& ! & ! & ! & ! & ! & nbsp //4 = Dernière page logique
& ! & ! & ! & ! & ! & nbsp //5 = sans licence accède
& ! & ! & ! & ! & ! & nbsp //6 = intervalle de Balayage
& ! & ! & ! & ! & ! & nbsp //7 = Relecture du fichier de journalisation
& ! & ! & nbsp & nbsp & nbsp & nbsp //11= Partage fichier de cache
& ! & ! & ! & ! & ! & nbsp tandis que HeaderPage.var_data[DataOffset] <> 3 ne
& ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & nbsp si HeaderPage.var_data[DataOffset 1] = 0 then Break
& ! & ! & ! & ! & ! & ! & ! & nbsp Inc(DataOffset, HeaderPage.var_data[DataOffset 1] 2)
& ! & ! & ! & ! & ! & ! & ! & nbsp si DataOffset > HeaderPage.fix_data.hdr_page_size - SizeOf(HeaderPage.fix_data)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp élever EGDBError.Créer (Suite'')
& ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & nbsp FilenameSize := HeaderPage.var_data[DataOffset 1]
& ! & ! & ! & ! & ! & nbsp NewFile.Filename := CurrentFileName
& ! & ! & ! & ! & ! & nbsp SetLength(NewFile.ContinuationFile, FilenameSize)
& ! & ! & ! & ! & ! & nbsp si FilenameSize > 0, alors
& ! & ! & ! & ! & ! & ! & ! & nbsp Déplacer(HeaderPage.var_data[DataOffset 2], NewFile.ContinuationFile[1], FilenameSize)
& nbsp nbsp & - ! & ! & ! & nbsp NewFile.FirstLogicalPage := page d'accueil
& ! & ! & ! & ! & ! & nbsp Déplacer(HeaderPage.var_data[DataOffset FilenameSize 4], NewFile.LastLogicalPage, SizeOf(LongWord))
& ! & ! & ! & ! & ! & nbsp NewFile.TotalPages := NewFile.LastLogicalPage - NewFile.FirstLogicalPage
& ! & ! & ! & ! & ! & nbsp Inc(StartPage, NewFile.TotalPages)
& ! & ! & ! & ! & ! & nbsp FList.Ajouter(NewFile)
& ! & ! & ! & ! & ! & nbsp CurrentFilename := NewFile.ContinuationFile
& ! & ! & ! & ! & ! & nbsp si CurrentFilename = '
& ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & nbsp NewFile.LastLogicalPage := 0
& ! & ! & ! & ! & ! & ! & ! & nbsp NewFile.TotalPages := 0
& ! & ! & ! & ! & ! & ! & ! & nbsp Pause
& ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & nbsp enfin
& ! & ! & ! & ! & ! & nbsp FS.Gratuit
& ! & ! & ! & nbsp fin
& nbsp & nbsp jusqu'à False
fin
fonction de TGDBInfo.GetItem(I: Integer): TGDBFileInfo
begin
& nbsp & nbsp Résultat := PGDBFile(FList[I])^
fin
à la fin.
L'en-tete format de fichier de bases de donnees interbase/firebird fichiers
L'en-tete format de fichier de bases de donnees interbase/firebird fichiers : Plusieurs milliers de conseils pour vous faciliter la vie.
Une classe simple pour obtenir des informations sur la structure du disque d'un serveur interbase/firebird.
Cette classe simple vous permettra de specifier un serveur interbase/firebird et il retrive d'informations sur la base de donnees
fichiers Secondaires
tailles de Page
Sur le disque numero de structure
Nombre de pages pour chaque fichier
etc
Pour l'utiliser, vous pouvez simplement faire ceci
GDBInfo := TGDBInfo.Create('c:\something.gdb')
& nbsp & nbsp for I := 0 to GDBInfo.Count - 1 do
& ! & ! & ! & nbsp ShowMessage(GDBInfo[I].Nom de fichier)
enfin
& nbsp & nbsp GDBInfo.Gratuit
fin
unite de GDBInfo
interface
& nbsp & nbsp SysUtils, Les Classes
const
& nbsp & nbsp cMAX_PAGE_SIZE = 32768
type
& nbsp & nbsp SChar = type shortint
& nbsp & nbsp SShort = Smallint
& nbsp & nbsp UShort = Mot
& nbsp & nbsp SLong = Longint
& nbsp & nbsp ULong = LongWord
& nbsp & nbsp TPag = paniers enregistrement
& ! & ! & ! & nbsp pag_type: SChar
& ! & ! & ! & nbsp pag_flags: SChar
& ! & ! & ! & nbsp pag_checksum: UShort
& ! & ! & ! & nbsp pag_generation: ULong
& ! & ! & ! & nbsp pag_seqno: ULong
& ! & ! & ! & nbsp pg_offset: ULong
& nbsp & nbsp fin
& nbsp & nbsp THdr = paniers enregistrement
& ! & ! & ! & nbsp hdr_header: TPag
& ! & ! & ! & nbsp hdr_page_size: UShort
& ! & ! & ! & nbsp hdr_ods_version: UShort
& ! & ! & ! & nbsp hdr_pages: SLong
& ! & ! & ! & nbsp hdr_next_page: ULong
& ! & ! & ! & nbsp hdr_oldest_transaction: SLong
& ! & ! & ! & nbsp hdr_oldest_active: SLong
& ! & ! & ! & nbsp hdr_next_transaction: SLong
& ! & ! & ! & nbsp hdr_sequence: UShort
& ! & ! & ! & nbsp hdr_flags: UShort
& ! & ! & ! & nbsp hdr_creation_date: array[0..1] de SLong
& ! & ! & ! & nbsp hdr_attachment_id: SLong
& ! & ! & ! & nbsp hdr_shadow_count: SLong
& ! & ! & ! & nbsp hdr_implementation: SShort
& ! & ! & ! & nbsp hdr_ods_minor: UShort
& ! & ! & ! & nbsp hdr_ods_minor_original: UShort
& ! & ! & ! & nbsp hdr_end: UShort
& ! & ! & ! & nbsp hdr_page_buffers: ULong
& ! & ! & ! & nbsp hdr_bumped_transaction: SLong
& ! & ! & ! & nbsp hdr_oldest_snapshot: SLong
& ! & ! & ! & nbsp hdr_misc: array[0..3] de SLong
& nbsp & nbsp fin
& nbsp & nbsp THdrPage = paniers enregistrement
& ! & ! & ! & nbsp fix_data: THdr
& ! & ! & ! & nbsp var_data: array[0..cMAX_PAGE_SIZE - 1 - SizeOf(THdr)] de Byte
& nbsp & nbsp fin
& nbsp & nbsp //Pas IB connexes
& nbsp & nbsp EGDBError = classe(Exception)
& nbsp & nbsp PGDBFile = ^TGDBFileInfo
& nbsp & nbsp TGDBFileInfo = enregistrement
& ! & ! & ! & nbsp en-Tete: THdr
& ! & ! & ! & nbsp nom de fichier: ShortString
& ! & ! & ! & nbsp ContinuationFile: ShortString
& ! & ! & ! & nbsp FirstLogicalPage: LongWord
& ! & ! & ! & nbsp LastLogicalPage: LongWord
& ! & ! & ! & nbsp TotalPages: LongWord
& nbsp & nbsp fin
& nbsp & nbsp TGDBInfo = classe
& nbsp & nbsp prive
& ! & ! & ! & nbsp FList: TList
& ! & ! & ! & nbsp Ffichier: string
& ! & ! & ! & nbsp procedure GetDBFiles
& ! & ! & ! & nbsp fonction GetItem(I: Integer): TGDBFileInfo
& nbsp & nbsp protege
& nbsp & nbsp public
& ! & ! & ! & nbsp constructeur Creer(const AFilename: string)
& ! & ! & ! & nbsp destructeur de Detruire remplacer
& ! & ! & ! & nbsp fonction Count: Integer
& ! & ! & ! & nbsp propriete des Articles[I: Integer]: TGDBFileInfo lire GetItem par defaut
& nbsp & nbsp fin
application
{ TGDBInfo }
fonction de TGDBInfo.Count: Integer
begin
& nbsp & nbsp Resultat := FList.Le comte
fin
constructeur TGDBInfo.Creer(const AFilename: string)
begin
& nbsp & nbsp herite de Creer
& nbsp & nbsp FList := TList.Creer
& nbsp & nbsp Ffichier := AFilename
& nbsp & nbsp GetDBFiles
fin
destructeur TGDBInfo.Detruire
var
& nbsp & nbsp I: Integer
begin
& nbsp & nbsp for I := Count - 1 downto 0 do
& nbsp & nbsp commencer
& ! & ! & ! & nbsp FreeMem(FList[I])
& ! & ! & ! & nbsp FList.Supprimer(I)
& nbsp & nbsp fin
& nbsp & nbsp herite
fin
procedure TGDBInfo.GetDBFiles
var
& nbsp & nbsp FS: TFileStream
& nbsp & nbsp HeaderPage: THdrPage
& nbsp & nbsp NewFile: PGDBFile
& nbsp & nbsp CurrentFilename: ShortString
& nbsp & nbsp FilenameSize: Octet
& nbsp & nbsp StartPage: LongWord
& nbsp & nbsp SourceDir: string
& nbsp & nbsp DataOffset: Entier
begin
& nbsp & nbsp si pas FileExists(Ffichier)
& ! & ! & ! & nbsp elever EGDBError.Creer ('Fichier n'existe pas -' Ffichier)
& nbsp & nbsp SourceDir := ExtractFilePath(Ffichier)
& nbsp & nbsp si SourceDir = ' ensuite SourceDir := IncludeTrailingBackSlash(GetCurrentDir)
& nbsp & nbsp StartPage := 0
& nbsp & nbsp CurrentFilename := SourceDir ExtractFilename(Ffichier)
& nbsp & nbsp repeat
& ! & ! & ! & nbsp FS := TFileStream.Creer(CurrentFilename, fmOpenRead ou fmShareDenyNone)
& ! & ! & ! & nbsp essayer
& ! & ! & ! & ! & ! & nbsp GetMem(NewFile, SizeOf(TGDBFileInfo))
& ! & ! & ! & ! & ! & nbsp FS.Lire(HeaderPage, SizeOf(HeaderPage))
& ! & ! & ! & ! & ! & nbsp Deplacer(HeaderPage, NewFile.L'en-tete, SizeOf(THdr))
& ! & ! & ! & ! & ! & nbsp DataOffset := 0
& ! & ! & ! & ! & ! & nbsp //Format de var_data est repete
& ! & ! & ! & ! & ! & nbsp //1 = nom de fichier Racine
& ! & ! & ! & ! & ! & nbsp //2 = Journal du serveur
& ! & ! & ! & ! & ! & nbsp //3 = Continuation fichier (c'est celui que nous voulons)
& ! & ! & ! & ! & ! & nbsp //4 = Derniere page logique
& ! & ! & ! & ! & ! & nbsp //5 = sans licence accede
& ! & ! & ! & ! & ! & nbsp //6 = intervalle de Balayage
& ! & ! & ! & ! & ! & nbsp //7 = Relecture du fichier de journalisation
& ! & ! & nbsp & nbsp & nbsp & nbsp //11= Partage fichier de cache
& ! & ! & ! & ! & ! & nbsp tandis que HeaderPage.var_data[DataOffset] <> 3 ne
& ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & nbsp si HeaderPage.var_data[DataOffset 1] = 0 then Break
& ! & ! & ! & ! & ! & ! & ! & nbsp Inc(DataOffset, HeaderPage.var_data[DataOffset 1] 2)
& ! & ! & ! & ! & ! & ! & ! & nbsp si DataOffset > HeaderPage.fix_data.hdr_page_size - SizeOf(HeaderPage.fix_data)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp elever EGDBError.Creer (Suite'')
& ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & nbsp FilenameSize := HeaderPage.var_data[DataOffset 1]
& ! & ! & ! & ! & ! & nbsp NewFile.Filename := CurrentFileName
& ! & ! & ! & ! & ! & nbsp SetLength(NewFile.ContinuationFile, FilenameSize)
& ! & ! & ! & ! & ! & nbsp si FilenameSize > 0, alors
& ! & ! & ! & ! & ! & ! & ! & nbsp Deplacer(HeaderPage.var_data[DataOffset 2], NewFile.ContinuationFile[1], FilenameSize)
& nbsp nbsp & - ! & ! & ! & nbsp NewFile.FirstLogicalPage := page d'accueil
& ! & ! & ! & ! & ! & nbsp Deplacer(HeaderPage.var_data[DataOffset FilenameSize 4], NewFile.LastLogicalPage, SizeOf(LongWord))
& ! & ! & ! & ! & ! & nbsp NewFile.TotalPages := NewFile.LastLogicalPage - NewFile.FirstLogicalPage
& ! & ! & ! & ! & ! & nbsp Inc(StartPage, NewFile.TotalPages)
& ! & ! & ! & ! & ! & nbsp FList.Ajouter(NewFile)
& ! & ! & ! & ! & ! & nbsp CurrentFilename := NewFile.ContinuationFile
& ! & ! & ! & ! & ! & nbsp si CurrentFilename = '
& ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & nbsp NewFile.LastLogicalPage := 0
& ! & ! & ! & ! & ! & ! & ! & nbsp NewFile.TotalPages := 0
& ! & ! & ! & ! & ! & ! & ! & nbsp Pause
& ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & nbsp enfin
& ! & ! & ! & ! & ! & nbsp FS.Gratuit
& ! & ! & ! & nbsp fin
& nbsp & nbsp jusqu'a False
fin
fonction de TGDBInfo.GetItem(I: Integer): TGDBFileInfo
begin
& nbsp & nbsp Resultat := PGDBFile(FList[I])^
fin
a la fin.
L'en-tête format de fichier de bases de données interbase/firebird fichiers
By commentfaire
L'en-tête format de fichier de bases de données interbase/firebird fichiers : Plusieurs milliers de conseils pour vous faciliter la vie.