Datenbank-Zeilen drucken

Für Fragen von Einsteigern und Programmieranfängern...
purzel1994
Beiträge: 18
Registriert: Do 11. Feb 2016, 17:13

Datenbank-Zeilen drucken

Beitrag von purzel1994 »

Hallo,
erstmal ein servus an das Forum, ich bin neu hier und versuche gerade mein erstes, etwas anspruchsvolleres Programm zu schreiben.

Ich möchte mir ein Programm basteln, mit dem ich Bestellungen in eine Datenbank hinterlegen kann.
Dazu habe ich mir eine Dbase Datenbank angelegt und mit einem DBGrid verknüpft.

Anhand einer Kunden ID (Auswahl per LookUpCombobox) möchte ich später mir alle Zeilen die mit dieser ID anfangen ausdrucken (Mit dem Bild im Anhang vielleicht besser zu verstehen).
Kommen später wieder Bestellungen von diesem Kunden dazu, möchte ich aber die bereits gedruckten Spalten nicht erneut Drucken. Sie sollen allerdings auch nicht aus der Datenbank gelöscht werden...

Wie macht man sowas am besten? Bzw. nach was sollte ich da googlen?
Finde leider nichts zu diesem Thema.

Sollten wichtige Informationen fehlen, bitte ich das zu entschuldigen.

Gruß,

Purzel
Dateianhänge
Beispiel.PNG

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6780
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Datenbank-Zeilen drucken

Beitrag von af0815 »

Mach dir ein Statusfeld in der Datenbank, dann kannst du dort auch hinterlegen ob das schon gedruckt wurde. Eventuell das ganze Bitkodieren, wenn du mehr Stati benötigst.

Zum Drucken selbst, suche mal nach LazReports in Lazarus. Eventuell in den Menüpunkt Tools/Example Projects (in einem englischen Lazarus) schauen und dort dann lazreports eingeben und die Beispiele mal ansehen.

Andreas
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

purzel1994
Beiträge: 18
Registriert: Do 11. Feb 2016, 17:13

Re: Datenbank-Zeilen drucken

Beitrag von purzel1994 »

Hallo,
das mit Lazreport funktioniert schon prima. Habe mir ein Protokoll erstellt und kann jetzt auch alle Datenbankeinträge wie gewünscht drucken.
Ich möchte aber mit einer DBLookUpCombobox nur eine bestimmte Kunden ID ausdrucken. In meiner DBLookUpCombobox werden aber alle ID´s angezeigt, auch doppelte.

Wie kann ich den jetzt doppelte Einträge aus der DBLookUpCombobox entfernen und das Lazreport-Protokoll nur mit den selektierten Zeilen mit der entsprechenden Kunden ID "füttern"?

Danke


EDIT: Das Filtern der Datenbank würde mich brennend interessieren :) :twisted:

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6780
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Datenbank-Zeilen drucken

Beitrag von af0815 »

Bei DBase habe ich k.A wie man doppelte Einträge unterdrückt. Laut Doku geht mit einem Index und ixUnique. Siehe http://wiki.freepascal.org/Lazarus_Tdbf ... ndex_Files (Dort aber nicht direkt erwähnt). Wenn funktioniert das aber nur bein Einfügen der Daten, nicht später.

Nur mit den selektierten Einträgen füttern, kannst du über die Filterfunktion von TDBF. Siehe hier http://wiki.freepascal.org/Lazarus_Tdbf ... al#Filters

Bei SQL Datenbanken arbeit man mit distinct, dann werden doppelte Einträge unterdrückt. Mit where kann filtern. BTW. Sqllite ist ein guter Ersatz für DBase. Man hat alle Möglichkeiten von SQL, benötigt nur ein zusätzliche Dll.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

purzel1994
Beiträge: 18
Registriert: Do 11. Feb 2016, 17:13

Re: Datenbank-Zeilen drucken

Beitrag von purzel1994 »

ich bin mittlerweile auf SQLite3 umgestiegen. Hab gelesen das es oft Probleme mit DBase geben soll.
Wie funktioniert das Filtern mit WHERE?
Wie initialisiere ich das alles?

Danke!

purzel1994
Beiträge: 18
Registriert: Do 11. Feb 2016, 17:13

Re: Datenbank-Zeilen drucken

Beitrag von purzel1994 »

Code: Alles auswählen

 
select * from sqProtokoll where ID = Edit1.Text; 
 
Die Initialisierung fehlt mir. Er kann mir dem select nichts anfangen

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Datenbank-Zeilen drucken

Beitrag von Michl »

Man sollte möglichst mit Parametern arbeiten, siehe http://wiki.freepascal.org/SqlDBHowto/d ... er_Abfrage

z.B.:

Code: Alles auswählen

    SQLQuery1.SQL.Text := 'SELECT * FROM sqProtokoll WHERE id = :aid';
    SQLQuery1.ParamByName('aid').AsInteger := IntToStr(Edit1.Text);
    SQLQuery1.Open;

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

purzel1994
Beiträge: 18
Registriert: Do 11. Feb 2016, 17:13

Re: Datenbank-Zeilen drucken

Beitrag von purzel1994 »

Also ich hab´s jetzt mal so versucht, da ich keine SQLQuery verwende.

Code: Alles auswählen

 
procedure TForm6.Button1click(Sender: TObject);
begin
  Form5.TSqlite3Dataset1.Filter := 'ID =' + QuotedStr(DBLookupcomboBox1.Text);
  Form5.TSqlite3Dataset1.Filtered := true;
end;
 


Leider passiert aber nichts...Warum?

wp_xyz
Beiträge: 5153
Registriert: Fr 8. Apr 2011, 09:01

Re: Datenbank-Zeilen drucken

Beitrag von wp_xyz »

Nach dem Screenshot oben ist das Feld ID eine Zahl. Versuch's mal ohne QuotedStr.

purzel1994
Beiträge: 18
Registriert: Do 11. Feb 2016, 17:13

Re: Datenbank-Zeilen drucken

Beitrag von purzel1994 »

Gleicher Effekt. Nämlich keiner :(

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Datenbank-Zeilen drucken

Beitrag von Michl »

purzel1994 hat geschrieben:Also ich hab´s jetzt mal so versucht, da ich keine SQLQuery verwende.
Warum nicht?

Ich persönlich kenne mich mit Sqlite3DS nicht aus. In ein paar kleineren Projekten habe ich SQLDBLaz im Einsatz, in zwei größeren nutze ich ZEOS.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

wp_xyz
Beiträge: 5153
Registriert: Fr 8. Apr 2011, 09:01

Re: Datenbank-Zeilen drucken

Beitrag von wp_xyz »

Ist der/die/das Dataset offen?

Übrigens: DataSets direkt auf einem anderen Formular können dir bald graue Haare wachsen lassen, weil die Unit-Struktur des Projekts schnell unübersichtlich wird und zu Zirkulärreferenzen führen kann. Günstiger ist es, allgemein verwendete Datasets auf einem zentralen TDataModule zu halten, auf das alle Formulare zugreifen, die die Datasets brauchen.

purzel1994
Beiträge: 18
Registriert: Do 11. Feb 2016, 17:13

Re: Datenbank-Zeilen drucken

Beitrag von purzel1994 »

Ich verstehe nicht was du mit "offen" meinst. Aktiv ist es, die Daten werden auf meinem DBGrid auch angezeigt, nur eben nicht gefiltert....

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6780
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Datenbank-Zeilen drucken

Beitrag von af0815 »

Kannst mal eine Query verwenden, den die sind für die selektion der Daten da. Die Query ist spezialisiert, die Select, insert, delete und update Statements effizient zu verarbeiten.

Alternativ kannst du mal ein Minimalbeispiel (nur Source) zusammenstellen, an dem man dein Problem besser sieht und auch nachvollziehen kann.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

purzel1994
Beiträge: 18
Registriert: Do 11. Feb 2016, 17:13

Re: Datenbank-Zeilen drucken

Beitrag von purzel1994 »

Muss ich vielleicht noch ein refresh vom DBGrid machen?

Mit SQLQuery passiert auch nichts....

Antworten