Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   FreePascal (https://www.delphipraxis.net/74-freepascal/)
-   -   problem mit Klassen-Instanzen (https://www.delphipraxis.net/148352-problem-mit-klassen-instanzen.html)

HannsW 28. Feb 2010 11:17


problem mit Klassen-Instanzen
 
Einen schönen Sonntag,
ich habe folgenden Code
Delphi-Quellcode:
       // Stats
       tableStats := TdBaseClass.create;
       tableStats.Filepath := DataPath;
        if f_DruckTyp = 'Angebot' then begin
          tableStats.FileName := 'ANGSTAT.dbf';
          tableStats.NtxFileName := 'ANGSTAT.ntx';
       end;
       tableStats.open;



       // die Positionen
       tableAufPos := TdBaseClass.Create;
       tableAufPos.Filepath := DataPath;
       if f_DruckTyp = 'Angebot' then begin
          tableAufPos.FileName := 'ANGPOS.dbf';
          tableAufPos.NtxFileName := 'ANGPOS.NTX'
       end;
       tableAufPos.open;
Die TdBaseClass hat ein
Delphi-Quellcode:
 Private
          NtxBuf: array[1..1024] of Char;
          // usw.
Wenn ich in tableStats die erste 1024 Byte lese, erhalte ich z.B. 18 Pages zu je 1024 genannt
Schau ich mir die erste 1024 von tableAufpos im HEX-Editor an, so lese ich da 56 pages a 1024.
tableAufPos zeigt mir im Debugger ebenfalls 18 Seiten an

Die NTX-Files werden wie folgt geöffnet:
Delphi-Quellcode:

function TdBaseClass.ntxOpen : boolean;
var
  nTemp :Integer;
  nTag  : integer;
  cTemp: String;

begin
     result := false;
     if ntxFileName = '' then begin
        exit;
     end;

     cTemp := f_Filepath + ntxFileName;
     AssignFile(f_theNtxFile, cTemp);  { Datei ausgewählt }
     Reset(f_theNtxFile);
     ntxisOpen := true;
     ntxFileSize := FileSize(f_theNtxFile);
     // die erste Intger Lesen
     seek ( f_theNtxFile,0);
     BlockRead(f_theNtxFile, NtxBuf, f_RecordLen,f_bytesReturned);

     // notwendige Werte einlesen...
end;
Das Smiley, welches wohl am Besten zu mir derzeit paßt ist dieses :wall: :wall:
Danke für evtl Hilfe
Hanns

JamesTKirk 28. Feb 2010 17:50

Re: problem mit Klassen-Instanzen
 
Hi!

Erstmal: ich habe keine Ahnung von dBase, deswegen kann ich eventuell nicht all zu viel helfen.

Zitat:

Zitat von HannsW
Wenn ich in tableStats die erste 1024 Byte lese, erhalte ich z.B. 18 Pages zu je 1024 genannt
Schau ich mir die erste 1024 von tableAufpos im HEX-Editor an, so lese ich da 56 pages a 1024.
tableAufPos zeigt mir im Debugger ebenfalls 18 Seiten an

Wie sind denn diese ersten 1024 Bytes einer NTX-Datei aufgebaut? Bzw. an welcher Stelle steht die Anzahl der Seiten?
Ist 18 der korrekte Seitenwert für tableStats oder sollte es auch hier 56 wie bei tableAufPos sein? Arbeitest du auf einem Big oder Little Endian System, sodass vielleicht die falsche Bytereihenfolge verwendet wird?

Delphi-Quellcode:
BlockRead(f_theNtxFile, NtxBuf, f_RecordLen,f_bytesReturned);
Welchen Wert hat f_RecordLen? Gilt nach dem Aufruf von BlockRead (f_RecordLen = f_BytesReturned)?

Gruß,
Sven

HannsW 1. Mär 2010 18:20

Re: problem mit Klassen-Instanzen
 
Danke Sven für Deine Antwort.

hat sich erledigt: meine Dateien waren defekt. Mit anderen klappt es nun
Hanns

JamesTKirk 2. Mär 2010 13:23

Re: problem mit Klassen-Instanzen
 
Schön, dass sich das Problem so einfach lösen lassen konnte... aber da muss man auch erstmal drauf kommen, dass die Dateien kaputt sind :gruebel:

Gruß,
Sven

HannsW 2. Mär 2010 18:02

Re: problem mit Klassen-Instanzen
 
und trotzdem ist es merkwürdig, daß defekte Dateien bewirken können, daß der private buffer "ntxBuf" einer Instanz
von einer anderen angezeigt wird.
Egal, es läuft mit neuen Dateien
Hanns


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz