BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> 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

Alles zur Programmierung im LibreOffice.
Antworten
Welsbach
Beiträge: 9
Registriert: Mo 22. Nov 2021, 09:34

In Base einen bestimmen Datensatz ansteuern

Beitrag von Welsbach » Fr 11. Feb 2022, 15:36

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?

gogo
Beiträge: 1072
Registriert: Sa 5. Feb 2011, 19:07

Re: In Base einen bestimmen Datensatz ansteuern

Beitrag von gogo » Fr 11. Feb 2022, 17:03

...Ich ändere etwas an einem Datensatz und aktualisiere...der Datensatzcursor steht auf...
wie änderst Du?
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

F3K Total
Beiträge: 2410
Registriert: So 10. Apr 2011, 10:10

Re: In Base einen bestimmen Datensatz ansteuern

Beitrag von F3K Total » Fr 11. Feb 2022, 17:11

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.

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
Beispieldatei anbei, einfach im Formular eine Zeile anwählen, dann auf den orangen Button klicken.
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

Welsbach
Beiträge: 9
Registriert: Mo 22. Nov 2021, 09:34

Re: In Base einen bestimmen Datensatz ansteuern

Beitrag von Welsbach » Sa 12. Feb 2022, 20:10

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?

Wanderer
Beiträge: 895
Registriert: Di 11. Feb 2014, 20:03
Wohnort: Berlin

Re: In Base einen bestimmen Datensatz ansteuern

Beitrag von Wanderer » Sa 12. Feb 2022, 21:22

Welsbach hat geschrieben:
Sa 12. Feb 2022, 20:10
... Gibt es dafür wirklich keine Methode, die das effizient erledigt?
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" 
Eine echte Datenbank sortiert normalerweise allenfalls den Index, nicht die gesamte Tabelle. Und einer der Vorteile einer Datenbank ist ja, dass man sich nicht mehr damit beschäftigen muss, wo etwas gespeichert wird.

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

F3K Total
Beiträge: 2410
Registriert: So 10. Apr 2011, 10:10

Re: In Base einen bestimmen Datensatz ansteuern

Beitrag von F3K Total » So 13. Feb 2022, 09:56

Moin,
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
Viel Spaß damit
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 ❤️

Antworten