Entwickler-Ecke

Datenbanken - Datensatz in interbase eingefügt, beim refresh nicht da...


CenBells - Fr 27.09.02 00:23
Titel: Datensatz in interbase eingefügt, beim refresh nicht da...
Hallo leute

ich habe eine übersicht über alle vorhandenen Datensätze die auf einem ibdataset basiert und die eine eigene transaktion besitzt.

Nun füge ich im context einer zweiten transaction einen datensatz in die tabelle ein und mache ein refresh auf die daten. Dann bekomme ich aber den neuen datensatz nicht angezeigt.

Die einfüge Transaction mach ein commit zum Beenden und das klappt auch einwandfrei. In der Lese-Transaction habe ich read_commited eingestellt.
Wenn ich die Lese tabelle schließe und wieder öffne geht es aber. Nur das möchte ich nicht zwingend, da dann ja ewig viele daten beim einfügen neu geladen werden. (ca 6000 - 10000 datensätze)
Kann mir wer helfen?

Gruß
Ken


LCS - Fr 27.09.02 07:39

Hi
das Problem liegt in der Implementierung von Refresh in TDataSet. Es tritt immer dann auf wenn Daten von einer SQL-Datenbank abgerufen werden und lässt sich auch nicht umgehen.
Die einzige Lösung ist das Schliessen und Öffnen deiner ersten Abfrage. Und hier würde ich auch versuchen die Menge der Daten einzugrenzen um das Ganze zu beschleunigen.

Gruss Lothar


CenBells - Fr 27.09.02 09:18

Guten Morgen. *gähn*

Danke für die Antwort Lothar. Ok, dann werde ich das halt machen.
Das mit dem eingrenzen ist so eine sache.
Aber egal. wenn ich die Daten nun nicht in einem DB-Grid anzeige, sondern dem user eine eingabemaske zur verfügung stelle, wo er dann immer nur mit next und prior durchscrollen kann, dann werden doch nicht sofort alle daten angefordert, oder?

gruß
KEn


LCS - Fr 27.09.02 10:17

Hi
vollkommen korrekt. Bei so grossen Datenmengen ist der Verzicht auf DBGrid die beste Lösung. Leider sind die Anwender da meist anderer Meinung :(
Gruss Lothar


CenBells - Fr 27.09.02 11:30

Danke für den hinweis.

Ich habe das jetzt umgestellt, kann auch durch die daten mittels next und prior scrollen.

Aber wenn ich nun durch eine andere Transaction einen datensatz einfüge, kann ich den trotzdem nicht annavigieren. Die anzahl der datensätze stimmt zwar, aber an der stelle des neuen datensatzes ist jetzt nicht der neu eingefügt, sondern befindet sich die kopie eines anderen.
Was mache ich denn jetzt falsch???
Gruß
Ken


hansa - Fr 27.09.02 11:47

Hallo,

kurze Zwischenfrage : wenn ich mit WHERE die Datenmenge einkreise, dann würden doch in dem Grid nur die gewünschten Werte drin stehen.

Sollte der Parameter für where indiziert werden oder geht es auch ohne Index, bzw. wie wirkt sich das ganze jeweils aus ?

Gruß
Hansa


LCS - Fr 27.09.02 12:03

Hi
auch wenn du mittels navigator auf die Daten zugreifst, kommst du um das öffnen und schliessen der Datenmenge nicht drumrum. Und dann sollte auch dein Datensatz vorhanden sein.

Gruss Lothar


CenBells - Fr 27.09.02 14:26

Und wie sieht es aus, wenn ich nur mit einem dataset arbeite und dann darauf ein insert aufrufe? sind die daten nach dem post in dem dataset verfügbar?
´Wirklich gutes design wäre das wohl nicht, oder? *g*

Gruß
Ken


LCS - Fr 27.09.02 14:29

Zitat:

Wirklich gutes design wäre das wohl nicht, oder?

Ne, nicht wirklich :wink:
Aber du könntest die beiden Operationen innerhalb einer Transaktion ablaufen lassen.

Gruss Lothar


CenBells - Fr 27.09.02 14:31

wäre das dann besser?

aber, ich glaube, das hat nicht geholfen. Ich werde nochmal testen
ansonsten mache ich es mit close open

Danke und nochmal gruß
Ken