[Javalist] DOS BTrieve adat kinyerese
Szomor Attila
aszomor at szomor.hu
2016. Ápr. 26., K, 10:21:33 CEST
Szia!
A PervasiveSQL nem jó a kinyeréshez mert az már a BTrieve-re épülő SQL
adatbázis kezelő, valakitől aki még használja kell szerezned egy
BTrieve-et ez létezik DOS és Windows verzióban is sőt szerintem a Magic
alatt is ott kell legyen hiszen ezzel dolgozik az is.
Általában a C:\BTI\WIN32\BIN könyvtárban van és több DLL-ből áll pl
WBTRCALL.DLL .. WBTRV32.DLL van egy konfiguráló W32MKSET.EXE és egy tool
BUTIL.EXE is hozzá.
Sajnos azonban a rekord szerkezetet meg kell fejtened, mert a régi
programokban egy struktúrát húztak egy memória területre és úgy
dolgoztak vele, segít ha a BUTIL-al infót kérsz le a DAT-ról.
- Ha nem változó rekordhosszúsággal készítették már tudod is mennyi
byte-ból áll a struktúra, ha változó akkor a maximális struktúra hosszat
ismered.
- A kulcsinfók alapján ki tudod szedni a kulcs mezők pozícióját és
hosszát a struktúrában, ha teljes hosszban használták.
- A többit ki kell találnod általában egyszerű típusokból áll a
struktúra ezeknek ismert a hossza és egy általad ismert adatú rekorddal
elkezdhetsz játszani.
Egy hasonló problémánál több évvel ezelőtt játszogattam, én akkor
Delphi-vel nyertem ki az adatokat már amiket tudtam, ahhoz volt BTrive
kezelőm, de létezik más nyelvekhez is C++ stb.
Attila.
SZOMOR ATTILA
+36-20/478-8436
attila at szomor.hu
aszomor at gmail.com
Ez egy példa hogy próbáltam a fenti infók és egyéb ismeretek alapján
elérni a 87 byte-os struktúra szerkezetét:
{$APPTYPE CONSOLE}
Program PECSIDIB;
uses
Windows,
BtrvErr in '..\BTrieve\BtrvErr.pas',
BtrvWin in '..\BTrieve\BtrvWin.pas';
type
PBizBuffer = ^TBizBuffer;
TBizBuffer = Packed Record {id} {naplo} {fszla} {afa}
{ 1} Id : Longint; {k0}
{ 5} Dat : BDateRec; {k1,s1}
{ 9} Biz : String[10]; {k1,s2} {k2,s3} {k3,s2}
{20} TDate : BDateRec; {k2,s4} {k3,s1}
{24} FSzla : Longint; {k2.s1}
{28} Fid : Longint; {k2,s2}
{32} Afa : Byte; {=> 0,15,25}
{33} Netto : Real48;
{39} Naplo : Byte;
{40} Munka : Word;
{42} Nev : String[20];
{63} free : Word;
{65} ostat : Byte;
{66} free1 : Byte;
{67} dev : Real48;
{73} dnem : String[3];
{77} FDate : BDateRec;
{81} XDate : BDateRec;
{85} free2 : Word;
{87} free3 : Byte;
end; {L=87}
const
BizBufferLength = SizeOf(TBizBuffer);
var
BizFile: BtiFileType;
BizBuffer: PBizBuffer;
begin
BizFile := BtiFileType.Create('C:\BTI\Data\PECSIDIB.B11',
BizBufferLength);
try
GetMem(BizFile.BtiFileProp.RecPtr, BizBufferLength+1);
try
BizBuffer := PBizBuffer(BizFile.BtiFileProp.RecPtr);
if BizFile.OpenBtiFile then
try
BizFile.GetFromBtiFile(bGetFirst);
WriteLn('Id':12, ', ', 'Dat':10, ', ', 'Biz':10, ', ',
'TDate':10, ', ', 'FSzla':12, ', ', 'Fid':12, ', ', 'Afa':3, ', ',
'Netto':15, ', ', 'Naplo':6, ', ', 'Munka':6, ', ', 'Nev':20, ', ',
'free':6, ', ', 'ostat':5, ', ', 'free1':5, ', ', 'Dev':15, ', ',
'dnem':4, ', ', 'FDate':10, ', ', 'XDate':10, ', ', 'free2':6, ', ',
'free3':5);
while BizFile.Status = bOkay do
begin
with BizBuffer^ do
begin
OemToAnsiBuff(@Nev[1], at Nev[1], Ord(Nev[0]));
WriteLn(Id:12, ', ', Dat.Year:4, '.', Dat.Month:2, '.',
Dat.Day:2, ', ', Biz:10, ', ', TDate.Year:4, '.', TDate.Month:2, '.',
TDate.Day:2, ', ', FSzla:12, ', ', Fid:12, ', ', Afa:3, ', ',
Netto:15:2, ', ', Naplo:6, ', ', Munka:6, ', ', Nev:20, ', ', free:6, ',
', ostat:5, ', ', free1:5, ', ', Dev:15:2, ', ', dnem:4, ', ',
FDate.Year:4, '.', FDate.Month:2, '.', FDate.Day:2, ', ', XDate.Year:4,
'.', XDate.Month:2, '.', XDate.Day:2, ', ', free2:6, ', ', free3:5);
end;
BizFile.GetFromBtiFile(bGetNext);
end
finally
BizFile.CloseBtiFile;
end
else
WriteLn(BtiErrorMsg({StrPas(}BizFile.BtiFileProp.Name{)},
BizFile.Status), ' Length=', BizBufferLength);
finally
FreeMem(BizFile.BtiFileProp.RecPtr, BizBufferLength+1);
BizFile.BtiFileProp.RecPtr := nil;
end;
finally
BizFile.Free;
end;
end.
További információk a(z) Javalist levelezőlistáról