Encabezado del archivo de formato de interbase/firebird archivos


Una clase simple para obtener información acerca de la estructura del disco de un interbase/firebird base de datos.
Esta sencilla clase le permite especificar un interbase/firebird base de datos y va a obtener información acerca de la base de datos incluida
Secundaria de archivos
tamaños de Página
En la estructura del disco número
Número de páginas para cada archivo
etc
Para usarlo simplemente puede hacer esto
GDBInfo := TGDBInfo.Create('c:/something.gdb')
prueba
& nbsp & nbsp for I := 0 a GDBInfo.Count - 1 do
& nbsp & nbsp & nbsp & nbsp ShowMessage(GDBInfo[I].Nombre de archivo)
finalmente
& nbsp & nbsp GDBInfo.Libre
fin


unidad de GDBInfo
interfaz
usos
& nbsp & nbsp SysUtils, Clases
const
& nbsp & nbsp cMAX_PAGE_SIZE = 32768
tipo
& nbsp & nbsp SChar = Shortint
& nbsp & nbsp SShort = Smallint
& nbsp & nbsp UShort = Word
& nbsp & nbsp SLong = Longint
& nbsp & nbsp ULong = LongWord
& nbsp & nbsp TPag = lleno de registro
& nbsp & nbsp & nbsp & nbsp pag_type: SChar
& nbsp & nbsp & nbsp & nbsp pag_flags: SChar
& nbsp & nbsp & nbsp & nbsp pag_checksum: UShort
& nbsp & nbsp & nbsp & nbsp pag_generation: ULong
& nbsp & nbsp & nbsp & nbsp pag_seqno: ULong
& nbsp & nbsp & nbsp & nbsp pg_offset: ULong
& nbsp & nbsp final
& nbsp & nbsp THdr = lleno de registro
& nbsp & nbsp & nbsp & nbsp hdr_header: TPag
& nbsp & nbsp & nbsp & nbsp hdr_page_size: UShort
& nbsp & nbsp & nbsp & nbsp hdr_ods_version: UShort
& nbsp & nbsp & nbsp & nbsp hdr_pages: SLong
& nbsp & nbsp & nbsp & nbsp hdr_next_page: ULong
& nbsp & nbsp & nbsp & nbsp hdr_oldest_transaction: SLong
& nbsp & nbsp & nbsp & nbsp hdr_oldest_active: SLong
& nbsp & nbsp & nbsp & nbsp hdr_next_transaction: SLong
& nbsp & nbsp & nbsp & nbsp hdr_sequence: UShort
& nbsp & nbsp & nbsp & nbsp hdr_flags: UShort
& nbsp & nbsp & nbsp & nbsp hdr_creation_date: array[0..1] de SLong
& nbsp & nbsp & nbsp & nbsp hdr_attachment_id: SLong
& nbsp & nbsp & nbsp & nbsp hdr_shadow_count: SLong
& nbsp & nbsp & nbsp & nbsp hdr_implementation: SShort
& nbsp & nbsp & nbsp & nbsp hdr_ods_minor: UShort
& nbsp & nbsp & nbsp & nbsp hdr_ods_minor_original: UShort
& nbsp & nbsp & nbsp & nbsp hdr_end: UShort
& nbsp & nbsp & nbsp & nbsp hdr_page_buffers: ULong
& nbsp & nbsp & nbsp & nbsp hdr_bumped_transaction: SLong
& nbsp & nbsp & nbsp & nbsp hdr_oldest_snapshot: SLong
& nbsp & nbsp & nbsp & nbsp hdr_misc: array[0..3] de SLong
& nbsp & nbsp final
& nbsp & nbsp THdrPage = lleno de registro
& nbsp & nbsp & nbsp & nbsp fix_data: THdr
& nbsp & nbsp & nbsp & nbsp var_data: array[0..cMAX_PAGE_SIZE - 1 - SizeOf(THdr)] de Bytes
& nbsp & nbsp final
& nbsp & nbsp //No IB relacionados
& nbsp & nbsp EGDBError = clase(Excepción)
& nbsp & nbsp PGDBFile = ^TGDBFileInfo
& nbsp & nbsp TGDBFileInfo = record
& nbsp & nbsp & nbsp & nbsp Encabezado: THdr
& nbsp & nbsp & nbsp & nbsp nombre de archivo: Tipo shortstring
& nbsp & nbsp & nbsp & nbsp ContinuationFile: tipo shortstring
& nbsp & nbsp & nbsp & nbsp FirstLogicalPage: LongWord
& nbsp & nbsp & nbsp & nbsp LastLogicalPage: LongWord
& nbsp & nbsp & nbsp & nbsp TotalPages: LongWord
& nbsp & nbsp final
& nbsp & nbsp TGDBInfo = clase
& nbsp & nbsp privada
& nbsp & nbsp & nbsp & nbsp Flista: TList
& nbsp & nbsp & nbsp & nbsp FFilename: string
& nbsp & nbsp & nbsp & nbsp procedimiento GetDBFiles
& nbsp & nbsp & nbsp & nbsp función GetItem(I: Integer): TGDBFileInfo
& nbsp & nbsp protegido
& nbsp & nbsp pública
& nbsp & nbsp & nbsp & nbsp constructor Create(const AFilename: string)
& nbsp & nbsp & nbsp & nbsp destructor Destruir reemplazar
& nbsp & nbsp & nbsp & nbsp función Count: Integer
& nbsp & nbsp & nbsp & nbsp propiedad de los Elementos[I: Integer]: TGDBFileInfo leer GetItem predeterminado
& nbsp & nbsp final

aplicación
{ TGDBInfo }
función TGDBInfo.Cantidad: Integer
begin
& nbsp & nbsp Resultado := Flista.Cuenta
fin
constructor TGDBInfo.Crear(const AFilename: string)
begin
& nbsp & nbsp heredado Crear
& nbsp & nbsp Flista := TList.Crear
& nbsp & nbsp FFilename := AFilename
& nbsp & nbsp GetDBFiles
fin

destructor TGDBInfo.Destruir
var
& nbsp & nbsp I: Integer
begin
& nbsp & nbsp for I := Count - 1 downto 0
& nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp FreeMem(Flista[I])
& nbsp & nbsp & nbsp & nbsp Flista.Eliminar(I)
& nbsp & nbsp final
& nbsp & nbsp heredado
fin
procedimiento TGDBInfo.GetDBFiles
var
& nbsp & nbsp FS: TFileStream
& nbsp & nbsp HeaderPage: THdrPage
& nbsp & nbsp NewFile: PGDBFile
& nbsp & nbsp CurrentFilename: tipo shortstring
& nbsp & nbsp FilenameSize: Byte
& nbsp & nbsp StartPage: LongWord
& nbsp & nbsp SourceDir: string
& nbsp & nbsp DataOffset: Integer
begin
& nbsp & nbsp si no FileExists(FFilename), a continuación,
& nbsp & nbsp & nbsp & nbsp elevar EGDBError.Create('Archivo no existe -' FFilename)
& nbsp & nbsp SourceDir := ExtractFilePath(FFilename)
& nbsp & nbsp si SourceDir = ', a continuación, SourceDir := IncludeTrailingBackSlash(GetCurrentDir)
& nbsp & nbsp StartPage := 0
& nbsp & nbsp CurrentFilename := SourceDir ExtractFilename(FFilename)
& nbsp & nbsp repetir
& nbsp & nbsp & nbsp & nbsp FS := TFileStream.Crear(CurrentFilename, fmOpenRead o fmShareDenyNone)
& nbsp & nbsp & nbsp & nbsp probar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp GetMem(NewFile, SizeOf(TGDBFileInfo))
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp FS.Leer(HeaderPage, SizeOf(HeaderPage))
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Mover(HeaderPage, NewFile.Cabecera, SizeOf(THdr))
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp DataOffset := 0
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp //Formato de var_data se repite
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp //1 = nombre de archivo Raíz
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp //2 = Diario de servidor
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp //3 = Continuación de archivo (esta es la que queremos)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp //4 = Última página lógica
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp //5 = sin Licencia accesos
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp //6 = intervalo de Barrido
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp //7 = Reproducción del archivo de registro
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp //11= archivo de memoria caché Compartida
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp mientras HeaderPage.var_data[DataOffset] <> 3
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si HeaderPage.var_data[DataOffset 1] = 0 then Break
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Inc(DataOffset, HeaderPage.var_data[DataOffset 1] 2)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si DataOffset > HeaderPage.fix_data.hdr_page_size - SizeOf(HeaderPage.fix_data), a continuación,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp elevar EGDBError.Create('Continuación')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp FilenameSize := HeaderPage.var_data[DataOffset 1]
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp NewFile.Filename := CurrentFileName
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp SetLength(NewFile.ContinuationFile, FilenameSize)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si FilenameSize > 0, entonces
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Mover(HeaderPage.var_data[DataOffset 2], NewFile.ContinuationFile[1], FilenameSize)
& nbsp & nbsp - nbsp & nbsp & nbsp & nbsp NewFile.FirstLogicalPage := página de inicio
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Mover(HeaderPage.var_data[DataOffset FilenameSize 4], NewFile.LastLogicalPage, SizeOf(palabra Larga))
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp NewFile.TotalPages := NewFile.LastLogicalPage - NewFile.FirstLogicalPage
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Inc(StartPage, NewFile.TotalPages)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Flista.Agregar(NewFile)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp CurrentFilename := NewFile.ContinuationFile
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si CurrentFilename = ', a continuación,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp NewFile.LastLogicalPage := 0
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp NewFile.TotalPages := 0
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Break
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp finalmente
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp FS.Libre
& nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp hasta False
fin
función TGDBInfo.GetItem(I: Integer): TGDBFileInfo
begin
& nbsp & nbsp Resultado := PGDBFile(Flista[I])^
fin
final.









Encabezado del archivo de formato de interbase/firebird archivos


Encabezado del archivo de formato de interbase/firebird archivos : Multi-millones de consejos para hacer su vida mas facil.


Una clase simple para obtener informacion acerca de la estructura del disco de un interbase/firebird base de datos.
Esta sencilla clase le permite especificar un interbase/firebird base de datos y va a obtener informacion acerca de la base de datos incluida
Secundaria de archivos
tamaños de Pagina
En la estructura del disco numero
Numero de paginas para cada archivo
etc
Para usarlo simplemente puede hacer esto
GDBInfo := TGDBInfo.Create('c:/something.gdb')
prueba
& nbsp & nbsp for I := 0 a GDBInfo.Count - 1 do
& nbsp & nbsp & nbsp & nbsp ShowMessage(GDBInfo[I].Nombre de archivo)
finalmente
& nbsp & nbsp GDBInfo.Libre
fin


unidad de GDBInfo
interfaz
usos
& nbsp & nbsp SysUtils, Clases
const
& nbsp & nbsp cMAX_PAGE_SIZE = 32768
tipo
& nbsp & nbsp SChar = Shortint
& nbsp & nbsp SShort = Smallint
& nbsp & nbsp UShort = Word
& nbsp & nbsp SLong = Longint
& nbsp & nbsp ULong = LongWord
& nbsp & nbsp TPag = lleno de registro
& nbsp & nbsp & nbsp & nbsp pag_type: SChar
& nbsp & nbsp & nbsp & nbsp pag_flags: SChar
& nbsp & nbsp & nbsp & nbsp pag_checksum: UShort
& nbsp & nbsp & nbsp & nbsp pag_generation: ULong
& nbsp & nbsp & nbsp & nbsp pag_seqno: ULong
& nbsp & nbsp & nbsp & nbsp pg_offset: ULong
& nbsp & nbsp final
& nbsp & nbsp THdr = lleno de registro
& nbsp & nbsp & nbsp & nbsp hdr_header: TPag
& nbsp & nbsp & nbsp & nbsp hdr_page_size: UShort
& nbsp & nbsp & nbsp & nbsp hdr_ods_version: UShort
& nbsp & nbsp & nbsp & nbsp hdr_pages: SLong
& nbsp & nbsp & nbsp & nbsp hdr_next_page: ULong
& nbsp & nbsp & nbsp & nbsp hdr_oldest_transaction: SLong
& nbsp & nbsp & nbsp & nbsp hdr_oldest_active: SLong
& nbsp & nbsp & nbsp & nbsp hdr_next_transaction: SLong
& nbsp & nbsp & nbsp & nbsp hdr_sequence: UShort
& nbsp & nbsp & nbsp & nbsp hdr_flags: UShort
& nbsp & nbsp & nbsp & nbsp hdr_creation_date: array[0..1] de SLong
& nbsp & nbsp & nbsp & nbsp hdr_attachment_id: SLong
& nbsp & nbsp & nbsp & nbsp hdr_shadow_count: SLong
& nbsp & nbsp & nbsp & nbsp hdr_implementation: SShort
& nbsp & nbsp & nbsp & nbsp hdr_ods_minor: UShort
& nbsp & nbsp & nbsp & nbsp hdr_ods_minor_original: UShort
& nbsp & nbsp & nbsp & nbsp hdr_end: UShort
& nbsp & nbsp & nbsp & nbsp hdr_page_buffers: ULong
& nbsp & nbsp & nbsp & nbsp hdr_bumped_transaction: SLong
& nbsp & nbsp & nbsp & nbsp hdr_oldest_snapshot: SLong
& nbsp & nbsp & nbsp & nbsp hdr_misc: array[0..3] de SLong
& nbsp & nbsp final
& nbsp & nbsp THdrPage = lleno de registro
& nbsp & nbsp & nbsp & nbsp fix_data: THdr
& nbsp & nbsp & nbsp & nbsp var_data: array[0..cMAX_PAGE_SIZE - 1 - SizeOf(THdr)] de Bytes
& nbsp & nbsp final
& nbsp & nbsp //No IB relacionados
& nbsp & nbsp EGDBError = clase(Excepcion)
& nbsp & nbsp PGDBFile = ^TGDBFileInfo
& nbsp & nbsp TGDBFileInfo = record
& nbsp & nbsp & nbsp & nbsp Encabezado: THdr
& nbsp & nbsp & nbsp & nbsp nombre de archivo: Tipo shortstring
& nbsp & nbsp & nbsp & nbsp ContinuationFile: tipo shortstring
& nbsp & nbsp & nbsp & nbsp FirstLogicalPage: LongWord
& nbsp & nbsp & nbsp & nbsp LastLogicalPage: LongWord
& nbsp & nbsp & nbsp & nbsp TotalPages: LongWord
& nbsp & nbsp final
& nbsp & nbsp TGDBInfo = clase
& nbsp & nbsp privada
& nbsp & nbsp & nbsp & nbsp Flista: TList
& nbsp & nbsp & nbsp & nbsp FFilename: string
& nbsp & nbsp & nbsp & nbsp procedimiento GetDBFiles
& nbsp & nbsp & nbsp & nbsp funcion GetItem(I: Integer): TGDBFileInfo
& nbsp & nbsp protegido
& nbsp & nbsp publica
& nbsp & nbsp & nbsp & nbsp constructor Create(const AFilename: string)
& nbsp & nbsp & nbsp & nbsp destructor Destruir reemplazar
& nbsp & nbsp & nbsp & nbsp funcion Count: Integer
& nbsp & nbsp & nbsp & nbsp propiedad de los Elementos[I: Integer]: TGDBFileInfo leer GetItem predeterminado
& nbsp & nbsp final

aplicacion
{ TGDBInfo }
funcion TGDBInfo.Cantidad: Integer
begin
& nbsp & nbsp Resultado := Flista.Cuenta
fin
constructor TGDBInfo.Crear(const AFilename: string)
begin
& nbsp & nbsp heredado Crear
& nbsp & nbsp Flista := TList.Crear
& nbsp & nbsp FFilename := AFilename
& nbsp & nbsp GetDBFiles
fin

destructor TGDBInfo.Destruir
var
& nbsp & nbsp I: Integer
begin
& nbsp & nbsp for I := Count - 1 downto 0
& nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp FreeMem(Flista[I])
& nbsp & nbsp & nbsp & nbsp Flista.Eliminar(I)
& nbsp & nbsp final
& nbsp & nbsp heredado
fin
procedimiento TGDBInfo.GetDBFiles
var
& nbsp & nbsp FS: TFileStream
& nbsp & nbsp HeaderPage: THdrPage
& nbsp & nbsp NewFile: PGDBFile
& nbsp & nbsp CurrentFilename: tipo shortstring
& nbsp & nbsp FilenameSize: Byte
& nbsp & nbsp StartPage: LongWord
& nbsp & nbsp SourceDir: string
& nbsp & nbsp DataOffset: Integer
begin
& nbsp & nbsp si no FileExists(FFilename), a continuacion,
& nbsp & nbsp & nbsp & nbsp elevar EGDBError.Create('Archivo no existe -' FFilename)
& nbsp & nbsp SourceDir := ExtractFilePath(FFilename)
& nbsp & nbsp si SourceDir = ', a continuacion, SourceDir := IncludeTrailingBackSlash(GetCurrentDir)
& nbsp & nbsp StartPage := 0
& nbsp & nbsp CurrentFilename := SourceDir ExtractFilename(FFilename)
& nbsp & nbsp repetir
& nbsp & nbsp & nbsp & nbsp FS := TFileStream.Crear(CurrentFilename, fmOpenRead o fmShareDenyNone)
& nbsp & nbsp & nbsp & nbsp probar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp GetMem(NewFile, SizeOf(TGDBFileInfo))
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp FS.Leer(HeaderPage, SizeOf(HeaderPage))
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Mover(HeaderPage, NewFile.Cabecera, SizeOf(THdr))
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp DataOffset := 0
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp //Formato de var_data se repite
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp //1 = nombre de archivo Raiz
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp //2 = Diario de servidor
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp //3 = Continuacion de archivo (esta es la que queremos)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp //4 = Ultima pagina logica
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp //5 = sin Licencia accesos
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp //6 = intervalo de Barrido
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp //7 = Reproduccion del archivo de registro
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp //11= archivo de memoria cache Compartida
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp mientras HeaderPage.var_data[DataOffset] <> 3
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si HeaderPage.var_data[DataOffset 1] = 0 then Break
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Inc(DataOffset, HeaderPage.var_data[DataOffset 1] 2)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si DataOffset > HeaderPage.fix_data.hdr_page_size - SizeOf(HeaderPage.fix_data), a continuacion,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp elevar EGDBError.Create('Continuacion')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp FilenameSize := HeaderPage.var_data[DataOffset 1]
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp NewFile.Filename := CurrentFileName
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp SetLength(NewFile.ContinuationFile, FilenameSize)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si FilenameSize > 0, entonces
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Mover(HeaderPage.var_data[DataOffset 2], NewFile.ContinuationFile[1], FilenameSize)
& nbsp & nbsp - nbsp & nbsp & nbsp & nbsp NewFile.FirstLogicalPage := pagina de inicio
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Mover(HeaderPage.var_data[DataOffset FilenameSize 4], NewFile.LastLogicalPage, SizeOf(palabra Larga))
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp NewFile.TotalPages := NewFile.LastLogicalPage - NewFile.FirstLogicalPage
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Inc(StartPage, NewFile.TotalPages)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Flista.Agregar(NewFile)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp CurrentFilename := NewFile.ContinuationFile
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si CurrentFilename = ', a continuacion,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp NewFile.LastLogicalPage := 0
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp NewFile.TotalPages := 0
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Break
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp finalmente
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp FS.Libre
& nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp hasta False
fin
funcion TGDBInfo.GetItem(I: Integer): TGDBFileInfo
begin
& nbsp & nbsp Resultado := PGDBFile(Flista[I])^
fin
final.


Encabezado del archivo de formato de interbase/firebird archivos

Encabezado del archivo de formato de interbase/firebird archivos : Multi-millones de consejos para hacer su vida más fácil.
Recommander aux amis
  • gplus
  • pinterest

Comentario

Dejar un comentario

Clasificación