BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!
> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
In Base einen bestimmen Datensatz ansteuern
In Base einen bestimmen Datensatz ansteuern
Ich suche nun sehr lange nach einer Möglichkeit, in Base einen bestimmten Datensatz per Basic anzusteuern. Ich finde einfach keine Information darüber, aber ich kann nicht glauben, dass ich der erste und einzige bin, der auf diese Idee kommt.
Die Lage ist (stark verkürzt die): Ich ändere etwas an einem Datensatz und aktualisiere danach, damit alles seine Ordnung hat, das Formular. Nun ist alles, richtig, der geänderte Datensatz erscheint an der richtigen Stelle, aber der Datensatzcursor steht auf dem ersten Datensatz der Tabelle. Ich möchte aber, dass er weiterhin auf dem Datensatz steht, den ich gerade geändert habe. Nichts leichter als das, dachte ich, es kann ja nicht mehr als zwei Zeilen erfordern: die eindeutige Kennung des Darensatzes speichern, die Aktualisierung vornehmen und wieder zu dem Datensatz springen. Mit irgendwas wie »search (Spalte, ID)« muss da ja machbar sein.
Nun, ja. Bisher habe ich keinen Hinweis darauf finden können, dass ich programmgesteuert einen bestimmten Datensatz suchen und anzeigen kann. (Mit einem SQL-Befehl ist das einfach, aber ich will den Cursor in der Tabelle verschieben, nicht im Ergebnis einer Suche.)
Kann mir jemand sagen, ob das möglich ist? Oder gibt es wirklich nur die Möglichkeit, dass ich in einer Schleife die ganze Tabelle von Anfang bis Ende Datensatz für Datensatz durchsuche, bis der Datensatz gefunden ist?
Die Lage ist (stark verkürzt die): Ich ändere etwas an einem Datensatz und aktualisiere danach, damit alles seine Ordnung hat, das Formular. Nun ist alles, richtig, der geänderte Datensatz erscheint an der richtigen Stelle, aber der Datensatzcursor steht auf dem ersten Datensatz der Tabelle. Ich möchte aber, dass er weiterhin auf dem Datensatz steht, den ich gerade geändert habe. Nichts leichter als das, dachte ich, es kann ja nicht mehr als zwei Zeilen erfordern: die eindeutige Kennung des Darensatzes speichern, die Aktualisierung vornehmen und wieder zu dem Datensatz springen. Mit irgendwas wie »search (Spalte, ID)« muss da ja machbar sein.
Nun, ja. Bisher habe ich keinen Hinweis darauf finden können, dass ich programmgesteuert einen bestimmten Datensatz suchen und anzeigen kann. (Mit einem SQL-Befehl ist das einfach, aber ich will den Cursor in der Tabelle verschieben, nicht im Ergebnis einer Suche.)
Kann mir jemand sagen, ob das möglich ist? Oder gibt es wirklich nur die Möglichkeit, dass ich in einer Schleife die ganze Tabelle von Anfang bis Ende Datensatz für Datensatz durchsuche, bis der Datensatz gefunden ist?
Re: In Base einen bestimmen Datensatz ansteuern
wie änderst Du?...Ich ändere etwas an einem Datensatz und aktualisiere...der Datensatzcursor steht auf...
wie aktualisierst Du?
wie betrachtest Du Deine Daten?
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
Re: In Base einen bestimmen Datensatz ansteuern
Moin,
kein Problem, das geht, allerdings wäre es hilfreich zu wissen, wie du per Makro auf die Datenbank/das Formular zugreifst.
Hier mal ein Beispielcode passend zu einem strukturellen Formular mit dem Namen F_Adressen.
Beispieldatei anbei, einfach im Formular eine Zeile anwählen, dann auf den orangen Button klicken.
Gruß R
kein Problem, das geht, allerdings wäre es hilfreich zu wissen, wie du per Makro auf die Datenbank/das Formular zugreifst.
Hier mal ein Beispielcode passend zu einem strukturellen Formular mit dem Namen F_Adressen.
Code: Alles auswählen
Sub Reload
oForm = thisComponent.Drawpage.Forms.getbyName("F_Adressen")
nRow = oForm.Row
print "Cursor steht in Zeile " & nRow
oForm.reload
Print "Formular aktualisiert, Cursor steht am Anfang"
oForm.absolute(nRow)
Print "Zurück zu Zeile " & nRow
End Sub
Gruß R
- Dateianhänge
-
- Cursor_goto_current_row_after_form_reload.zip
- nur entpacken
- (126.13 KiB) 93-mal heruntergeladen
Windows 10: AOO, LO Linux Mint: AOO, LO
Re: In Base einen bestimmen Datensatz ansteuern
Das hilft leider nichts. Wenn die Tabelle neu sortiert wird, steht der betreffende Datensatz nicht mehr in derselben Zeile. Ich kann also zu der Zeile springen, wo er vorher war, ich will aber bei diesem Satensatz bleiben. Das geht eigentlich ganz einfach: Ich speichere die eindeutige ID des Datensatzes und suche dann den Datensatz, der diese ID hat. Die Frage ist, wie kann ich den suchen? Gibt es dafür wirklich keine Methode, die das effizient erledigt?
Re: In Base einen bestimmen Datensatz ansteuern
Die effektivste Methode dürfte sein, es der Datenbank zu überlassen, wie sie speichert.
Das entsprechende SQL-Kommando wäre ein
Code: Alles auswählen
UPDATE tabelle SET spalte = wert WHERE id-spalte = "gespeicherte id"
Mfg, Jörn
LO 6.0.7 (32Bit) Win8.1 Pro 32 Bit/ LO 6.3.2 Win10 64Bit / LO 6.0.7 Win7 Pro 64 Bit
Re: In Base einen bestimmen Datensatz ansteuern
Moin,
ich glaube zwar nicht, dass es nötig ist, aber man kann das Formular natürlich nach dem Reload durchsuchen.
Viel Spaß damit
Gruß R
ich glaube zwar nicht, dass es nötig ist, aber man kann das Formular natürlich nach dem Reload durchsuchen.
Code: Alles auswählen
Sub Reload
dim nRow as long
oForm = thisComponent.Drawpage.Forms.getbyName("F_Adressen")
nid = oForm.columns.ID.getint' aktuelle ID speichern
oForm.reload
do
wait 10
loop until oform.isloaded
oResultset = oForm.createResultSet
oResultset.beforefirst
nCounter = 1
while oResultset.next
nIDFound = oResultset.columns.ID.getint
if nIDFound = nid Then
nRow = nCounter' Zeile, in der die aktuelle ID gefunden wurde, merken
endif
nCounter = nCounter + 1
wend
oForm.absolute(nRow)' zur gefundenen Zeile springen
End Sub
Gruß R
Windows 10: AOO, LO Linux Mint: AOO, LO
An alle, die das LibreOffice-Forum nutzen:
Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.
❤️ Vielen lieben Dank für Ihre Unterstützung ❤️