🙏 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. 🤗

Base-"Datensatz speichern"-Button (Diskettenknopf) per Makro abfragen?

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: Base-"Datensatz speichern"-Button (Diskettenknopf) per Makro abfragen?

Beitrag von gogo » Sa 9. Jul 2016, 14:47

versuch' mal den Ladezustand des Formulars abzufragen.
am besten vor "'Ergänzung um Sicherheitsfragen" folgenden Block einfügen

Code: Alles auswählen

Dim j
j=0
if NOT oformAuftrag.isloaded then
	do 
		j=j+1
		wait 10
		if oformAuftrag.isloaded then
			msgbox "geladen!!! (dauerte " & format(j/100, "#0.00") & " Sekunden)"
			exit do
		end if
	loop while j < 201
end if

'Ergänzung um Sicherheitsfragen
DIM intFrage As Integer
Zuletzt geändert von gogo am Sa 9. Jul 2016, 15:05, insgesamt 2-mal geändert.
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

Freischreiber
* LO-Experte *
Beiträge: 834
Registriert: Fr 28. Mär 2014, 10:41

Re: Base-"Datensatz speichern"-Button (Diskettenknopf) per Makro abfragen?

Beitrag von Freischreiber » Sa 9. Jul 2016, 15:03

Hi.

Das bringt keinerlei Reaktion. Irgendwann wird gefiltert.

Gruß
Freischreiber
Freischreiber nutzt seit 1/2025 LibreOffice Version 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de

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

Re: Base-"Datensatz speichern"-Button (Diskettenknopf) per Makro abfragen?

Beitrag von gogo » Sa 9. Jul 2016, 15:05

Irgendwann wird gefiltert.
auch bei veränderten Feldern?

allerdings: das Formular kann ja nur manuell geändert worden sein, wenn es schon offen war bevor es durch die Sub BuchungAuftragsformular aufgerufen wird - damit ist quasi sichergestellt, dass es auch geladen war. Einen Fehler wegen manuell veränderter Daten kriegst Du also nicht.
Wenn das Formular geöffnet war und ein Feld geändert wurde und Du rufst dann die Sub BuchungAuftragsformular nochmal auf, kommt bei mir die korrekte Info, dass es eine Änderung gab.
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

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

Re: Base-"Datensatz speichern"-Button (Diskettenknopf) per Makro abfragen?

Beitrag von gogo » Sa 9. Jul 2016, 15:12

... kannst Du mal nachsehen ob die Referenzierung auf oformAuftrag korrekt ist?
z.B.:

Code: Alles auswählen

...
msgbox "'" & oformAuftrag.name & "' in '" & oAuftragWriterDoc.Title & "'"
...
langsam bin ich mit meinem Latein am Ende :oops:
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

Freischreiber
* LO-Experte *
Beiträge: 834
Registriert: Fr 28. Mär 2014, 10:41

Re: Base-"Datensatz speichern"-Button (Diskettenknopf) per Makro abfragen?

Beitrag von Freischreiber » Sa 9. Jul 2016, 15:15

Klingt logisch, das Formular war ja schon auf.

Jetzt versucht: geöffnetes Formular mit zwei Änderungen. Keine Meldung wg. Ladezeit, erste Änderung gespeichert, zweite nicht.

Dann zweites Formular geschlossen. Jetzt nach Öffnen aus dem Makro die Meldung: "geladen!!! (dauerte 0,01 Sekunden)"
Freischreiber nutzt seit 1/2025 LibreOffice Version 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de

Freischreiber
* LO-Experte *
Beiträge: 834
Registriert: Fr 28. Mär 2014, 10:41

Re: Base-"Datensatz speichern"-Button (Diskettenknopf) per Makro abfragen?

Beitrag von Freischreiber » Sa 9. Jul 2016, 15:20

Ich verliere langsam den Überblick.

Du hattest da noch eine Änderung:
Anmerkung: ich hab' die Zuweisung des Formulars codetechnisch geändert

Code: Alles auswählen
oAuftragWriterDoc = ThisDatabaseDocument.getformdocuments.GetByName("f-Tabelle1").Open
oformAuftrag = oAuftragWriterDoc.DrawPage.Forms.getByName("MainForm")
Ich habe kein oAuftragWriterDoc, wie soll ich das einfügen? Ist das wichtig?

Deinen letzten Post habe ich gar nicht verstanden. Was für eine Messagebox ist das? Soll ich das einfügen?

Gruß
Freischreiber
Freischreiber nutzt seit 1/2025 LibreOffice Version 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de

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

Re: Base-"Datensatz speichern"-Button (Diskettenknopf) per Makro abfragen?

Beitrag von gogo » Sa 9. Jul 2016, 15:26

die ursprüngliche Zuordnung war:

Code: Alles auswählen

   oformAuftraege = oEvent.Source.Model.Parent 'Braucht nur ein Parent-Formular, egal wie es heißt!
   oformAuftrag = ThisDatabaseDocument.getformdocuments.GetByName("f-Tabelle1")
   oformAuftrag.open
   oformAuftrag = oformAuftrag.Component.drawpage.forms(0)
wobei:
oformAuftraege = ... nicht benötigt wird und
oformAuftrag = oformAuftrag.Component.drawpage.forms(0) ... eine Neuzuweisung auf eine bestehende Variable ist, und zwar ein Child zum ursprünglichen oformAuftrag - das funktioniert normalerweise, aber evtl. löst das Dein Problem aus.
So wie ich das zugeordnet habe dürfte es keine Konflikte geben.

Das eigentliche Problem ist, dass Du nicht testen kannst ob das das Fehlverhalten auslöst, da Du den Status des Feldes nicht in 1/100 Sekunde ändern kannst ;)
Wie schon gesagt: einen geänderten Datensatz deswegen fälschlicherweise nicht nachzufragen wird nicht passieren. Wenn Du also das 2. Formular öffnest, etwas änderst und dann den Button im ersten Formular auslöst und die Änderungsnachfrage kommt, dann müsste die Funktionalität gegeben sein.
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

Freischreiber
* LO-Experte *
Beiträge: 834
Registriert: Fr 28. Mär 2014, 10:41

Re: Base-"Datensatz speichern"-Button (Diskettenknopf) per Makro abfragen?

Beitrag von Freischreiber » Sa 9. Jul 2016, 15:33

wobei:
oformAuftraege = ... nicht benötigt wird und
Natürlich wird das benötigt, aus dem Parentformular, wo das Makro ausgelöst wird, hole ich doch die Auftragsnummer, nach der das zweite Formular gefiltert werden soll:
stAuftragID = oformAuftraege.getString(oformAuftraege.findcolumn("Auftragnr"))
Wie schon gesagt: einen geänderten Datensatz deswegen fälschlicherweise nicht nachzufragen wird nicht passieren.
Aber genau das passiert doch! Das ist doch mein Problem hier.

Kann ich dir nochmal das ganze Makro hier reinstellen und du machst deine Änderungen im Makro? So weiß ich nämlich nicht, wo was hingehört und was rauskann.

Gruß
Freischreiber
Freischreiber nutzt seit 1/2025 LibreOffice Version 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de

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

Re: Base-"Datensatz speichern"-Button (Diskettenknopf) per Makro abfragen?

Beitrag von gogo » Sa 9. Jul 2016, 15:58

Freischreiber hat geschrieben:
wobei:
oformAuftraege = ... nicht benötigt wird und
Natürlich wird das benötigt, aus dem Parentformular, wo das Makro ausgelöst wird, hole ich doch die Auftragsnummer, nach der das zweite Formular gefiltert werden soll:
dachte ich mir schon, hat aber nix mit der kleinen BeispielDB zu tun...
Freischreiber hat geschrieben:
Wie schon gesagt: einen geänderten Datensatz deswegen fälschlicherweise nicht nachzufragen wird nicht passieren.
Aber genau das passiert doch! Das ist doch mein Problem hier.
Auch in der BeispielDB die ich hochgeladen habe (Test_2Forms.odb) wenn Du genau so:
...Wenn das Formular geöffnet war und ein Feld geändert wurde und Du rufst dann die Sub BuchungAuftragsformular nochmal auf, kommt bei mir die korrekte Info, dass es eine Änderung gab....
vorgehst?
Freischreiber hat geschrieben:Kann ich dir nochmal das ganze Makro hier reinstellen und du machst deine Änderungen im Makro? So weiß ich nämlich nicht, wo was hingehört und was rauskann.
immer her damit ;)
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

Freischreiber
* LO-Experte *
Beiträge: 834
Registriert: Fr 28. Mär 2014, 10:41

Re: Base-"Datensatz speichern"-Button (Diskettenknopf) per Makro abfragen?

Beitrag von Freischreiber » Sa 9. Jul 2016, 16:27

:D Danke!

Nein, die Beispiel-DB war nur, um das zu zeigen, was ich für einen Bug halte. Und es läßt sich dort durch deine 2s Wartezeit beheben. Nur in meiner richtigen DB klappt das nicht (gesplittet).

Hier das Makro, so wie es zur Zeit aussieht: (es wird z. B. von der Buchungstabelle aus gestartet, aus einer Buchungszeile, wo eine Auftragsnummer steht).

Könntest du das so abändern, daß deine geänderte Zuordnung drin ist? So, daß es keine Konflikte gibt?
(Die erweiterten Rückfragen, ob Änderungen rückgängig gemacht werden sollen, brauche ich eigentlich nicht. Es reicht, wenn die bei Nein einfach verworfen werden und dann gefiltert wird).

Gruß
Freischreiber

Code: Alles auswählen

Sub BuchungAuftragsFormular(oEvent)
	oformAuftraege = oEvent.Source.Model.Parent 'Braucht nur ein Parent-Formular, egal wie es heißt!
	stAuftragID = oformAuftraege.getString(oformAuftraege.findcolumn("Auftragnr"))
	oformAuftrag = ThisDatabaseDocument.getformdocuments.GetByName("f-Auftrag")
	oformAuftrag.open
	oformAuftrag = oformAuftrag.Component.drawpage.forms(0)

'Ladezustand des Formulars abfragen
Dim j
j=0
if NOT oformAuftrag.isloaded then
   do
      j=j+1
      wait 10
      if oformAuftrag.isloaded then
         msgbox "geladen!!! (dauerte " & format(j/100, "#0.00") & " Sekunden)"
         exit do
      end if
   loop while j < 201
end if

	'Ergänzung um Sicherheitsfragen
	DIM intFrage As Integer
	with oFormAuftrag
	' Entweder: ------------------------------
   '	wait 200
   ' oder:  ---------------------------------
      Dim i
      i=0
      Do While NOT .ismodified
        i=i+1
        wait 10 '... 1/100 Sekunde warten
        If i > 200 Then Exit Do '... Schleife nach ~2 Sekunde beenden
     Loop
     if i<201 AND i>0 then msgbox "Wartezeit = " & i/10 & " Sekunden"
   ' --------------------- ... Ende "oder" --
   
   		if .ismodified then
   			intFrage = MsgBox("Der angezeigte Datensatz wurde geändert. Änderungen speichern?", MB_ICONQUESTION + MB_YESNO + MB_DEFBUTTON1, "Makro BuchungAuftragsFormular") 
			'MB_DEFBUTTON1 macht das Ja zur vorgeschlagenen Antwort.
      			if intFrage = IDYES then
         			if .isnew then
            			.insertrow
         				else
            			.updaterow
        			end if
      			end if
   		end if
	end with
	'Ergänzung Ende. 
	
	oformAuftrag.Filter = "Auftragnr = '"+stAuftragID+"'" 
	'oFormAuftrag.ApplyFilter = TRUE (geht hier ohne)
	oFormAuftrag.reload
	
End Sub
Freischreiber nutzt seit 1/2025 LibreOffice Version 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de


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