Denkfehler???

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Benutzeravatar
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???

Beitrag von m.fuchs »

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

pluto
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???

Beitrag von pluto »

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

Benutzeravatar
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???

Beitrag von Maik81SE »

warum ich mit dyn array und record arbeite?

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? :shock:
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'
Debian 12 (L 3.0.0.3 FPC 3.2.2);
windows 10 (L 3.99.0.0 FPC 3.2.0)

Benutzeravatar
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???

Beitrag von Maik81SE »

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 :D

Code: Alles auswählen

label.caption:= 'gnublin.no-ip.info'
Debian 12 (L 3.0.0.3 FPC 3.2.2);
windows 10 (L 3.99.0.0 FPC 3.2.0)

pluto
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???

Beitrag von pluto »

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

Benutzeravatar
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???

Beitrag von Maik81SE »

:mrgreen: nicht so in etwa.

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'
Debian 12 (L 3.0.0.3 FPC 3.2.2);
windows 10 (L 3.99.0.0 FPC 3.2.0)

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Denkfehler???

Beitrag von theo »

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?

Benutzeravatar
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???

Beitrag von Maik81SE »

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'
Debian 12 (L 3.0.0.3 FPC 3.2.2);
windows 10 (L 3.99.0.0 FPC 3.2.0)

pluto
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???

Beitrag von pluto »

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.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

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Denkfehler???

Beitrag von theo »

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

Benutzeravatar
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???

Beitrag von Maik81SE »

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.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.


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'
Debian 12 (L 3.0.0.3 FPC 3.2.2);
windows 10 (L 3.99.0.0 FPC 3.2.0)

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: Denkfehler???

Beitrag von hde »

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 ??

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Denkfehler???

Beitrag von theo »

Schließe mich hde an. Eindeutig ein Fall für SQL.

pluto
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???

Beitrag von pluto »

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...
MFG
Michael Springwald

Benutzeravatar
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???

Beitrag von Maik81SE »

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'
Debian 12 (L 3.0.0.3 FPC 3.2.2);
windows 10 (L 3.99.0.0 FPC 3.2.0)

Antworten