Datenbank in delphi (2 kleine probs)

Diskutiere Datenbank in delphi (2 kleine probs) im Developer Network Forum im Bereich Hardware & Software Forum; HI, ich habe 2 kleine probleme mit datenbanken: 1. ich würde gern das dbedit feld 'geld' berechnen lassen aus 5 anderen dbedits von einen 2ten...
  • Datenbank in delphi (2 kleine probs) Beitrag #1
P

Plautzer

Bekanntes Mitglied
Dabei seit
03.09.2001
Beiträge
613
Reaktionspunkte
0
Ort
Sachsen
HI,
ich habe 2 kleine probleme mit datenbanken:

1. ich würde gern das dbedit feld 'geld' berechnen lassen aus 5 anderen dbedits von einen 2ten forumlar... bis jetzt hatte ich keinen erfolg... ich habe immer komplikationen mit integer und string..das geht bei mir nicht auf.

2. ich möchte das aktuelle datum immer in einen dbedit anzeigen, ich habe das auch soweit geschafft, doch leider wird es so z.B. angezeigt:
18. August., 2.003 --> ich hätte es gern so 18. August 2003

Ich habe bei meiner datenbank ein dbgrid eingesetzt, sollte ich für den datenspeicher lieber eine table oder ein query nehmen??


Ich hoffe ihr könntet mir ein bizzl nter die arme greifen, danke.

Plautzer
 
  • Datenbank in delphi (2 kleine probs) Beitrag #2
K

KaFu

Bekanntes Mitglied
Dabei seit
07.12.1999
Beiträge
755
Reaktionspunkte
0
Hi Plautzer!

Um Daten aus einem zweiten Formular übernehmen zu können, muss die zum zweiten Formular gehörende Unit in den USES der Unit des ersten Formulars stehen. Soweit so gut. Wenn Du jetzt mathematische Berechnungen machen willst, muss Du folgendermaßen vorgehen:
angenommene Namen:
Table1 ist der Name Deiner ersten Datenbank-Tabelle
Feld x ist das Geld-Feld der ersten Tabelle, welches Du berechnen willst
Table2 ist der Name Deiner zweiten Datenbank-Tabelle
Form2 ist der Name des zweiten Formulars
Felder a, b, c sind die Summanden

Table1.Edit;
Table1.Fields[x].AsFloat:=Form2.Table2.Fields[a].AsFloat+Form2.Table2.Fields.AsFloat+Form2.Table2.Fields[c].AsFloat;
Table1.Post;

DBEdit-Felder sind nicht dazu gedacht, sie direkt zu beschreiben. Sie zeigen die Werte eines DB-Feldes an und lassen es zu, dass der Wert vom User editiert wird. Automatische Änderungen werden dadurch realisiert, dass das zugehörige DB-Feld verändert wird.
Wenn du nur eine Tabelle benutzt (Table1=Table2), dann kannst Du das Geld-Feld auch automatisch berechnen lassen: In der Datenbankoberfläche die Feldeigenschaften auf "Berechnet" stellen und dann a+b+c unten eingeben.

Mit dem Datum: Schau mal unter Systemsteuerung->Ländereinstellungen wie das lange Datumsformat konfiguriert ist. Ich schätze mal, es liegt daran.

Zur dritten Frage: Ein DBGrid ist nur ein Anzeige- und Bearbeitungswerkzeug. Zum "Herumhantieren" in der DB solltest Du auf Tables zurückgreifen (kürzere Befehlszeilen: Table.Fields[0].AsString statt DBGrid.Datasource.Dataset.Fields[0].AsString). Die DBGrid-Ansicht wird bei Änderungen in der Table automatisch mit verändert.

Tschüß,
KaFu
 
  • Datenbank in delphi (2 kleine probs) Beitrag #3
P

Plautzer

Bekanntes Mitglied
Dabei seit
03.09.2001
Beiträge
613
Reaktionspunkte
0
Ort
Sachsen
Vielen dank erstmal.


es will nicht so richtig funzen:

procedure TForm1.FormCreate(Sender: TObject);
begin
Table2.Edit;
Table2.Fields[7].AsFloat:=Table2.Fields[1].AsFloat+Table2.Fields[2].AsFloat+Table2.Fields[3].AsFloat;
Table2.Post;
end;


in der form2 benutze ich trotzdem die table2.

ich wollte eigentlich das machen:
" In der Datenbankoberfläche die Feldeigenschaften auf "Berechnet" stellen und dann a+b+c unten eingeben"

Doch ich weiss net wo ich das a+b+c reinschreiben soll.

Das grid möchte ich so verwenden das jeder benutzter sein eigenes grid hat... also muss ich das mit in den oberen bereich wo ich schon die profiel der leute habe mit reinarbeiten... was mir auch nicht gelingt.

Per knopfdruck soll dann bloss das aktuelle passwort reingeschrieben werden... und eine zahl... die in table1.summe steht.. könntet ihr mir da nochmal einpaar tipps da ich noch nicht so erfahren mit delphi bin...

Danke.

Plautzer
 
  • Datenbank in delphi (2 kleine probs) Beitrag #4
K

KaFu

Bekanntes Mitglied
Dabei seit
07.12.1999
Beiträge
755
Reaktionspunkte
0
Hi!

Also das mit dem Berechneten Feld war Quatsch. Das habe ich mit einem berechneten Index verwechselt. Dass Du in FormCreate Tabellenzugriffen machen willst, ist nicht ganz korrekt:
Soweit ich mich erinnern kann, kann man frühestens in TForm.Show auf die Klassenelemente zugreifen. Bei FormCreate kamen bei mir auch andauernd Fehler. Außerdem ist es doch nicht nötig, bei jedem Start des Programms (bzw. bei jeder Erzeugung von Form1) die Tabellenberechnung durchführen zu lassen. Es sollte sich doch in der Zwischenzeit nichts an Table2.Fields[1].AsFloat, Table2.Fields[2].AsFloat und Table2.Fields[3].AsFloat geändert haben. Solche Berechnungen sind nur nötig, wenn in der Table2 die entsprechenden Felder geändert werden.

Das grid möchte ich so verwenden das jeder benutzter sein eigenes grid hat... also muss ich das mit in den oberen bereich wo ich schon die profiel der leute habe mit reinarbeiten... was mir auch nicht gelingt.

Per knopfdruck soll dann bloss das aktuelle passwort reingeschrieben werden... und eine zahl... die in table1.summe steht..

Das verstehe ich noch nicht so. Das musst Du mal ausführlicher erklären. Was soll das Ganze werden, wenn es fertig ist?

Tschüß,
KaFu
 
  • Datenbank in delphi (2 kleine probs) Beitrag #5
P

Plautzer

Bekanntes Mitglied
Dabei seit
03.09.2001
Beiträge
613
Reaktionspunkte
0
Ort
Sachsen
Ok,
um dir dir erstmal klar zu machen was ich vor habe gibts mal ne kleine beschreibung:

ich will ein prog haben wo ich alle mieter mit den persönlichen daten unterbringen kann... im grid soll imma steht wenn die miete bezahlt wurde.
Was ich zusammenrechnen will das sind die nebenkosten... die setzen sich ja imma aus warmwasser, müll... zusammen, das variert auch immer von mieter zu mieter... also müsste es dann bei jedem mieter neu errechnet werden.
Wie gesagt soll im grid bloss das datum und die bezahlte summe stehen und ob noch was offen ist.


... ich habe noch vor das prog ein bizzl auszubauen.. aba das soll erstmal das grundprogramm sein.


Was ich noch nciht hinbekomme:
1. datum in dem dbedit(hat nicht geklappt was du oben geschrieben hast)
2. verbindung von grid und den mieterdaten
3. eintragung ins grid
4. summe der nebenkosten

Ich probiere wie ein blöder komme aber nicht vorwärts!!:be: :be:

Plautzer
 
  • Datenbank in delphi (2 kleine probs) Beitrag #6
O

O Love

Bekanntes Mitglied
Dabei seit
08.04.1999
Beiträge
2.286
Reaktionspunkte
0
Gehen wir die Sachen doch Stück für Stück an. Poste doch mal bitte den Aufbau Deiner Tabelle, also Feldnamen + Datentyp + evtl. Feldlänge. Dann sehen wir z.B., wie Du Dein Datumsfeld erstellt hast. Das muß den richtigen Typ haben, dann klappt das mit der Datumsanzeige automatisch.

Weiterhin brauchst Du erst mal an Komponenten: 1 TTable (zum Zugriff auf Deine physische Tabelle) + 1 TDataSource (mit Verbindung zu Deiner Tabelle) + 1 TDBGrid (mit Verbindung zur DataSource). Mehr nicht. Mit dem Grid kannst Du dann direkt die Eingaben für die Tabelle machen.

O Love
 
  • Datenbank in delphi (2 kleine probs) Beitrag #7
P

Plautzer

Bekanntes Mitglied
Dabei seit
03.09.2001
Beiträge
613
Reaktionspunkte
0
Ort
Sachsen
hi,
ich habe 3 tabellen, ein mal die daten der mieter, dann die finanzlichen sachen der mieter und dann die für das grid.. dafür habe ich jeweils eine datasource(also 3 ingesamt)-> soll ich nur ein benutzen??

Aufbau der tabelle:
naja...
-Nr
-Name
-Datum.... bei datum habe ich den typ auf D gestellt mehr nicht(ausser dann bei editmask: !99/99/000;1;_)

soviel dazu..

Vielen Dank nochmals.

Plautzer
 
  • Datenbank in delphi (2 kleine probs) Beitrag #8
P

Plautzer

Bekanntes Mitglied
Dabei seit
03.09.2001
Beiträge
613
Reaktionspunkte
0
Ort
Sachsen
abhang:

mit dem datum das geht langsam...
das einzige und sozusagen das wichtigste ist das jeder mieter sein eigenes grid hat, bis jetzt, wenn ich auf nächsten mieter drücke, bleibt das grid so.
UNd wenn ich auf neuen mieter eintragen gehe wird in dem grid auch noch ne neue zeile eingetragen.

Was kann ich da noch machen??


Plautzer
 
  • Datenbank in delphi (2 kleine probs) Beitrag #9
O

O Love

Bekanntes Mitglied
Dabei seit
08.04.1999
Beiträge
2.286
Reaktionspunkte
0
Nimm mal probeweise die Maske beim Datumsfeld raus, dann wird das Datum im Systemformat von Windows (also meistens TT.MM.JJJJ, manchmal auch JJJJ-MM-TT) angezeigt. Überlicherweise macht man das so, weil Du ja nicht weißt, welches Format der Endnutzer bei sich eingestellt hat.

Ansonsten sehe ich den Sinn der 3. Tabelle nicht. Du verknüpfst jeweils 1 Grid mit 1 DataSource.

O Love
 
  • Datenbank in delphi (2 kleine probs) Beitrag #10
K

KaFu

Bekanntes Mitglied
Dabei seit
07.12.1999
Beiträge
755
Reaktionspunkte
0
Hi!

Aus Deinen bisherigen Äußerungen folgere ich, dass Du im DBGrid ungefähr folgendes darstellen willst:

Mietername: Klaus Meier
Mieteradresse: Karlstraße 17b
Mieterwohnort: Berndstadt
.
.
.
Miete gezahlt gesamt: 3864,86 Euro
Miete bezahlt bis: Juli 2003
Müll bezahlt gesamt: 79,97 Euro
.
.
.

Das kann aber nicht der eigentliche Zweck des DBGrid. Du willst im DBGrid die Verbindung aus zwei Tabellen darstellen. Das ist vielleicht unter Umständen mit DBGrid sogar möglich (vielleicht mit Haupt- und Nebentabllen), aber viel zu kompliziert. Gerade, da es offenbar Dein erstes größeres Projekt mit Datenbanken ist. Du solltest einfach ein Formular machen, mit dem maqn oben mittels DBNavigator den Mieter auswählt und dann in DBEdit-Feldern seine persönlichen Daten und in einem DBGrid seine finanziellen Sachen angezeigt bekommt. Jedesmal, wenn in der Mietertabelle gescrollt wird (OnScroll), filterst Du aus einer großen Finanztabelle die ihn betreffenden Daten anhand einer eindeutigen Mieteridentifikation (Name?? bzw. besser Nummer) heraus. Es werden dann im DBGrid nur die gefilterten Daten der Finanztabelle ausgegeben.
Filterung mit:
Finanztable.Filtered:=false;
Finanztable.Filter:='Mieternr = '+MieterTable.Fields[x].AsString; // in Feld x steht die Identifikation
Finanztable.Filtered:=true;

So einfach geht's. Nicht so komplizierte Sachen gleich am Anfang ausprobieren.

Tschüß,
KaFu
 
  • Datenbank in delphi (2 kleine probs) Beitrag #11
P

Plautzer

Bekanntes Mitglied
Dabei seit
03.09.2001
Beiträge
613
Reaktionspunkte
0
Ort
Sachsen
Damit ihr mal ne vorstellung hat was ich erreichen will:
desk.JPG



Der obre teil ist die daten.db; der untere (also das grid) ist die miete.db.
In Nebenkosten soll die summe der in form2 befindlichen kosten sein.

Wie ich das jetzt verstehe kann man nur alle daten der mieter ins grid eintragen und dann per filter für die spezielle person abrufen, oder??

Ich hoffe es ist ein bisschen verständlicher.

Dank euch.

Plautzer
 
  • Datenbank in delphi (2 kleine probs) Beitrag #12
K

KaFu

Bekanntes Mitglied
Dabei seit
07.12.1999
Beiträge
755
Reaktionspunkte
0
Hi!

Wie ich das jetzt verstehe kann man nur alle daten der mieter ins grid eintragen und dann per filter für die spezielle person abrufen, oder??

Man kann sich auch die Mühe machen und für jeden Mieter eine eigene Tabelle aufbauen. Das hat aber den gravierenden Nachteil, dass bei einem neuen Mieter jedesmal eine neue Tabelle angelegt werden muss. Sammle alle Mieterdaten (inkl. ihrer Bruttomieten) in einer Mietertabelle. Ordne jedem Mieter eine ID zu. In der Kassen-Tabelle sammelst Du alle Ein- und Ausgaben und ordnest ihnen Kategorien und Mieter-IDs zu. Dann kannst Du per Filterung z.Bsp. alle Mieteinnahmen von Mieter X anzeigen lassen. Die Nebenkosten kannst Du auch so eintragen: Mieter X hat in der Kategorie "Kaltwasser in Kubikmeter" 7 Einheiten verbraucht -> ergibt eine Buchung über -7,98 Euro. Das Form2 kannst Du ja als Eingabe-Formular für Nebenkosten lassen.
Dann könntest Du aus der Summe der monatlichen Nebenkosten und der Bruttomiete auch die Nettomiete berechnen. Aber willst Du das wirklich jeden Monat machen? Dann musst Du ja auch jeden Monat die Zählerstände kontrollieren.
Aber natürlich ist damit auch eine Jahresabrechnung möglich.

Was meinst Du dazu?

Tschüß,
KaFu
 
  • Datenbank in delphi (2 kleine probs) Beitrag #13
P

Plautzer

Bekanntes Mitglied
Dabei seit
03.09.2001
Beiträge
613
Reaktionspunkte
0
Ort
Sachsen
hmm,
also die Nebenkosten steht ja eigentlich pauschal fest.. es variiert bloss machmal von mieter zu mieter, wie z.b ne 6 köpfige familie muss mehr müllgebühren zahlen als ein 2 köpfige... ich will in den nebenkosten bloss die summe der Nebenkosten-gebühren haben mehr nicht.
Ich habe die daten.db und kosten.db jetzt zusammengenommen zur daten.db

Ich habe jetzt bloss 2 tabelle: daten.db und miete.db, die fürs grid.

ICh werde das so mit dem filter machen, ich denke das funzt gut so.
Es kommt bloss ein eine fehlermeldung wenn ich einen neuen Eintrag ins grid machen will... es liegt ein INDEXFEHLER vor... was das zu bedeuten hat weiss ich auch net.

Danke.

Plautzer
 
  • Datenbank in delphi (2 kleine probs) Beitrag #14
P

Plautzer

Bekanntes Mitglied
Dabei seit
03.09.2001
Beiträge
613
Reaktionspunkte
0
Ort
Sachsen
Muss ich eigentlich bei der 'grid' table...
auch ne mieternummer mit dabei sein??
Bis jetzt ist nur:
-Datum
-Wieviel
-Bezahlt

Der mieter wird ja nach der Whg Nr(ist inder daten.db drin) eingeteil.. müsste ich die nr auch in die miete.db(grid??) reinnehmen?? Oder sollte ich die 3 felder auch in die datentabelle nehmen???

Wo soll der filterung hin, in onscroll oder from.show??

Plautzer
 
  • Datenbank in delphi (2 kleine probs) Beitrag #15
K

KaFu

Bekanntes Mitglied
Dabei seit
07.12.1999
Beiträge
755
Reaktionspunkte
0
Hi!

In die Kasse-DB (Grid-DB) musst Du noch eintragen können, wer an diesem Datum den Betrag überwiesen hat. Das Feld "Bruttomiete" erscheint mir aber als unsinnig.
Nimm die Datenbank nur als Kassenbuch. Also nur Ein- und Ausgaben rein, die über eine Mieter-ID dem entsprechenden Mieter zugeordnet werden.
Die Felder der Kasse-DB kannst Du nicht in die Mieter-DB eintragen. Sonst hast Du nach ein paar Buchungen jeden Mieter zig-mal drin:

VName Name ... Datum Bezahlt
Franz Meiser ... 24.12.02 598,88
Harry Hansen... 2.08.03 457,87
Franz Meiser ... 24.01.03 598,88

Stattdessen die Mieter-DB nur für Daten benutzen, die nur den einzelnen Mieter betreffen, außer wiederkehrende Ein- und Ausgaben.
Also z.Bsp.: Name, Vorname, ..., Kaltmiete, Personenanzahl, MIETER-ID!

Wenn jetzt die Mieter-Table per DBNavigator gescrollt wird (Mieter-Table.OnScroll), musst Du die Filterung des Kassenbuchs anpassen. Nach der Filterung kannst Du dann offene Posten berechnen lassen.
Nach Berechnung der Nebenkosten kannst Du diese dann als Negativ-Buchung in das Kassenbuch eintragen. Der Datensatz muss natürlich wieder die Mieter-ID enthalten. Er sollte dann auch gleich im Grid auftauchen. Prompt kann Dein Prog dann aus den bisherigen Miet-Einnahmen und allen Mietkosten inkl. Nebenkosten berechnen, ob der Mieter noch etwas nachzuzahlen hat.

Hoffe, das hilft wieder weiter...

Tschüß,
KaFu
 
  • Datenbank in delphi (2 kleine probs) Beitrag #16
P

Plautzer

Bekanntes Mitglied
Dabei seit
03.09.2001
Beiträge
613
Reaktionspunkte
0
Ort
Sachsen
.. die bruttomiete und nettomiete muss auftauchen, da die ja auch von miete zu mieter variiert, hat habe keine besondere bedeutung fürs programm.

ich mache ich es das die ID in der daten.db automatisch, bei einen eintrag ions grid, ans grid weitergegeben wird??
Damit das dann auch mit dem filtern klappt.

Plautzer
 
  • Datenbank in delphi (2 kleine probs) Beitrag #17
P

Plautzer

Bekanntes Mitglied
Dabei seit
03.09.2001
Beiträge
613
Reaktionspunkte
0
Ort
Sachsen
Das mit dem zusammenrechnen habe ich hinbekommen, auch das mit der übergabe der id-schlüssels.

Was noch nicht klappt ist die speicherung der 6 nebenkosten.. ich habe ein speicher button eingaut... es kommt aber eine fehlermeldung 'table1... datenmenge weder in editiermodus noch in einfügemodus'

Das hatte ich dann per table1.edit... umgegangen.. bloss wenn man 2mal drückt kommt die fehlermeldung nochmal.


Ein anders problem wäre dann dsa speichern und eintragen ins grid.
Jeweils wenn ich einer der knöpfe in der navi drücke kommt auch ein fehleranzeige '...EDBENGINEERROR... "Indexfehler"... Prozess wir umgehend abgebrochen'

Das wars dazu.

THx für eure mühen.

Plautzer
 
  • Datenbank in delphi (2 kleine probs) Beitrag #18
K

KaFu

Bekanntes Mitglied
Dabei seit
07.12.1999
Beiträge
755
Reaktionspunkte
0
Hi!

Zu den Nebenkosten:
Du benutzt immer noch die DBEdit-Felder für die Nebenkosten? Dann setze doch die Eigenschaft "AutoEdit" der zugehörigen DataSource auf true. Dann musst Du mit "Speichern" nur noch folgendes tun:
if Table1.State=dsEdit then Table1.Post;

Beim Abbrechen-Button muss dann folgendes passieren:
if Table1.State=dsEdit then Table1.Cancel;

Ein anders problem wäre dann dsa speichern und eintragen ins grid. Jeweils wenn ich einer der knöpfe in der navi drücke kommt auch ein fehleranzeige '...EDBENGINEERROR... "Indexfehler"... Prozess wir umgehend abgebrochen'

Welche Knöpfe drückst Du? Der DBNavigator sollte eigentlich korrekt funktionieren.

Tschüß,
KaFu
 
  • Datenbank in delphi (2 kleine probs) Beitrag #19
P

Plautzer

Bekanntes Mitglied
Dabei seit
03.09.2001
Beiträge
613
Reaktionspunkte
0
Ort
Sachsen
Hi,
das mit edit funzt vom feinsten, vielen dank.:goil:
Doch wenn ich nochmal neu ins programm reingehe stehen die daten nicht mehr da!! What to do??

Im navigator passiert wenn man auf NEU drückt, also wenn man etwas unter hinzufügen will.

Thx

Plautzer
 
  • Datenbank in delphi (2 kleine probs) Beitrag #20
P

Plautzer

Bekanntes Mitglied
Dabei seit
03.09.2001
Beiträge
613
Reaktionspunkte
0
Ort
Sachsen
Hi,

ich weeß einfach net was ich machen soll... die geschichte mit grid macht mir grosse kopfschmerzen :be:

Ich kann nur einmal im grid speichern... das steht auch für alle da. Wenn ich z.B. mieter wechsle dann kann da steht das immernoch vomn vorgänger da (gut ich denke da bekomme ich mit dem filter weg) doch man kann einfach nicht auf NEU im navigator drücken, dann kommt eine fehlermeldung die ich ob schon beschrieben hatte.

Was mich auch verrückt macht ist,
wenn ich delphi ganz schliesse und dann das programm wieder neu lade und compiliere sind alle zahlen daten und die datem im grid weg. Was soll das wieder auch sich haben. Wnn ich nur auf compiler anhalten drücke und wieder neu compile da sind die daten noch vorhanden. crazy


Ich hoffe ihr könnt mir hier nochmal helfen.

Danke.

Plautzer
 
Zuletzt bearbeitet:
Thema:

Datenbank in delphi (2 kleine probs)

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.180
Beiträge
1.579.174
Mitglieder
55.879
Neuestes Mitglied
stonetreck
Oben