Problem mit Fremdschlüssel

Status
Nicht offen für weitere Antworten.

paran11

Mitglied
Hallo zusammen!

Ich habe folgendes Problem:

Ich bin gerade dabei mir ein kleines Buchführungsprogramm mithilfe von Java und Access zu programmieren.
Mein Problem liegt momentan bei der Erstellung der Datenbank mit Access.

Ich habe 2 Tabellen (buchungen, konten)
Die Entität 'buchungen' hat dabei folgende Attribute: buchungsnr(Auto-Wert(PK)), belegnr(Text), datum(date), buchungstext(Text),betrag(Währung)
Die Entität 'konten' hat: kontonr(Text(PK)),bezeichnung(Text),soll(ährung),haben(Währung),aktivkonto(JA/NEIN),passivkonto(JA/NEIN)

Die Daten, die ich mithilfe der Java-Applikation eintrage, werden dann auch in die MS-Access-DB eingetragen und alles wunderbar übernommen.

Ich habe nur ein Problem, wenn ich jetzt einen Datensatz mithilfe der Java-App. stornieren möchte.
(Die Daten werden in eine JList eingetragen und gleichzeitig in die DB geschrieben)

Wenn mir jetzt nach einiger Zeit auffällt, dass ich mich bei einem Buchungssatz vertippt habe und diesen stornieren möchte, kann ich ja den Buchungssatz aus der Tabelle 'buchungen' mit dem PK 'buchungsnr' ansprechen und löschen...ist auch kein Problem.
NUR... ich würde auch gerne, dass der Betrag, der mit diesem Datensatz in Verbindung steht, auch aus der Tabelle 'konten' löschen...also den betroffenen Betrag, der mit dem Buchungssatz in Verbindung steht wieder abziehen vom Konto.

Ich weiß leider nicht, wie ich das Problem lösen kann... evtl. mit einem Fremdschlüssel, Beziehungen zwischen den Tabellen ???

Könnte mir jemand sagen, wie ich das am besten anstelle...ich versuch´s jetzt scho nseit ca. 3 Std. ...hab aber bisher keine komfortable Lösung gefunden ??!??

Ich hoffe, dass das Problem einigermaßen verständlich ist...Buchführung ist ja nicht jedermanns sache ;)

Vielen Dank im Voraus

Gruß
 

abollm

Top Contributor
[..]
Mein Problem liegt momentan bei der Erstellung der Datenbank mit Access.

Ich habe 2 Tabellen (buchungen, konten)
Die Entität 'buchungen' hat dabei folgende Attribute: buchungsnr(Auto-Wert(PK)), belegnr(Text), datum(date), buchungstext(Text),betrag(Währung)
Die Entität 'konten' hat: kontonr(Text(PK)),bezeichnung(Text),soll(ährung),haben(Währung),aktivkonto(JA/NEIN),passivkonto(JA/NEIN)
[..]
Wenn mir jetzt nach einiger Zeit auffällt, dass ich mich bei einem Buchungssatz vertippt habe und diesen stornieren möchte, kann ich ja den Buchungssatz aus der Tabelle 'buchungen' mit dem PK 'buchungsnr' ansprechen und löschen...ist auch kein Problem.
NUR... ich würde auch gerne, dass der Betrag, der mit diesem Datensatz in Verbindung steht, auch aus der Tabelle 'konten' löschen...also den betroffenen Betrag, der mit dem Buchungssatz in Verbindung steht wieder abziehen vom Konto.

Ich weiß leider nicht, wie ich das Problem lösen kann... evtl. mit einem Fremdschlüssel, Beziehungen zwischen den Tabellen ???

Könnte mir jemand sagen, wie ich das am besten anstelle...ich versuch´s jetzt scho nseit ca. 3 Std. ...hab aber bisher keine komfortable Lösung gefunden ??!??

Ich hoffe, dass das Problem einigermaßen verständlich ist...Buchführung ist ja nicht jedermanns sache ;)

Vielen Dank im Voraus

Gruß

Meine Betätigung mit Buchführung liegt schon einige Jahre zurück, aber folgende Frage:
IIRC musst du doch jede Buchung in jeweils zwei Konten berücksichtigen?
Dann kannst bzw. musst du auch in deinen Buchungssätzen jeweils einen Fremdverweis auf die Kontonummer mitführen. Danach ist die Sache dann auch relativ einfach.
Z.B.
'buchungen' hat dann folgende Attribute: buchungsnr(Auto-Wert(PK)), belegnr(Text), datum(date), buchungstext(Text),betrag(Währung), kontonr(Text(FK))
 

paran11

Mitglied
Ja da hast du Recht...man hat ja entweder 2 Konten, wenn man ohne Steuer bucht und 3 Konten, wenn man die Vorsteuer/Umsatzsteuer berücksichtigt;)...wenn es dass ist, was du meinst;)

Aber ich weiß einfach nicht, wie ich das in Access realisieren soll :(
 

abollm

Top Contributor
Ja da hast du Recht...man hat ja entweder 2 Konten, wenn man ohne Steuer bucht und 3 Konten, wenn man die Vorsteuer/Umsatzsteuer berücksichtigt;)...wenn es dass ist, was du meinst;)

Aber ich weiß einfach nicht, wie ich das in Access realisieren soll :(

Ich weiß nicht genau, womit genau du jetzt ein Problem hast. Willst du unbedingt mit einem vom DB-System MS Access erstellten Fremdverweis arbeiten?
Ich habe leider kein MS Access auf meinem Rechner (müsste ich erst installieren, und dazu hab ich jetzt keine Zeit/Lust). Grundsätzlich kannst du in deiner eigenen Java-Applikation für die korrekte Auflösung der Fremdverweise sorgen, indem du grundsätzlich (zwingend) in jedem Buchungssatz die Kontonummer füllst und somit selbst für die Integrität der Daten sorgst.
Wenn ich aber erneut darüber nachdenke, musst du ja grundsätzlich bei Fehlbuchungen gegenbuchen (GOB! ;-). Somit brauchst du bei derartigen Fehl- oder Falschbuchungen zunächst nur den gleichen, aber mit dem entgegengesetzten Vorzeichen versehenen Buchungsbetrag zuerst nur gegenbuchen. Dann sind die betr. Konten betragsmäßig wieder auf dem Stand wie vor der Fehlbuchung. Ist doch richtig, oder?
 

frapo

Bekanntes Mitglied
Für mich hört sich das nach einem Problem in deinem DB-Design an. Beide Tabellen scheinen in keiner weise eine Beziehung zueinander zu haben. Beispielsweise könnte man in der Tabelle Konto ein Feld einfügen, das eine direkte Beziehung zu einem Datensatz in der Tabelle Buchungen herstellt. Anbieten könnte sich hier das Feld BuchungsNr. In der Tabelle Buchungen ist es bereits enthalten, in der Tabelle Konto noch nicht. Je nachdem wie das später aussehen soll, könnte man eine 1:n Beziehung vereinbaren, ein Buchungsvorgang muss genau einem Konto zugewiesen (also 1) sein, ein Konto kann aber natürlich mehrere Buchungsvorgänge enthalten (also n).

vielleicht hilft dir dieser Gedanke ja bereits schon weiter :)

Gruß
frapo
 

paran11

Mitglied
Hi!

Ich hab´s jetzt soweit gelöst...zwar nen bisschen anders als gewollt, aber es funktioniert;)
Nur mit dem Storno hab ich noch nen winziges Problem:

Ich habe die Datensätze ja in einer JList stehen
Das sieht dann z.B. folgendermaßen aus:

"2 . Aufwendungen für Rohstoffe EUR 10000
+ Vorsteuer EUR 1600
an Verbindlichkeiten EUR 11600"

Ich lese dann vorher den Autowert (also hier "2") mithilfe von:
String a = list.getSelectedItem().substring(0,1);
Ich habe jetzt versucht mit: "DELETE * FROM buchungen WHERE buchungsnr='"+a+"'";
...den Datensatz aus der DB zu löschen...nur wirft er mir da nen Fehlermeldung aus
"Datatype mismatch blalbla..."

Wie kann ich die beiden Sachen miteinander vergleichen, damit ich den Datensatz aus der Tabelle löschen kann ?

Danke im Voraus
 

paran11

Mitglied
Hallo!

Also das mit dem DELETE-Statement hab ich jetzt hinbekommen..hab´s mit nem preparedStatement gelöst!

Ich hätte da noch ne andere Frage:

Ich habe noch eine SELECT-Abfrage:
[HIGHLIGHT="Java"]Connection con = DriverManager.getConnection(url);
Statement stmt = con.createStatement();
String sql = "SELECT Kto, text, Gesamt FROM tab1";
ResultSet rst = stmt.executeQuery(sql);
while (rst.next())
{
list.add(rst.getString("Kto")+ " "+" "+rst.getDouble("Gesamt"));
}
rst.close();
stmt.close();
con.close();[/HIGHLIGHT]

Die while-Schleife wird ja solange durchlaufen, solange etwas im ResultSet enthalten ist...
Ich würde jetzt gerne die Spalte ("Gesamt") aufaddieren und dann als Ergebnis ausgeben lassen ...also nicht über ne weitere SQL-Abfrage sondern direkt in Java... wie kann ich das umsetzen ??

Danke im Voraus
 
Zuletzt bearbeitet von einem Moderator:

abollm

Top Contributor
Ich hätte da noch ne andere Frage:

Ich habe noch eine SELECT-Abfrage:
[HIGHLIGHT="Java"]Connection con = DriverManager.getConnection(url);
Statement stmt = con.createStatement();
String sql = "SELECT Kto, text, Gesamt FROM tab1";
ResultSet rst = stmt.executeQuery(sql);
while (rst.next())
{
list.add(rst.getString("Kto")+ " "+" "+rst.getDouble("Gesamt"));
}
rst.close();
stmt.close();
con.close();[/HIGHLIGHT]

Die while-Schleife wird ja solange durchlaufen, solange etwas im ResultSet enthalten ist...
Ich würde jetzt gerne die Spalte ("Gesamt") aufaddieren und dann als Ergebnis ausgeben lassen ...also nicht über ne weitere SQL-Abfrage sondern direkt in Java... wie kann ich das umsetzen ??

Das wäre ziemlicher Bullshit (SCNR), wenn du die Aufsummierung so wie von dir geplant lösen würdest. Versuche es besser mit einer Aggregatfunktion direkt via SQL zu lösen. Das ist grundsätzlich performanter.
 
Zuletzt bearbeitet von einem Moderator:

paran11

Mitglied
Hallo...danke für die schnelle Antwort!

Ich weiß, dass es besser wäre über ein weiteres SQL-Statement wie SUM(Gesamt) den Betrag zu erfragen.
Mir ging es eigentlcih nur darum, ob es möglich ist...und wenn ja...wie ???

Vielen Dank nochmal für eure Hilfe
 

Ebenius

Top Contributor
Es ist möglich. Wenn's Dir nicht auf die Genaugkeit ankommt (Fließkommazahlen aufaddieren): [HIGHLIGHT="Java"]double acc = 0;
Connection con = DriverManager.getConnection(url);
Statement stmt = con.createStatement();
String sql = "SELECT Kto, text, Gesamt FROM tab1";
ResultSet rst = stmt.executeQuery(sql);
while (rst.next())
{
final double gesamt = rst.getDouble("Gesamt");
acc += gesamt;
list.add(rst.getString("Kto")+ " "+" "+gesamt);
}
System.out.println("Akkumuliert Gesamt: " + acc);
rst.close();
stmt.close();
con.close();[/HIGHLIGHT] Ebenius
 
Zuletzt bearbeitet von einem Moderator:

paran11

Mitglied
Hey...ne darum geht´s mir nicht primär...die genauigkeit ist halb so wild;)

Möchte nur wissen, wie ich es machen kann ??
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J PC-Start Problem JDBC Connection Datenbankprogrammierung 10
C Problem mit Apache Poi Datenbankprogrammierung 6
N HSQLDB Problem mit Eclipselink in runnable Jar Datenbankprogrammierung 10
P GroupLayout-Problem Datenbankprogrammierung 12
F XAMPP max connections problem Datenbankprogrammierung 6
C MySQL Problem in phpMyAdmin Oberfläche Datenbankprogrammierung 5
C Problem with INSERT.............ON DUPLICATE KEY Datenbankprogrammierung 3
C Problem with insertion in database. Datenbankprogrammierung 7
F Problem mit Hibernate c3p0 Datenbankprogrammierung 2
W Problem mit Insert in zwei Tabellen Datenbankprogrammierung 8
G MySQL Problem mit MySQL verbindung Datenbankprogrammierung 8
A kleines Problem Datenbankprogrammierung 6
T Problem mit Datenbankverbindung Datenbankprogrammierung 22
V Derby/JavaDB updateRow Problem Datenbankprogrammierung 0
G MySQL Java Problem: Nullpointer Exception obwohl Daten vorhanden sind? Datenbankprogrammierung 2
Nuiton EmbeddedDriver Problem Datenbankprogrammierung 6
A MongoDB Passwort Problem Datenbankprogrammierung 0
O HSQLDB Hibernate Criteria Problem Datenbankprogrammierung 3
F MySQL JDBC Problem Datenbankprogrammierung 5
Anfänger2011 Datenbankstruktur/aufbau (theoretisches Problem) Datenbankprogrammierung 5
M Derby/JavaDB Drop Database problem Datenbankprogrammierung 3
M Derby/JavaDB NOT LIKE problem Datenbankprogrammierung 19
N HSQLDB Problem mit EntityManager Datenbankprogrammierung 7
B MySQL JPAContainer Problem Datenbankprogrammierung 4
K Eclipse Apache Derby Treiber Problem Datenbankprogrammierung 4
C Problem oder Denkfehler mit H2-Database Datenbankprogrammierung 3
E Wie kann man das Problem mit der BLOB-Spalte lösen? Datenbankprogrammierung 1
M Problem mit jcouchdb und CouchDB - UTF8 kein gültiger Zeichentyp Datenbankprogrammierung 4
T MySQL Problem mit Datenbankanbindung Datenbankprogrammierung 4
M INSERT-Problem = integrity constraint violation: foreign key no parent Datenbankprogrammierung 5
P SQL Query Problem Datenbankprogrammierung 14
A MySQL Problem bei Tabelle ausgeben Datenbankprogrammierung 3
Q MySQL JDBC-Treiber Problem Datenbankprogrammierung 2
B SQLite Problem bei Planung der Datenbank [Jeopardy] Datenbankprogrammierung 3
A Problem mit dem Import und Export von Bildern Datenbankprogrammierung 4
P Oracle Problem mit Umlauten Datenbankprogrammierung 9
A Problem mit Create-Statement Datenbankprogrammierung 9
D Problem mit COLUMN_IDENTIFIERS Datenbankprogrammierung 8
Bluedaishi MySQL Abfrage Problem :-) Datenbankprogrammierung 21
M Problem mit mehreren Datasourcen Datenbankprogrammierung 3
R Resultset.last() Problem Datenbankprogrammierung 12
M Problem GroupBy Datenbankprogrammierung 3
S CURRENT_DATE problem Datenbankprogrammierung 2
M Problem mt JPA Id-Generators Datenbankprogrammierung 18
Gossi Oracle Problem mit group by... Datenbankprogrammierung 22
M MySQL SQL Abfrage Problem Datenbankprogrammierung 6
R MS-SQL Express Login-Problem Datenbankprogrammierung 8
P Lazy-Fetchig und Session-Problem mit Hibernate Datenbankprogrammierung 4
N HSQLDB Problem beim Treiberladen im Jar Datenbankprogrammierung 6
M Problem beim Erstellen einer Query Datenbankprogrammierung 7
C Hibernate ManyToMany zusammengesetzter Primärschlüssel, problem. Datenbankprogrammierung 3
M Problem mit HQL Syntax Datenbankprogrammierung 5
K Db4o Delete Problem Datenbankprogrammierung 11
Mike90 Deadlock/Lock Problem Datenbankprogrammierung 4
T Access 32bit on Win7 64Bit ODBC Problem Datenbankprogrammierung 1
C unverständliches DB Problem (Es ist kein temporärer Systemtabellenbereich mit einer ausreichenden..) Datenbankprogrammierung 5
S ODBC Treiber Problem/oder unvermögen Datenbankprogrammierung 18
J Problem bei Boolean in PreparedStatement Datenbankprogrammierung 5
C MySQL Problem mit UPDATE Abfrage Datenbankprogrammierung 13
C Problem mit SQL-Abfrage Datenbankprogrammierung 5
K Problem mit Datenbankverbindung via Eclipse Datenbankprogrammierung 2
A Problem mit Eintragen von Daten in eine Datenbank mittels DAO Datenbankprogrammierung 4
S Oracle Problem mit PreparedStatement.setString(1,"str") Datenbankprogrammierung 10
B MySQL Problem mit Datenbankanbindung an MySQL Datenbankprogrammierung 2
N Problem bei Erstellung eines Index Datenbankprogrammierung 12
C Hibernate Property-Problem Datenbankprogrammierung 5
J MyBatis - Update Problem Datenbankprogrammierung 4
S JPA: Problem mit Update von Daten Datenbankprogrammierung 7
c_sidi90 Hibernate Problem Table doesnt excist Datenbankprogrammierung 8
M Problem mit JPA - OneToMany-Relation Datenbankprogrammierung 3
I Hibernate: Composite Foreign Key Problem Datenbankprogrammierung 14
S JPA OptimisticLocking Problem Datenbankprogrammierung 11
I Derby/JavaDB Problem mit Befüllung von Tabelle Datenbankprogrammierung 7
JavaKaffee Derby/JavaDB Quartz-WebAnwendung - Connection/Treiber Problem Datenbankprogrammierung 47
I Problem mit ResultSet Datenbankprogrammierung 2
L Excel in MySQL importieren Problem Datenbankprogrammierung 5
S Problem beim Anlegen einer Tabelle Datenbankprogrammierung 5
R MS Access mit Java Problem mit Update Statment Datenbankprogrammierung 13
S MySQL Problem mit SELECT bzw encoding Datenbankprogrammierung 4
T Problem beim schreiben von daten Datenbankprogrammierung 4
M MySQL getConnection - Verbindung Problem Datenbankprogrammierung 2
K Hibernate + MySQL Problem... Datenbankprogrammierung 2
I MySQL MySQL – Proxy Problem Datenbankprogrammierung 4
M Problem mit Hibernate und Named Query Datenbankprogrammierung 1
M Problem mit Hibernate und Access Datenbankprogrammierung 9
C firebird problem Datenbankprogrammierung 5
F Problem mit Datenbankabfrage Datenbankprogrammierung 7
K SQL Problem mit Date Datenbankprogrammierung 3
jeppi MySQL Design-Problem: DB-Verbindung herstellen und halten - JdbcRowSet / Idle-Timeout? Datenbankprogrammierung 9
J sql abfrage ... Problem mit Datumswert Datenbankprogrammierung 3
G MySQL Connection Problem Datenbankprogrammierung 3
O MySQL Problem mit Umlauten?! Datenbankprogrammierung 2
E Hibernate Problem bei bidirektionaler 1:n Verbindung Datenbankprogrammierung 2
D MySQL Problem beim einfügen von Double-Zahlen Datenbankprogrammierung 4
M Oracle Problem mit Resultset Datenbankprogrammierung 11
T Problem bei Zugriff auf Access Datenbank Datenbankprogrammierung 7
W jpmdbc Problem -Beispiel funktioniert nicht Datenbankprogrammierung 9
W Verständnis-Problem JPA Grundlagen Datenbankprogrammierung 5
M Problem Array in BLOB-Feld in DerbyDB zu speichern Datenbankprogrammierung 5
M JPA-Persist Problem Datenbankprogrammierung 2

Ähnliche Java Themen


Oben