Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Datenbankformat herausfinden (https://www.delphipraxis.net/183658-datenbankformat-herausfinden.html)

iceget 26. Jan 2015 19:01

Datenbankformat herausfinden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo liebe Community,

ich muss mich in den SourceCode einer Delphi-Programmierung einlesen.
Es geht darum das eine Datenbank geschrieben wird, und ich diese jedoch mittels C# auslesen / schreiben muss.

Könnt ihr mir helfen? Ich bin leider in Delphi ein blutiger Anfänger.
Damals habe ich Visual Basic programmiert, heute Visual C#. Nur mit Delphi... kenne ich mich nicht aus, und muss deswegen auch einlesen.

Ich habe von dieser Datenbankdatei (die diese Anwendung erstellt hat) einen kleinen Auszug via HexEditor erstellt.
XXX und YYY sind die eigentlichen Daten.

Die Funktion die diese Struktur schreibt sieht wie folgt aus:

Lesen:
Node: PVirtualNode;
NodeData: PArchivListData;
TempNode: PVirtualNode;
NodeDataArchiv: PArchivData;
log: string;
SRec: TSearchRec;
...
WriteLN(DBChannel[0], 'Buffer Normal = ' + Buffer);
WriteLN(DBChannel[0], 'Interpret = ' + Interpret);
WriteLN(DBChannel[0], 'Titel = ' + Titel);
...
Node := VSTArchivList.AddChild(VSTArchivList.RootNode);
NodeData := VSTArchivList.GetNodeData(Node);
...
NodeData.ValueType[0] := vtNumber;
NodeData.ValueType[1] := vtPickString;
NodeData.ValueType[2] := vtPickString;
NodeData.ValueType[3] := vtPickString;
NodeData.ValueType[4] := vtPickString;
NodeData.ValueType[5] := vtPickString;
NodeData.ValueType[6] := vtPickString;
NodeData.ValueType[7] := vtPickString;
NodeData.ValueType[8] := vtPickString;
...

Schreiben:
// Schreibe Dateistruktur

VSTArchiv.LoadFromFile(Path + '\Archiv.dat');
except
end;
Node := VSTArchiv.AddChild(VSTArchiv.RootNode);
NodeData := VSTArchiv.GetNodeData(Node);
...
NodeData.ValueType[0] := vtPickString;
NodeData.Value[0] := INIUpdateName;
WriteLN(DBChannel[0], 'INIUpdateName = ' + INIUpdateName);
NodeData.ValueType[1] := vtPickString;
NodeData.Value[1] := CheckIfGroupExist(INIUpdateName);
...
SaveArchiv


Hoffe ihr könnt mir helfen!

Vielen dank schonmal im Vorfeld!

Lg iceget

Uwe Raabe 26. Jan 2015 21:17

AW: Datenbankformat herausfinden
 
Das ist offenbar das Streamformat des VirtualTrees. Such mal in VirtualTrees.pas nach
Delphi-Quellcode:
TBaseVirtualTree.SaveToStream
.

iceget 26. Jan 2015 21:57

AW: Datenbankformat herausfinden
 
Hallo! Danke für deine schnelle Antwort :)

Leider finde ich diesen Befehl nicht.

Aber hab mir das jedoch weiter angesehen, folgendes kommt auch noch vor:

procedure TFrmMain.VSTArchivSaveNode(Sender: TBaseVirtualTree; Node: PVirtualNode; Stream: TStream);
var
NodeData: PArchivData;
size: integer;
Buffer: string;
begin
NodeData := VSTArchiv.GetNodeData(Node);

Buffer := NodeData.Value[0];
Size := Length(Buffer);
Stream.Write(Size, SizeOf(Size));
Stream.Write(PChar(Buffer)^, Size);

Buffer := NodeData.Value[1];
Size := Length(Buffer);
Stream.Write(Size, SizeOf(Size));
Stream.Write(PChar(Buffer)^, Size);
end;

...

WriteLN(DBChannel[1], 'SaveToFile Prog 0 = ' + Path+ '\' +
VSTArchiv.Text[TNode, 0] + VSTArchiv.Text[TNode, 1] + '.dat');
{$ENDIF}
VSTArchivList.SaveToFile(Path + '\' +
VSTArchiv.Text[TNode, 0] + VSTArchiv.Text[TNode, 1] + '.dat');
...
procedure VSTArchivListSaveNode(Sender: TBaseVirtualTree;
Node: PVirtualNode; Stream: TStream);

Hilft dir das bzgl. Analyse was weiter?

Vielen Dank!

lg

iceget 26. Jan 2015 22:09

AW: Datenbankformat herausfinden
 
procedure TVirtualTreeColumn.SaveToStream(const Stream: TStream);

var
Dummy: Integer;

begin
with Stream do
begin
Dummy := Length(FText);
WriteBuffer(Dummy, SizeOf(Dummy));
WriteBuffer(PWideChar(FText)^, 2 * Dummy);
Dummy := Length(FHint);
WriteBuffer(Dummy, SizeOf(Dummy));
WriteBuffer(PWideChar(FHint)^, 2 * Dummy);
WriteBuffer(FWidth, SizeOf(FWidth));
WriteBuffer(FMinWidth, SizeOf(FMinWidth));
WriteBuffer(FMaxWidth, SizeOf(FMaxWidth));
Dummy := Ord(FStyle);
WriteBuffer(Dummy, SizeOf(Dummy));
Dummy := FImageIndex;
WriteBuffer(Dummy, SizeOf(Dummy));
Dummy := Ord(FLayout);
WriteBuffer(Dummy, SizeOf(Dummy));
WriteBuffer(FMargin, SizeOf(FMargin));
WriteBuffer(FSpacing, SizeOf(FSpacing));
Dummy := Ord(FBiDiMode);
WriteBuffer(Dummy, SizeOf(Dummy));
Dummy := Word(FOptions);
WriteBuffer(Dummy, SizeOf(Dummy));

// parts introduced with stream version 1
WriteBuffer(FTag, SizeOf(Dummy));
Dummy := Cardinal(FAlignment);
WriteBuffer(Dummy, SizeOf(Dummy));

// parts introduced with stream version 2
Dummy := Integer(FColor);
WriteBuffer(Dummy, SizeOf(Dummy));

// parts introduced with stream version 6
if coUseCaptionAlignment in FOptions then
begin
Dummy := Cardinal(FCaptionAlignment);
WriteBuffer(Dummy, SizeOf(Dummy));
end;
end;
end;

iceget 26. Jan 2015 22:12

AW: Datenbankformat herausfinden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hab die gesamte Datei diesem Post angehängt (7Zip komprimiert). Hilft Dir das weiter?

DANKE!

PS ist es möglich diesen Stream auch unter C# 1:1 abzubilden?

Uwe Raabe 26. Jan 2015 23:29

AW: Datenbankformat herausfinden
 
Zitat:

Zitat von iceget (Beitrag 1287881)
Hab die gesamte Datei diesem Post angehängt (7Zip komprimiert). Hilft Dir das weiter?

Wieso mir? Ich habe dir doch erklärt, wo dieses Format geschrieben wird und genau diese Methode findet man auch in der von dir angehängten Datei. Du musst schon selber analysieren, wie dort die einzeln Daten in die Datei geschrieben werden. Dann müsstest du auch in der Lage sein, diese in C# auszulesen. Das mag nicht unbedingt einfach sein, aber das VT-Streamformat ist wohl auch nicht als Austauschformat zwischen Delphi und C# gedacht.

Bernhard Geyer 27. Jan 2015 07:30

AW: Datenbankformat herausfinden
 
Tree und Austauschformat. Da würde sich ja wohl XML als Austauschformat anbieten. Sollte mit Delphi kein unüberwindbares hinternis sein und einfach zu realisieren als ein binäres Format neu in C# zu immportieren.

iceget 27. Jan 2015 11:21

AW: Datenbankformat herausfinden
 
Danke für die Info!

Wenn ich das einem Entwickler in Auftrag geben würde, wie viel müsste ich zirka rechnen was mir diese Konvertierung kosten würde?
Wer macht so etwas? Wen könnte ich Fragen?

Ich würde also nur eine C# Funktion benötigen die dieses Datenbankfile handlen kann (erstellen, öffnen, bearbeiten).

Vielen Dank

1122tra 28. Jan 2015 12:37

AW: Datenbankformat herausfinden
 
Zitat:

Zitat von iceget (Beitrag 1287926)
Danke für die Info!
Wenn ich das einem Entwickler in Auftrag geben würde, wie viel müsste ich zirka rechnen was mir diese Konvertierung kosten würde?
Wer macht so etwas? Wen könnte ich Fragen?

2000 € + Märchensteuer ....

Gruß 1122

iceget 4. Feb 2015 10:48

AW: Datenbankformat herausfinden
 
Hey,

danke.

Hättest Du auch eine Kontaktemail für mich?

Danke

Sir Rufo 4. Feb 2015 11:53

AW: Datenbankformat herausfinden
 
Zitat:

Zitat von iceget (Beitrag 1288797)
Hey,

danke.

Hättest Du auch eine Kontaktemail für mich?

Danke

Schreib ihm eine PN, die wird idR direkt an seine email-Adresse geschickt


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:09 Uhr.

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