Neue Datensätze aus Access werden nicht ausgelesen

Hiho :slight_smile:

Mein Problem aus JPQL, Join, Straßen wurde ja zum Glück schon gelöst. Jetzt steht aber schon gleich das nächste vor der Tür :frowning:

Folgende Abfrage hatte ich ja letztendlich um die Städte abzufragen:

"SELECT DISTINCT sta FROM Staedte sta, Strassen str, Staedte sta2 "
+ "WHERE sta.stadtname = :searchedCityName "
+ "OR (sta2.stadtname = :searchedCityName AND str.stadtnummer1 = sta2.stadtnummer AND str.stadtnummer2 = sta.stadtnummer) "
+ "OR (sta2.stadtname = :searchedCityName AND str.stadtnummer1 = sta.stadtnummer AND str.stadtnummer2 = sta2.stadtnummer)",
Stadt.class);```

Um die zugehörigen Straßen-Verbindungen abzufragen habe ich folgendes (funktioniert!):

```query = em.createQuery("SELECT DISTINCT str FROM Strassen str, Staedte sta "
+ "WHERE str.stadtnummer1.stadtName = :searchedCityName "
+ "OR str.stadtnummer2.stadtName = :searchedCityName", 
Strasse.class);```

Bisher funktionierten beide Abfragen einwandfrei.

Nun wurden allerdings vorgestern neue Straßen in die Access-Datenbank eingefügt. Diese werden von den Abfragen nicht mit eingelesen (also wirklich nur die neu hinzugefügten).
Gestern wurden weitere neue Straßen hinzugefügt. Diese werden auch nicht mit eingelesen. Seit dem die ganz neuen von gestern aber eingetragen sind, werden die von vorgestern auf einmal doch mit eingelesen. Ich finde bloß nicht den Fehler, warum das passiert.

Hat hier vielleicht jemand eine Idee woran's liegen könnte?

Viele Grüße,

Daten-Droid ;)

Wahrscheinlich falsche Verbindung?

Mit welcher Datenbank verbindet sich dein Programm?

Die Verbindung ist die richtige, da hat sich auch nichts verändert. Es wurden nur Datensätze hinzugefügt.

Werden die neuen Datensaetze nach einem Neustart der Anwendung gefunden?
Wenn ja, wie lange “lebt” der EM?

Habe die Anwendung neu gestartet, die neuen Datensätze werden immer noch nicht gefunden.

Den EM schließe ich direkt nach der jeweiligen Abfrage (ich eröffne je Abfrage einen neuen EM, führe die Abfrage aus und schließe den EM anschließend wieder).

Lass dir mal das generierte SQL von Hibernate ausgeben und versuche das selber manuell auszufuehren.

Und wie mache ich das? :redface-new:

Veränder mal einen Datensatz in Access direkt (über die accdb-Datei), d.h. mach aus der “Ludwigsstraße” die “LUDwigsstraße”

Merkt der Programm das wenigstens?

[QUOTE=Bleiglanz]Veränder mal einen Datensatz in Access direkt (über die accdb-Datei), d.h. mach aus der “Ludwigsstraße” die “LUDwigsstraße”

Merkt der Programm das wenigstens?[/QUOTE]

Jap, das merkt er.

Wer ode wie werden denn die neuen Datensätze eingefügt: mit Hibernate/Java usw. oder anderweitig?

Erfüllen die neuen Straßen überhaupt die join-Bedingungen, etc?

Irgendeine Art von Cache im Einsatz?

Da fällt mir noch ein (da der JDBC-ODBC-Treiber in Java 8 ja endlich raus geworfen wurde): Wie greifst du eigentlich auf deine Access-Datenbank zu?

Übrigens ist Access nicht wirklich in der Lage, gleichzeitig mehrere Benutzer zu bedienen.

[QUOTE=Bleiglanz]Wer ode wie werden denn die neuen Datensätze eingefügt: mit Hibernate/Java usw. oder anderweitig?

Erfüllen die neuen Straßen überhaupt die join-Bedingungen, etc?

Irgendeine Art von Cache im Einsatz?[/QUOTE]

Die neuen Datensätze wurde von einem Kollegen direkt in Access via Formular eingefügt. Ich selber greife aus meiner Anwendung nur lesend darauf zu.

Von einem Cache wüsste ich jetzt nichts.

[QUOTE=Bleiglanz;103066]Da fällt mir noch ein (da der JDBC-ODBC-Treiber in Java 8 ja endlich raus geworfen wurde): Wie greifst du eigentlich auf deine Access-Datenbank zu?

Übrigens ist Access nicht wirklich in der Lage, gleichzeitig mehrere Benutzer zu bedienen.[/QUOTE]

Ich greife via JPA und UCanAccess auf die Access-Datenbank zu.

Wäre es möglich, dass Access bestimmte Stände zwischenspeichert und neueste Stände erst später aktualisiert?

Hab schon länger nix mehr mit JPA und Co gemacht, aber afair wird da einiges gecached (zumindest so meine Erfahrung mit hibernate). D.h. Änderungen direkt in der DB sind kritisch und werden aufgrund des Caches vom Programm möglicherweise garnicht wahrgenommen, da keine Abfrage auf der DB statt findet.

Was man auch noch prüfen kann: werden die Daten transaktionsgesichert in die DB geschrieben? Falls ja, dann ist diese vielleicht noch offen.

[quote=Tomate_Salat;103077]werden die Daten transaktionsgesichert in die DB geschrieben?[/quote]noch nicht gemerkt, dass wir hier von Access reden? Das überhaupt Datenbank zu nennen grenzt schon am Beleidigung für richtige DBMS…

bye
TT

Doku lesen hilft, hier die von UCanAcess:

Poor multiprocess access support. Nevertheless it tries to synchronize data when a concurrent process modifies the access file.

Heisst im Klartext:
Access ist immer noch Schrott, sollte man nie Produktiv verwenden ausser vielleicht lokal fuer einen einzelnen User :wink:

Die Vorteile von Access waren doch dass man schnell eine DB hinspucken kann und mit VBA eine Anwendung bastelt.

Wozu also auf Access ueber JDBC zugreifen?
Selbst MS empfiehlt doch den MS SQL Server falls mehrer Nutzer damit arbeiten sollen.

[quote=maki]Heisst im Klartext:
Access ist immer noch Schrott, sollte man nie Produktiv verwenden ausser vielleicht lokal fuer einen einzelnen User[/quote]

Doch doch, alle alle Datenquellen sollten verlinkte Datenbank-Tabellen in einem SQL-Server sein. Dann hat man einen schönen Reportgenerator und kann schnell läppische, halb-funktionierende Oberflächen zusammenklicken.

Geht halt nur nachts, wenn gerade keiner die .accdb-Datei mit MS-ACCESS geöffnet hat :slight_smile:

Die Diskussion an dieser Stelle, ob Access oder nicht, bringt nichts, weil ich schlicht und einfach für die Aufgabe die seit mehreren Jahren bestehende und kaum genutzte Access-Datenbank (Entschuldigt diesen Begriff) verwenden soll.

Ich bin im Moment auch die einzige Person, die darauf zugreift und damit arbeitet, es kann also nicht daran liegen, dass irgendjemand anderes auf die Datei zugreift. Der Kollege, der die neuen Datensätze hinzugefügt hat, hat die Datei auch nicht mehr geöffnet :wink:

Klang vorher aber ein wenig anders und verwirrt mich auch gerade. Also nochmal: wurden die Daten abseits von deinem Programm eingefügt?

Ich würde hier nach wie vor auf ein Cachingproblem tippen. Datensätze sollten am besten über dein Programm (und nicht über das Accessformular) in die Datenbank (ja ich mag Paradoxons!) geschrieben werden.

(Ein ähnliches Problem hatte ich auch mal, als ich Testweise ein Tool für eine Webseite schreiben wollte. Änderungen welche ich über die Webseite gemacht hatte, kamen im Programm nicht an. Habe dafür aber leider nie wirklich eine Lösung gefunden/gesucht gehabt.)

Mal ganz dumm gefragt:
Das Access-File liegt auf einem Windows-Share und keiner von euch hat dieses als “Offline-Folder” eingerichtet?

bye
TT