🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

[gelöst] Laufzeitfehler bei updateRow()

Alles zur Programmierung im LibreOffice.
Antworten
hinti
Beiträge: 24
Registriert: Fr 15. Jan 2016, 22:35

[gelöst] Laufzeitfehler bei updateRow()

Beitrag von hinti » So 17. Jan 2016, 21:17

Hallo!

Ich versuche gerade eine kleine Mitgliederverwaltung für unseren Verein in Base zu machen. Es ist mein erstes Base Projekt und da hab ich noch so meine Probleme. Ich verwende LO 4.4 (Linux) und ist mit MySQL verbunden.

Ich habe ein Formular mit Unterformular in dem jeweils ein Tabellen-Steuerelement integriert ist. In der Tabelle im UF habe ich die Felder "Jahr", "eingewinterte Völker", ausgewinterte Völker" und "Verlustse in Prozent" Das letzte Feld wird nur berechnet und nicht in der DB gespeichert.

Wenn bei den Feldern eingewinterte Völker und bei ausgewinterte Völker der Fokusverlust eintritt, sollten die Daten im UF gespeichert werden, damit das Feld Verluste in Prozent sofort aktualisiert wird.

Der Code bei Fokusverlust:

Code: Alles auswählen

Sub aktualisieren

dim oDoc AS OBJECT
dim oDrawpage AS OBJECT
dim oForm AS Object
dim oSubForm AS Object

oDoc = thisComponent
oDrawpage = oDoc.drawpage
oForm = oDrawpage.forms.getByName("Imker_Voelkerverluste")
oSubForm = oForm.getByName("UF_Verluste")

oSubForm.updateRow()

End Sub
Wenn ich jetzt bestehende Datensätze ändere wird alles wie gewollt aktualisiert. Wenn ich aber einen neuen Datensatz eingebe bekomme ich bei oSubForm.updaterow() eine Fehlermeldung:
BASIC-Laufzeitfehler.
Es ist eine Ausnahme aufgetreten
Type: com.sun.star.sdbc.SQLException
Message: Fehler in der Funktionsfolge..
Wo könnte das Problem sein?

Danke.
Zuletzt geändert von hinti am So 17. Jan 2016, 22:20, insgesamt 1-mal geändert.

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Laufzeitfehler bei updateRow()

Beitrag von F3K Total » So 17. Jan 2016, 21:49

Versuch mal:

Code: Alles auswählen

    if  oSubForm.isnew then 
        if oSubForm.ismodified then oSubForm.insertrow 
    else  
        oSubForm.updaterow
    endif
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

hinti
Beiträge: 24
Registriert: Fr 15. Jan 2016, 22:35

Re: Laufzeitfehler bei updateRow()

Beitrag von hinti » So 17. Jan 2016, 22:04

Hallo!
Dane für die Antwort.
Ich habs jetzt auch hingekriegt

Code: Alles auswählen

if oSubForm.isnew then
oSubForm.insertRow()
oSubForm.updateRow()
else
oSubForm.updateRow()
end if
Was macht oSubForm.ismodified?

Lg.

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Laufzeitfehler bei updateRow()

Beitrag von F3K Total » So 17. Jan 2016, 22:12

Es prüft, ob nach dem Sprung auf eine neue Zeile, die in diesem Augenblick noch nicht erstellt ist, etwas an dieser Zeile modifiziert wurde, denn wenn nicht, kann die Zeile nicht eingefügt werden, da nix zum Einfügen vorhanden ist.
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

hinti
Beiträge: 24
Registriert: Fr 15. Jan 2016, 22:35

Re: Laufzeitfehler bei updateRow()

Beitrag von hinti » So 17. Jan 2016, 22:19

Hast Recht, ohne ismodified bekomme ich einen Laufzeitfehler wenn die Felder leer sind.

Danke nochmal für die Perfekte Hilfe.

Lg.

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: Laufzeitfehler bei updateRow()

Beitrag von gogo » So 17. Jan 2016, 22:40

Das "ismodified" hat mit Deinem Fehler "nichts" zu tun. UpdateRow kann nur einen bestehenden Datensatz updaten. Daher der Fehler: "Fehler in Funktionsfolge" - was so viel heisst wie: Man kann nichts updaten bevor es eingfügt wurde. Wenn Du in einem Formular zum Neuen Datensatz wechselst wird dieser noch nicht in der Datenbank angelegt, er existiert noch gar nicht (sondern nur ein paar ausgefüllte Kontrollelemente), und muss zunächst mal eingefügt werden.
Wenn du das "ismodified" NICHT verwendest (also in dem Makro das Du gepostet hast), dann wirst Du manchmal wieder einen "Fehler in Funktionsfolge" bekommen. Und zwar bei "oSubForm.insertRow()" und immer dann, wenn Du bei einem neuen Datensatz bist und noch nichts eingetragen hast - kein Leerzeichen oder ähnliches. Dann bedeutet der Fehler allerdings: Man kann nichts einfügen, wenn's noch nicht da ist ;) .
Das ismodified vorher testet genau das - es fragt ob es schon was zum Einfügen gibt.

Edit - hab' nicht gesehen dass das schon geklärt wurde, und das Forum hat mich nicht gewarnt, dass es Posts zwischen dem Klick auf Reply und meinem Post gab - sry
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

hinti
Beiträge: 24
Registriert: Fr 15. Jan 2016, 22:35

Re: [gelöst] Laufzeitfehler bei updateRow()

Beitrag von hinti » So 17. Jan 2016, 23:02

Hallo gogo!

Trotzdem Danke für deine ausführliche Erklärung.

Lg.


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten