Dateiauswahl in Textfeld - Daten nicht in DB übertragen

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

sarotti
****
Beiträge: 105
Registriert: So, 12.03.2006 17:40
Wohnort: Nähe Krefeld

Dateiauswahl in Textfeld - Daten nicht in DB übertragen

Beitrag von sarotti »

Hallo zusammen,

habe ein hoffentlich kleines Problem.

Ich habe ein Dateiauswahlfeld in meinem MySQL angebundenen Formular untergebracht. Die ausgewählte Datei wird per Makro automatisch ein ein mit einem Datenbankfeld verknüpftes Textfeld übertragen. Funktioniert sehr gut. Hier der Code:

Code: Alles auswählen

Sub Dateiauswahl1

DIM oDoc as Object, oForm as Object, oText as Object
DIM sTextFeld as Object
DIM sText as string


oDoc=ThisComponent
oForm= oDoc.DrawPage.Forms(0)

for n = 1 to 4
	oText(n)=oForm.getByName("DateiAusw" + n) 'Felder zur Dateiauswahl
	sText(n)=oText(n).text 

	sTextFeld=oForm.GetByName("Bild"+n) 'Felder Bild-Nr (Textfeld)

	if sText(n)<>"" then
		sTextFeld.text=sText(n)
	oText(n).text=""

	end if
next
oForm.UpdateRow()
call Bilder_Produkte_anzeigen 'Makro zur Ansicht der Bilder in dem Formular
end sub 
Jetzt das Problem: Ich bin davon ausgegangen, dass durch die Änderung des Inhaltes des jeweiligen Textfeldes das Formular die Info erhält, daß sich der Datensatz geändert hat. Aber weit gefehlt. Die Daten sind zwar im Textfeld sichtbar, allerdings werden diese nicht in die Datenbak übertragen. Auch der Befehl "oForm.UpdateRow()" hilft mir nicht weiter.

Wie kann ich es anstellen, dass die geänderten Textdaten unmittelbar übertragen werden. (Ich meine ohne diese per SQL Makro Befehl in die Datenbank zu übergeben.) Nützt auch nichts, dass ich dem Formular per Code sage, dass es geändert wurde ("oForm.isModified=true").... Gibt eine Fehlermeldung die besagt, dass es keine Änderung gab...

Danke :D

Gruss
sarotti
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Sarotti,

Du musst zunächst das System intern verstehen: Ein Formular erzeugt intern einen ResultSet auf der Basis einer SQL Abfrage. Dieser Resultset enthält nun alle Daten. Das Formular wiederum hat Kontrollelemente, die den Inhalt eines Feldes des Resultsets darstellen, quasi als Kopie.
Die Methode updateRow() speichert die Daten der aktuellen Reihe (Datensatz) des Resultsets zurück in die Datenbank. In dem Schritt wird die Reihe aber nicht "ubgeglichen und upgedatet" mit den in den Kontrollfeldern angezeigten Werten.
Hast du diese also geändert, wurde der Resultset noch lange nicht geändert - und die alten Daten werden gespeichert.
Was du machen kannst:
Nicht nur die Anzeige der Textfelder per Makro ändern, sondern auch die Inhalte des Resultsets, dann sollte es eigentlich funktionieren.

Also, einfach eine Zeile ergänzen, nämlich da :

Code: Alles auswählen

if sText(n)<>"" then
      sTextFeld.text=sText(n)
   oText(n).text=""
       oForm.updateString(1+ n, sText(n))  'Resultset wird verändert
   end if 
das "1+n" musst du natürlich anpasen auf die passende Splate :-)

Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Antworten