Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datenbankfelder addieren (https://www.delphipraxis.net/144304-datenbankfelder-addieren.html)

hoika 28. Dez 2009 15:28

Re: Datenbankfelder addieren
 
Hallo,

ist ja schon ein guter Anfang.

Mach mal bitte die Tabellen-Name fett (Namen markieren und oben links das B)

Leistungstabelle

Nummer(autoinc) OK

Datum wozu das denn ???

MasterId Integer -> RefKey auf Master.Id, damit ist das Feld Datum unnötig

Lv-Nummer 1-14 ???, also die OrderNo, OK
Bezeichnung
Einheit
Menge


Zitat:

Combobox deshalb, wenn der Polier das erste mal schreibt wird der Eintrag in einer
Stringlist gespeicher und steht beim nächtsten mal zur Auswahl.
Der Polier wird sich freuen, dass er das nicht immer eintippen muss.

Aber:
Wazu speichern
ein

SQL-Code:
Select Distinct(Leistungstabelle.Bezeichnung)
beim Start des Forms und laden in eine StringList ist besser.
Die Daten sind dann nicht doppelt (DB, externe Datei).


Wo ist jetzt aber das Problem ?
Das Eintragen in die DB würde ich per Query selber zusammenbauen.
Das macht dann den Umstieg auf eine richtige DB (das kommt noch ... ;) ) einfacher.

Die Komponente ist dann hier eine einfache TComboBox.


Zu der Abfrage
Zitat:

Summe Baustoffe und Summe leistung1, Summe Leistung2 usw pro Baustelle.
Du bekommst mit deinem Ansatz Baustelle = Verzeichnis (DB)
eh nur die Summe für genau eine Baustelle hin, etwa so

SQL-Code:
Select
  Sum(Leistungstabelle.Menge)
From
  Leistungstabelle
Group By
  Leistungstabelle.Bezeichnung

Heiko

verkouter 7. Jan 2010 17:57

Re: Datenbankfelder addieren
 
Liste der Anhänge anzeigen (Anzahl: 2)
Erst einmal, ein gesundes neues Jahr.

Ich muss gestehen,ich habe noch nie mit Query und sql gearbeitet, aber mit den Tipps mein
eigendliches Problem leicht lösen können.Ich habe allerdings keine Ahnung wie ich mit Query
die 14 Comboboxen füllen soll.Meine Formularseite stellt ein Tag im Bautagebuch dar, der
Polier blättert mit Dbnavigator durch dass Bautagebuch.

hoika 8. Jan 2010 07:44

Re: Datenbankfelder addieren
 
Hallo,

du versteifst dich auf die Zahl 14.
Denke mal nach oben offen.

Mit meinem Ansatz (#21) kannst du so viele Leistungen anlegen/zuordnen,
wie du willst.

Die Anzeige der Leistungen eines Tages erfolgt am einfachsten
mit einer Query und einem DBGrid (oder mit einem normalen StringGrid).
Das Zuordnen ist jetzt aber aufwendiger.
Ich würde da gar kein TDBX-Dingens mehr nehmen, sondern 2 ListViews:

Links alle möglichen Leistungen, rechts die ausgewählten,
in der Mitte Pfeilbuttons zum Rüberschieben.

Wie sieht denn deine jetzige DB-Struktur aus ?.


Heiko

verkouter 8. Jan 2010 08:21

Re: Datenbankfelder addieren
 
Die Datenbankstrucktur ist genau so gebleiben.Auf einen Tabsheet habe ich ein Query den
ich mit Hilfe Deines Tipps gefüllt habe.Das Datum steht deshalb in der Tabelle, weil die
Leistungstabelle nach einem Tatumsbereich gefiltert wird.Die 14 Felder resultiern aus dem
orginal Papierbautagebuch.

Delphi-Quellcode:
with Query.SQL do
begin
Clear;
Add('SELECT Nummer,Bezeichnung,Sum(Menge),Einheit');
Add('FROM Leistungen.DB');
Add('WHERE (Datum >= :date1) and (Datum <= :date2)');
Add('group by Nummer,bezeichnung,Einheit');
end;
Query.ParamByName('date1').Asdate := strtodate(filter1.Text);
Query.ParamByName('date2').Asdate := strtodate(filter2.Text);
Query.Open;
Ich kann kein Listview mit Leistungen füllen, weil ich die Leistungen vorher noch garnicht kenne.

hoika 8. Jan 2010 09:28

Re: Datenbankfelder addieren
 
Hallo,

Zitat:

Ich kann kein Listview mit Leistungen füllen, weil ich die Leistungen vorher noch garnicht kenne.
Stimmt, das war freier Text.

Und wo ist jetzt das Problem ?



Heiko

verkouter 8. Jan 2010 19:54

Re: Datenbankfelder addieren
 
Das Problem ist das ich in der Eingabemaske nicht mit DBgrid arbeiten möchte,sondern mit
dbcombobox oder combobox.Und dann die Datensätze eines Tages aus der Leistungs.db den
Comboboxen zuweisen muss.Wie gesagt habe ich noch nie mit Query gearbeitet.

hoika 9. Jan 2010 08:03

Re: Datenbankfelder addieren
 
Hallo,

dann nimm eine normale ComboBox
und TTable zum Speichern.

Mit einer Query sind halt bestimmte Lesefunktionen (Select)
viele einfacher.



Heiko

verkouter 9. Jan 2010 14:28

Re: Datenbankfelder addieren
 
Ich hatte echt keinen Plan wie ich die Zuordnung zu den einzelnen Comboboxen hinbekommen soll.
Bin jetzt wieder bei einer großen Tabelle und habe mit Query aus den 14 Spalten eine Tabelle gemacht.

Delphi-Quellcode:
with Query1.SQL do
begin
Clear;
Add('SELECT lvn1,be1,ein1,me1');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn2,be2,ein2,me2');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn3,be3,ein3,me3');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn4,be4,ein4,me4');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn5,be5,ein5,me5');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn6,be6,ein6,me6');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn7,be7,ein7,me7');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn8,be8,ein8,me8');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn9,be9,ein9,me9');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn10,be10,ein10,me10');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn11,be11,ein11,me11');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn12,be12,ein12,me12');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn13,be13,ein13,me13');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn14,be14,ein14,me14');
Add('FROM "' + Datei + '" ');
Um jetzt Sum(Menge) und Group by zu realisieren, muss ich noch ein Query erstellen???

hoika 9. Jan 2010 15:16

Re: Datenbankfelder addieren
 
Hallo,

ich hatte ja gesagt, dass du die Struktur umstellen sollst.
Kommt ketzt noch ne le15 dazu, fängst du an verschiedenen Stellen an,
rumzubauen.
Auch wenn der Kunde sagt, wir haben nur 14, kann das morgen ganz anders sein.

So wie du es jetzt hast, ginge viell. ein SubSelect
(war das Paradox ?, dann ist das extrem lahm, wenn es überhaupt geht).

Oder du lädst das alles lokal in eigene Listen und rechnest das selber aus.


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:58 Uhr.
Seite 3 von 3     123   

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 by Thomas Breitkreuz