Denkfehler???
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2640
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Denkfehler???
Warum denn mit Records herumfummeln und irgendwelche Pointer reinwerfen? Eine saubere Klasse erstellen und eine Spezialisierung von TFPGObjectList für diese Klasse machen und alles wird gut.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
-
- Lazarusforum e. V.
- Beiträge: 7178
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Denkfehler???
Warum denn mit Records herumfummeln und irgendwelche Pointer reinwerfen? Eine saubere Klasse erstellen und eine Spezialisierung von TFPGObjectList für diese Klasse machen und alles wird gut.
Es geht noch einfacher: Einfach eine neue Klasse erstellen mit den gewünschten Daten Feldern und diese dann in die TObjectList einfügen.
Ich dachte halt nur, an seine Bisherige Vorgehensweise, wäre eine TList bestimmt Sinnvoller. Ohne größere Änderungen im Code.
MFG
Michael Springwald
Michael Springwald
- Maik81SE
- Beiträge: 308
- Registriert: Fr 30. Sep 2011, 14:07
- OS, Lazarus, FPC: Debian 12 (L 3.0.0.3 FPC 3.2.2); Windows 10 (L 3.99.0.0 FPC 3.2.0)
- CPU-Target: x86-64; arm; avr
- Wohnort: Lübeck
- Kontaktdaten:
Re: Denkfehler???
warum ich mit dyn array und record arbeite?
ich weiß.
sql oder dbase wären besser, nur erst mal ein "sinnvolles" buchwerk zu findes, was top ist...
end;
finally
end;
end;
end.[/code]
ich weiß.
sql oder dbase wären besser, nur erst mal ein "sinnvolles" buchwerk zu findes, was top ist...
Ob ich jetzt +1 oder +2 schreibe, das Pluto spielt keine rolle...
Ich könnte es auch gleich mit int64 voll aureitzen, aber muß das sein?
Gerade bei 1, 2, 3, ..., 7 ähnlichen Datensätzen?
Ich glaube nun killt ihr mich alle freiwillig inna luft.
Aber nein. ich kann euch beruhigen. Ich lade diese NICHT nacheinander.
Nur noch für index und zum schreiben.
Du meinst analog wie bei C++ in der Konsolen mit
?
Dann habe ich auch schon die ersten 3 Formulare aufgeräumt und schaut nun alles was onShow und OnCreate angeht nach dem selben Muster aus.
Ob es für euch übersichticher ist sei jetzt mal dahingestellt.
Ich finde für mich schon.
Code: Alles auswählen
unit uData;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, IniFiles;
Type
TArtikel = Record
index, IndexfBG : Int64;
Bezeichnung,
Beschaffung : String;
Klassifizierung : String[11];
Version : String[7];
end;
TArt = class
fArtikel : Array of TArtikel;
fPath, fFilename : String;
index : Int64;
private
public
constructor Create;
destructor Done;
procedure GetArtikel;
procedure SetArtikel;
end;
{ TArtikel }
constructor TArt.Create;
begin
inherited;
fFilename := Format('%s', ['Artikel.dbs']);
SetLength(fArtikel, 1);
GetArtikel;
end;
destructor TArt.Done;
begin
inherited;
end;
procedure TArt.GetArtikel;
var Temp : TStringlist;
s : String;
a : int64;
Art : TIniFile;
begin
if FileExists(fPath + fFilename) then begin
Art:= TIniFile.Create(fFilename);
try
Temp:= TStringlist.Create;
try
Art.ReadSections(Temp);
SetLength(fArtikel, Temp.Count);
for a:= 0 to Temp.Count - 1 do begin
s:= Format('[%s]', ['Artikel' + IntToStr(a)]);
if (Art.Readstring(s, 'Bezeichnung', '') <> '') then begin
fArtikel[a].index := Art.ReadInteger(s, 'Lfd-Nr.:', 0);
fArtikel[a].Bezeichnung := Art.ReadString(s, 'Bezeichnung', '');
fArtikel[a].Klassifizierung := Art.ReadString(s, 'Klassifizierung', '');
fArtikel[a].Version := Art.ReadString(s, 'Version', '');
fArtikel[a].Beschaffung := Art.ReadString(s, 'Beschaffungsliste', '');
inc(Index);
end;
end;
SetLength(fArtikel, Index + 1);
finally
Temp.Free;
end;
finally
end;
end;
inc(index);
end;
procedure TArt.SetArtikel;
var s : String;
a : Int64;
begin
if FileExists(fFilename) then DeleteFile (fFilename);
with TIniFile.Create(fFilename) do try
for a:= Low(fArtikel) to high(fArtikel) do begin
s:= Format('[%s]', ['Artikel' + IntToStr(a)]);
WriteInteger(s, 'Lfd-Nr.:', a);
WriteString(s, 'Bezeichnung', fArtikel[a].Bezeichnung);
WriteString(s, 'Klassifizierung', fArtikel[a].Klassifizierung);
WriteString(s, 'Version', fArtikel[a].Version);
WriteString(s, 'Beschaffungsliste', fArtikel[a].Beschaffung);
end;
finally
end;
end;
end.
ich weiß.
sql oder dbase wären besser, nur erst mal ein "sinnvolles" buchwerk zu findes, was top ist...
end;
finally
end;
end;
end.[/code]
ich weiß.
sql oder dbase wären besser, nur erst mal ein "sinnvolles" buchwerk zu findes, was top ist...
'pluto hat geschrieben:Was mir noch aufgefallen ist:Code: Alles auswählen
SetLength(Form2.fArtikel.fArtikel, High(Form2.fArtikel.fArtikel) + 2);
Warum +2? Sollte nicht ein +1 reichen?
Mit +1 und -1 komme ich immer durcheinander.... selbst nach 20 Jahren Programmier Erfahrung.
Wenn du Klassen nicht magst, könntest du auch mit einem Record arbeiten und mit TList.
Ob ich jetzt +1 oder +2 schreibe, das Pluto spielt keine rolle...
Ich könnte es auch gleich mit int64 voll aureitzen, aber muß das sein?
Gerade bei 1, 2, 3, ..., 7 ähnlichen Datensätzen?
Ich glaube nun killt ihr mich alle freiwillig inna luft.
Aber nein. ich kann euch beruhigen. Ich lade diese NICHT nacheinander.
Nur noch für index und zum schreiben.
pluto hat geschrieben:du arbeitest dann mit writeln Anweisungen. Du musst das Start Programm Aktivieren.
Dann siehst du die Ausgaben.
Du meinst analog wie bei C++ in der Konsolen mit
Code: Alles auswählen
print(ausgabe, variable)
Dann habe ich auch schon die ersten 3 Formulare aufgeräumt und schaut nun alles was onShow und OnCreate angeht nach dem selben Muster aus.
Ob es für euch übersichticher ist sei jetzt mal dahingestellt.
Ich finde für mich schon.
Code: Alles auswählen
procedure TArtikelForm.FormShow(Sender: TObject);
procedure Statuszeile;
var
Search : TSearchRec;
begin
fArtikel := TArt.Create;
StatusBar1.Panels.Items[0].Text:= FArtikel.fFilename;
StatusBar1.Panels.Items[0].Width:= Canvas.TextWidth(FArtikel.fFilename) + 20;
if FindFirst(fArtikel.fFilename, faAnyFile, Search) = 0 then begin
if (Search.Size > 0) and (Search.Size < 1024) then
StatusBar1.Panels.Items[1].Text:= IntToStr(Search.Size) + ' Byte';
if (Search.Size >= 1024) and (Search.Size < 1048576) then
StatusBar1.Panels.Items[1].Text:= floatToStrF(Search.Size/1024, ffFixed, 4, 2) + ' KB';
StatusBar1.Panels.Items[1].Width:= Canvas.TextWidth(StatusBar1.Panels.Items[1].Text) + 20;
end;
if FindFirst(fArtikel.fFilename, faAnyFile, Search) <> 0 then
StatusBar1.Panels.Items[1].Text:= 'Datei noch nicht angelegt';
SysUtils.FindClose(Search);
fArtikel.Destroy;
end;
procedure Artikelindex;
var x : int64;
begin
fLiefer := TLiefer.Create;
for x := low(fLiefer.fLieferant) to high(fLiefer.fLieferant) do
_Lieferant.Items.Add(fLiefer.fLieferant[x].Firma);
fliefer.Destroy;
with ArtikelForm do begin
Height := 240;
CheckBox1.Top := 152;
Button1.Top := 184;
Button2.Top := 184;
Button3.Top := 184;
PageControl1.Height := 150;
CheckBox1.Caption := 'Beschaffungsdaten jetzt mit anlegen?';
_Lieferant.Visible := false;
Label1.Visible := false;
Bestellnummer.Visible := false;
Preis.Visible := false;
Preis.EditLabel.Caption := 'Nettopreis in €';
Bestellnummer.EditLabel.Caption := 'Bestellnummer des Lieferanten';
Label1.Caption := 'Name des Lieferanten';
end;
PageControl1.ActivePage := Basis;
end;
begin
Statuszeile;
Artikelindex;
end;
Code: Alles auswählen
label.caption:= 'gnublin.no-ip.info'
windows 10 (L 3.99.0.0 FPC 3.2.0)
- Maik81SE
- Beiträge: 308
- Registriert: Fr 30. Sep 2011, 14:07
- OS, Lazarus, FPC: Debian 12 (L 3.0.0.3 FPC 3.2.2); Windows 10 (L 3.99.0.0 FPC 3.2.0)
- CPU-Target: x86-64; arm; avr
- Wohnort: Lübeck
- Kontaktdaten:
Re: Denkfehler???
Und Pulto,
Nachdem ich mir jetzt Qusi nochmal alles ausgedruckt habe, Nun wie soll ich sagen?!
Ich arbeite seint 6 Monaten daran und Ja. ich kann mind. 40% killen. also Große Änderung lässt sich hier jetzt auf jedefall nicht mehr verhindern, selbst wenn ich es wollen würde. es geht nicht
Nachdem ich mir jetzt Qusi nochmal alles ausgedruckt habe, Nun wie soll ich sagen?!
Ich arbeite seint 6 Monaten daran und Ja. ich kann mind. 40% killen. also Große Änderung lässt sich hier jetzt auf jedefall nicht mehr verhindern, selbst wenn ich es wollen würde. es geht nicht
Code: Alles auswählen
label.caption:= 'gnublin.no-ip.info'
windows 10 (L 3.99.0.0 FPC 3.2.0)
-
- Lazarusforum e. V.
- Beiträge: 7178
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Denkfehler???
Du meinst analog wie bei C++ in der Konsolen mit
Ja, so in etwa nur das die Anweisung statt printf writeln heißt.
MFG
Michael Springwald
Michael Springwald
- Maik81SE
- Beiträge: 308
- Registriert: Fr 30. Sep 2011, 14:07
- OS, Lazarus, FPC: Debian 12 (L 3.0.0.3 FPC 3.2.2); Windows 10 (L 3.99.0.0 FPC 3.2.0)
- CPU-Target: x86-64; arm; avr
- Wohnort: Lübeck
- Kontaktdaten:
Re: Denkfehler???
nicht so in etwa.
Habs gerade ausgefunden und ich sag's mal so.
der Fehler ist da, wo ich Ihn als letztes vermutet hätte...
Hatte selber mit einer meiner eigenen Klassen gerechnet, aber NEIN.
Es ist ein SCH... Anfängerfehler...
Aber ist auch schon gelöst.
Erst mal Feierabend und |----| gehen ^^
Habs gerade ausgefunden und ich sag's mal so.
Code: Alles auswählen
repeat
if _Lieferant.Text = _lieferant.Items[Combo] then begin
y:=True;
MessageDLG('"'+_Lieferant.Text+'"'+#13+'gefunden', mtInformation, [mbOK], 0);
end;
dec(Combo);
until y or (Combo = 0); // <--- ungünstig wenn Combo "-1" liefert am anfang
der Fehler ist da, wo ich Ihn als letztes vermutet hätte...
Hatte selber mit einer meiner eigenen Klassen gerechnet, aber NEIN.
Es ist ein SCH... Anfängerfehler...
Aber ist auch schon gelöst.
Erst mal Feierabend und |----| gehen ^^
Code: Alles auswählen
label.caption:= 'gnublin.no-ip.info'
windows 10 (L 3.99.0.0 FPC 3.2.0)
Re: Denkfehler???
Maik81SE hat geschrieben:warum ich mit dyn array und record arbeite?
Und warum jetzt genau? Steht hier irgendwo die Antwort darauf?
Da du das Array of Record nicht zum speichern verwendest, sondern Inifiles benutzt, kann ich keinen Grund erkennen.
Wie siehst du das?
- Maik81SE
- Beiträge: 308
- Registriert: Fr 30. Sep 2011, 14:07
- OS, Lazarus, FPC: Debian 12 (L 3.0.0.3 FPC 3.2.2); Windows 10 (L 3.99.0.0 FPC 3.2.0)
- CPU-Target: x86-64; arm; avr
- Wohnort: Lübeck
- Kontaktdaten:
Re: Denkfehler???
theo hat geschrieben:Maik81SE hat geschrieben:warum ich mit dyn array und record arbeite?
Und warum jetzt genau? Steht hier irgendwo die Antwort darauf?
Da du das Array of Record nicht zum speichern verwendest, sondern Inifiles benutzt, kann ich keinen Grund erkennen.
Wie siehst du das?
Mag sein, das es einen einfacheren weg gibt eine Datenmenge wie diese
Code: Alles auswählen
[[Artikel1]]
Lfd-Nr.:=1
Bezeichnung=LED 5mm 5V GN
Klassifizierung=00 00 00 00
Version=ea00.01
Beschaffungsliste=Reichelt Elektronik~LED 5MM 5V GN~0.15125
[[Artikel2]]
Lfd-Nr.:=2
Bezeichnung=LED 5mm 5V RT
Klassifizierung=00 00 00 00
Version=ea00.01
Beschaffungsliste=Reichelt elektronik~LED 5MM 5V RT~0.15126
[[Artikel3]]
Lfd-Nr.:=3
Bezeichnung=USB-Einbaubuchse; Serie A; gew.;
Klassifizierung=00 00 00 00
Version=ea00.01
Beschaffungsliste=Reichelt elektronik~USB AW~0.15130
[[Artikel4]]
Lfd-Nr.:=4
Bezeichnung=ATMega AVR-RISC-Controller; DIL - 40
Klassifizierung=00 00 00 00
Version=ea00.01
Beschaffungsliste=Reichelt elektronik~ATMEGA 16-16 DIP~2.1510
[[Artikel5]]
Lfd-Nr.:=5
Bezeichnung=Z-Diode; 1W3; 3V3
Klassifizierung=00 00 00 00
Version=ea00.01
Beschaffungsliste=Reichelt elektronik~ZD 3,3~0.05042
[[Artikel6]]
Lfd-Nr.:=6
Bezeichnung=Kohle-Widerstand; 1/4W; 5%; 68R
Klassifizierung=00 00 00 00
Version=ea00.01
Beschaffungsliste=Reichelt elektronik~1/4W 68~0.08620
[[Artikel7]]
Lfd-Nr.:=7
Bezeichnung=Kohle-Widerstand; 1/4W; 5%; 2k2
Klassifizierung=00 00 00 00
Version=ea00.01
Beschaffungsliste=Reichelt elektronik~1/4W 2,2K~0.086204
[[Artikel8]]
Lfd-Nr.:=8
Bezeichnung=Kohle-Widerstand; 1/4W; 5%; 10K
Klassifizierung=00 00 00 00
Version=ea00.01
Beschaffungsliste=Reichelt elektronik~1/4W 10K~0.08620
[[Artikel9]]
Lfd-Nr.:=9
Bezeichnung=Vielschicht-Keramikkondensator; 100N; 10%
Klassifizierung=00 00 00 00
Version=ea00.01
Beschaffungsliste=Reichelt elektronik~X7R-2,5 100N~0.03361
[[Artikel10]]
Lfd-Nr.:=10
Bezeichnung=Stanartquarz; Grundton 8MHz
Klassifizierung=00 00 00 00
Version=ea00.01
Beschaffungsliste=Reichelt eletronik~8,0000-HC18~0.15130
[[Artikel11]]
Lfd-Nr.:=11
Bezeichnung=USB-Einbaukupplung; Typ A, gew. PCB, SMD
Klassifizierung=00 00 00 00
Version=ea00.01
Beschaffungsliste=Reichelt eletronik~LUM 2410-06~0.48739
bei int64 zu verarbeiten.
Aber zugegeben bin ich noch nicht dahinter gestiegen und somit ist das im Moment für mich die einfachste Art.
Über TStringList habe ich auch nachgedacht nur da von z.B. 6 Eingabefelder (Artikeldatensatz) NUR 3 Pflicht sind habe ich dies wieder verworfen.
TIni erlaubt es mit hingegen OHNE großen Aufwand, gezieht zu suchen, was mit bei einer TStringLiat mit folgendem Beispiel nicht möglich wäre.
Code: Alles auswählen
LED 5mm 5V GN
00 00 00 00
ea00.01
LeD 5mm 5V RT
00 00 00 00
ea00.01
Reichelt elektronik~LED 5MM 5V RT~0.15126
USB-Einbaubuchse; Serie A; gew.;
00 00 00 00
ea00.01
ATMega AVR-RISC-Controller; DIL - 40
00 00 00 00
ea00.01
Reichelt elektronik~ATMEGA 16-16 DIP~2.1510
Z-Diode; 1W3; 3V3
00 00 00 00
ea00.01
Reichelt elektronik~ZD 3,3~0.05042
Kohle-Widerstand; 1/4W; 5%; 68R
00 00 00 00
ea00.01
Kohle-Widerstand; 1/4W; 5%; 2k2
00 00 00 00
ea00.01
Reichelt elektronik~1/4W 2,2K~0.086204
Kohle-Widerstand; 1/4W; 5%; 10K
00 00 00 00
ea00.01
Reichelt elektronik~1/4W 10K~0.08620
Vielschicht-Keramikkondensator; 100N; 10%
00 00 00 00
ea00.01
Stanartquarz; Grundton 8MHz
00 00 00 00
ea00.01
USB-Einbaukupplung; Typ A, gew. PCB, SMD
00 00 00 00
ea00.01
Reichelt eletronik~LUM 2410-06~0.48739
Gut. Nicht Möglich ist wohl nicht der richtige ausdruck, aber würde ich sagen, das ich da mehr suchen müßte da z.B. der Zähler zw. zwei Artikelnahmen mal 3 und mal 4 Zeilen beträgt, was an dem beispiel ja noch recht übersichtlich sein mag, Aber wenn im Späteren Verlauf 5 bis 30 Zeilen dazwischen Liegen. ProstMahlzeit.
Lasse mich aber gerne eines Besseren belehren.
Code: Alles auswählen
label.caption:= 'gnublin.no-ip.info'
windows 10 (L 3.99.0.0 FPC 3.2.0)
-
- Lazarusforum e. V.
- Beiträge: 7178
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Denkfehler???
Daraus könnte man gut eine Klasse machen:
Und in eine TObjectLIste packen. gerade wenn man nicht so viele Daten hat so bis 1000 Stück bestimmt kein Problem. Vielleicht sogar drüber.
Code: Alles auswählen
Lfd-Nr.:=10
Bezeichnung=Stanartquarz; Grundton 8MHz
Klassifizierung=00 00 00 00
Version=ea00.01
Beschaffungsliste=Reichelt eletronik~8,0000-HC18~0.15130
Code: Alles auswählen
TMyArtikel = class
public
property Name:string read fName write fName;
....
end;
Und in eine TObjectLIste packen. gerade wenn man nicht so viele Daten hat so bis 1000 Stück bestimmt kein Problem. Vielleicht sogar drüber.
MFG
Michael Springwald
Michael Springwald
Re: Denkfehler???
Maik81SE hat geschrieben:Lasse mich aber gerne eines Besseren belehren.
Es gibt sehr viele verschiedene Ansätze dafür. Ich würde wahrscheinlich SQLite oder MySQL nehmen.
Kommt halt immer auf die Gegebenheiten an.
Du hast sicher einen der aufwändigeren Ansätze gewählt.
Hier mal ein Beispiel mit XML.
Ich will nicht sagen, dass das in jedem Fall "besser" ist, aber du siehst, dass du dir die Einleserei und die Arrays und Records etc. auch total sparen könntest.
Der Einfachheit halber habe ich den Quelldatei einfach mit reingepackt in einen StringStream.
Die würde man normalerweise von Datei laden.
Soll nur eine Anregung sein, dass es auch ganz anders geht.
Code: Alles auswählen
...
uses DOM, XMLRead;
...
procedure TForm1.Button1Click(Sender: TObject);
var
Document: TXMLDocument;
SS: TStringStream;
RND, ND: TDOMNode;
i: integer;
begin
SS := TStringStream.Create('<?xml version="1.0"?>' +
'<root>' +
'<artikel>' +
'<LfdNr>1</LfdNr>' +
'<Bezeichnung>LED 5mm 5V GN</Bezeichnung>' +
'<Klassifizierung>00 00 00 00</Klassifizierung>'+
'</artikel>' +
'<artikel>' +
'<LfdNr>11</LfdNr>' +
'<Bezeichnung>USB-Einbaukupplung; Typ A, gew. PCB, SMD</Bezeichnung>' +
'<Klassifizierung>00 00 00 00</Klassifizierung>' +
'</artikel>' +
'</root>');
ReadXMLFile(Document, SS);
SS.Free;
RND := Document.FirstChild;
for i := 0 to RND.ChildNodes.Count - 1 do
begin
ND := RND.ChildNodes.Item[i];
Memo1.Lines.Add(ND.FindNode('LfdNr').FirstChild.NodeValue);
Memo1.Lines.Add(ND.FindNode('Bezeichnung').FirstChild.NodeValue);
end;
Document.Free;
end;
- Maik81SE
- Beiträge: 308
- Registriert: Fr 30. Sep 2011, 14:07
- OS, Lazarus, FPC: Debian 12 (L 3.0.0.3 FPC 3.2.2); Windows 10 (L 3.99.0.0 FPC 3.2.0)
- CPU-Target: x86-64; arm; avr
- Wohnort: Lübeck
- Kontaktdaten:
Re: Denkfehler???
pluto hat geschrieben:Daraus könnte man gut eine Klasse machen:Code: Alles auswählen
Lfd-Nr.:=10
Bezeichnung=Stanartquarz; Grundton 8MHz
Klassifizierung=00 00 00 00
Version=ea00.01
Beschaffungsliste=Reichelt eletronik~8,0000-HC18~0.15130Code: Alles auswählen
TMyArtikel = class
public
property Name:string read fName write fName;
....
end;
Und in eine TObjectLIste packen. gerade wenn man nicht so viele Daten hat so bis 1000 Stück bestimmt kein Problem. Vielleicht sogar drüber.
Pluto. 1000 Daten? Schau dir mal bitte Reichelt farnell, RS und co an. NUR den BE sektor. Dann weist, auf welche menge ich abziehle ^^
theo hat geschrieben:Maik81SE hat geschrieben:Lasse mich aber gerne eines Besseren belehren.
Es gibt sehr viele verschiedene Ansätze dafür. Ich würde wahrscheinlich SQLite oder MySQL nehmen.
Kommt halt immer auf die Gegebenheiten an.
Du hast sicher einen der aufwändigeren Ansätze gewählt.
Hier mal ein Beispiel mit XML.
Ich will nicht sagen, dass das in jedem Fall "besser" ist, aber du siehst, dass du dir die Einleserei und die Arrays und Records etc. auch total sparen könntest.
Der Einfachheit halber habe ich den Quelldatei einfach mit reingepackt in einen StringStream.
Die würde man normalerweise von Datei laden.
Soll nur eine Anregung sein, dass es auch ganz anders geht.Code: Alles auswählen
...
uses DOM, XMLRead;
...
procedure TForm1.Button1Click(Sender: TObject);
var
Document: TXMLDocument;
SS: TStringStream;
RND, ND: TDOMNode;
i: integer;
begin
SS := TStringStream.Create('<?xml version="1.0"?>' +
'<root>' +
'<artikel>' +
'<LfdNr>1</LfdNr>' +
'<Bezeichnung>LED 5mm 5V GN</Bezeichnung>' +
'<Klassifizierung>00 00 00 00</Klassifizierung>'+
'</artikel>' +
'<artikel>' +
'<LfdNr>11</LfdNr>' +
'<Bezeichnung>USB-Einbaukupplung; Typ A, gew. PCB, SMD</Bezeichnung>' +
'<Klassifizierung>00 00 00 00</Klassifizierung>' +
'</artikel>' +
'</root>');
ReadXMLFile(Document, SS);
SS.Free;
RND := Document.FirstChild;
for i := 0 to RND.ChildNodes.Count - 1 do
begin
ND := RND.ChildNodes.Item[i];
Memo1.Lines.Add(ND.FindNode('LfdNr').FirstChild.NodeValue);
Memo1.Lines.Add(ND.FindNode('Bezeichnung').FirstChild.NodeValue);
end;
Document.Free;
end;
Ich weiß nicht, ob ich das iwo schon mal erwähnt hatte, aber mit SQL hab ich im Moment mein Laster.
Bekomme meine Testdatenbank nicht mit dem Demoprogramm von Lazarus verbunden.
XML?
Daran hatte ich zugegeben noch nicht nachgedacht...
Aber dann mal eine Frage an dich, was ja auch NIE vergessen werden sollte.
wie verhält es sich da mit der Datengröße im Vergleich zu meinem Langen und komplexen Ansatz?
weniger Speicher und RAM oder mehr?
Und Extrem wichtig.
Die möglichkeit der Verlinkung in Baugruppen mit Stückliste, Auftrags verwaltung, Lieferscheine und Rechnung.
Jopp das wird ein MAMUT, was jeden Tag wächst.
Code: Alles auswählen
label.caption:= 'gnublin.no-ip.info'
windows 10 (L 3.99.0.0 FPC 3.2.0)
Re: Denkfehler???
Maik81SE hat geschrieben:Ich weiß nicht, ob ich das iwo schon mal erwähnt hatte, aber mit SQL hab ich im Moment mein Laster.
Bekomme meine Testdatenbank nicht mit dem Demoprogramm von Lazarus verbunden.
???????
Maik81SE hat geschrieben:Und Extrem wichtig.
Die möglichkeit der Verlinkung in Baugruppen mit Stückliste, Auftrags verwaltung, Lieferscheine und Rechnung.
Jopp das wird ein MAMUT, was jeden Tag wächst.
Und warum dann kein SQL ??
Re: Denkfehler???
Schließe mich hde an. Eindeutig ein Fall für SQL.
-
- Lazarusforum e. V.
- Beiträge: 7178
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Denkfehler???
Wenn du deutlich mehr als 1000 Einträge hast, weiß ich nicht warum du den Weg gewählt hast du den jetzt genommen hast.
Dann macht das ganze alles keinen Sinn.
Dann macht nicht mal XML einen Sinn. Sondern nur eine "echte" DB. Z.B. SQLite oder sowas...
Dann macht das ganze alles keinen Sinn.
Dann macht nicht mal XML einen Sinn. Sondern nur eine "echte" DB. Z.B. SQLite oder sowas...
MFG
Michael Springwald
Michael Springwald
- Maik81SE
- Beiträge: 308
- Registriert: Fr 30. Sep 2011, 14:07
- OS, Lazarus, FPC: Debian 12 (L 3.0.0.3 FPC 3.2.2); Windows 10 (L 3.99.0.0 FPC 3.2.0)
- CPU-Target: x86-64; arm; avr
- Wohnort: Lübeck
- Kontaktdaten:
Re: Denkfehler???
hde hat geschrieben:Maik81SE hat geschrieben:Ich weiß nicht, ob ich das iwo schon mal erwähnt hatte, aber mit SQL hab ich im Moment mein Laster.
Bekomme meine Testdatenbank nicht mit dem Demoprogramm von Lazarus verbunden.
???????Maik81SE hat geschrieben:Und Extrem wichtig.
Die möglichkeit der Verlinkung in Baugruppen mit Stückliste, Auftrags verwaltung, Lieferscheine und Rechnung.
Jopp das wird ein MAMUT, was jeden Tag wächst.
Und warum dann kein SQL ??
Bekomme einfach das Beispiel auf der Lazarus Demo nicht mir meiner SQL DBase verbunden.
Habe MySQL normal installiert aber iwie will die libsybdb.so nicht gefressen werden.
schon deshalb habe ich probleme diese erst mal anzubinden.
Sonst würde ich eher auf SQL umsteigen.
Finde auch nix in der repos, um diese zu laden... Nur eine libsybdb.so.5 :@
Code: Alles auswählen
label.caption:= 'gnublin.no-ip.info'
windows 10 (L 3.99.0.0 FPC 3.2.0)