Mehrere Felder mit Inhalt eines anderen Feldes füllen

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Der_Fummler
Beiträge: 8
Registriert: Mi, 06.07.2011 16:17

Mehrere Felder mit Inhalt eines anderen Feldes füllen

Beitrag von Der_Fummler »

Ich komme im Augenblick nicht weiter bei einem Problem was ich wohl wegen Verständnissproblemen mit Base nicht gelöst bekomme. Ich bin Umsteiger von Lotus Approach auf Base und quäle mich noch mit der anderen Programmierung herum.

Also hier mein Vorhaben:
Ich habe eine Tabelle in der unteranderem 3 Felder stehen für Dateinamen von Bildern die heissen image, small_image,thumbnail. Also z.B. /tollesbild178.jpg. Bei den meisten Datensätzen sind alle Felder vom Inhalt gleich da auch alle Bilder gleich sind da das Programm automatisch die Bilder scalieren kann wofür die Datenbank als Import benötigt wird. Also müsste ich meistens (in ca. 90% der Datensätze) den Inhalt des ersten Feldes image automatisch in die anderen beiden Felder small_image und thumbnail kopieren lassen. Normalerweise wie ich es aus Approach gewohnt bin kann ich in dem Feld image ein Makro hinterlegen was den Inhalt des Feldes image bei verlassen des Feldes in small_image und thumbnail kopiert. Eine solche Funktion finde ich in Base nicht und auch das aufzeichnen eines Makros über das Menü Extras klappt nicht weil ich wohl eine Makroaufzeichnung starten kann aber kein erstelltes Makro irgendwo wiederfinde.

Könnt Ihr mir sagen wie ich am besten über das Klicken eines Buttons diese Kopierfunktion ausführen kann also ein Button mit dem passenden Makro belegen kann ?

Tabelle heisst Tabelle1 und Openoffice ist 3.3.0 auf Windows.

Viele Grüsse
Chris
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Mehrere Felder mit Inhalt eines anderen Feldes füllen

Beitrag von komma4 »

Willkommen im Forum

Der_Fummler hat geschrieben:in die anderen beiden Felder small_image und thumbnail kopieren lassen.
Bei BASE kannst Du das in der ODB unter Extras>SQL... mit SQL-Befehlen erledigen:

Code: Alles auswählen

UPDATE "Tabelle1" Set "small_image" = "image" WHERE "small_image" = ''
Das Letztere sind zwei einfache Apostrophen: '
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Mehrere Felder mit Inhalt eines anderen Feldes füllen

Beitrag von DPunch »

Aloha
komma4 hat geschrieben:Das Letztere sind zwei einfache Apostrophen:
Die meisten DBMS dürften das so aber nicht akzeptieren, solange das Feld nicht ausdrücklich auf einen Leerstring gesetzt wurde.
Auf der sicheren Seite wäre man mit dem Zusatz

Code: Alles auswählen

OR "small_image" IS NULL
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Mehrere Felder mit Inhalt eines anderen Feldes füllen

Beitrag von komma4 »

Guter Einwand - Danke.
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Der_Fummler
Beiträge: 8
Registriert: Mi, 06.07.2011 16:17

Re: Mehrere Felder mit Inhalt eines anderen Feldes füllen

Beitrag von Der_Fummler »

Vielen Dank für die Antworten und die Begrüssung,
werde ich morgen gleich ausprobieren. Heute komme ich nicht mehr an den Rechner ran wo ich programmiere.

Melde mich aber auf jeden Fall ob es geklappt hat damit Andere die eventuell ebenfalls vor einem solchen Problem stehen dies als Hilfe nehmen können.

Viele Grüsse
Chris
Der_Fummler
Beiträge: 8
Registriert: Mi, 06.07.2011 16:17

Re: Mehrere Felder mit Inhalt eines anderen Feldes füllen

Beitrag von Der_Fummler »

Hallo, hat soweit geklappt, doch wie kann ich das jetzt auf einen Button im Formular legen ? So muss ich das ja immer wieder neu eintragen im direkten SQL Ausführbefehl.

Gruss
Chris
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Mehrere Felder mit Inhalt eines anderen Feldes füllen

Beitrag von DPunch »

Aloha

Beim Button unter Ereignisse -> Aktion ausführen zuweisen

Code: Alles auswählen

	sTablename = "meineTabelle"
	oForm = thisComponent.Drawpage.Forms(0)
	oConnection = oForm.ActiveConnection
	oStatement = oConnection.createStatement
	sSQL = "UPDATE """ & sTablename & """ SET ""small_image"" = ""image"" WHERE ""small_image"" = '' OR ""small_image"" IS NULL"
	oStatement.executeUpdate(sSQL)
	sSQL = "UPDATE """ & sTablename & """ SET ""thumbnail"" = ""image"" WHERE ""thumbnail"" = '' OR ""thumbnail"" IS NULL"
	oStatement.executeUpdate(sSQL)
	oForm.reload
Der_Fummler
Beiträge: 8
Registriert: Mi, 06.07.2011 16:17

Re: Mehrere Felder mit Inhalt eines anderen Feldes füllen

Beitrag von Der_Fummler »

DPunch hat geschrieben:Aloha

Beim Button unter Ereignisse -> Aktion ausführen zuweisen

Code: Alles auswählen

	sTablename = "meineTabelle"
	oForm = thisComponent.Drawpage.Forms(0)
	oConnection = oForm.ActiveConnection
	oStatement = oConnection.createStatement
	sSQL = "UPDATE """ & sTablename & """ SET ""small_image"" = ""image"" WHERE ""small_image"" = '' OR ""small_image"" IS NULL"
	oStatement.executeUpdate(sSQL)
	sSQL = "UPDATE """ & sTablename & """ SET ""thumbnail"" = ""image"" WHERE ""thumbnail"" = '' OR ""thumbnail"" IS NULL"
	oStatement.executeUpdate(sSQL)
	oForm.reload
Fantastisch,
genau das habe ich gesucht und auch für zukünftige Aufgaben kann ich das super einsetzen. Damit kann ich nun auch weitere Buttons für andere Aufgaben definieren. Muss mir dann nur noch die SQL Befehle zusammenbasteln.
So langsam komme ich mit dem Umstieg von Approach auf Base ans laufen.

Allerdings führen die Befehle von oben dazu, das alle Datensätze die Bildfelder kopieren. Geht das nicht auch nur mit dem aktuell angezeigten Datensatz weil ansonsten bei 10% der Datensätze Fehler entstehen würden ?

Gibt es im Netz ein gute Anlaufstelle zum erlernen der Base SQL Befehle ?

Viele Grüsse
Chris
Zuletzt geändert von Der_Fummler am Fr, 08.07.2011 09:05, insgesamt 3-mal geändert.
pmoegenb
********
Beiträge: 4330
Registriert: Di, 22.06.2004 12:02
Wohnort: 71134 Aidlingen
Kontaktdaten:

Re: Mehrere Felder mit Inhalt eines anderen Feldes füllen

Beitrag von pmoegenb »

Der_Fummler hat geschrieben: Gibt es im Netz ein gute Anlaufstelle zum erlernen der Base SQL Befehle ?
Z. B. hier: http://sql.1keydata.com/de/
Gruß

Peter
---------------------------------------------------------------------------
Windows 7 Prof. 64-bit SP1, LibreOffice 4.3.6.2 und AOO 4.1.1
Der_Fummler
Beiträge: 8
Registriert: Mi, 06.07.2011 16:17

Re: Mehrere Felder mit Inhalt eines anderen Feldes füllen

Beitrag von Der_Fummler »

Danke,
na dann werde ich mich mal an die Arbeit machen.

Gruss
Chris


Moderation,4: full quote gelöscht
Der_Fummler
Beiträge: 8
Registriert: Mi, 06.07.2011 16:17

Re: Mehrere Felder mit Inhalt eines anderen Feldes füllen

Beitrag von Der_Fummler »

Code: Alles auswählen

sTablename = "meineTabelle"
   oForm = thisComponent.Drawpage.Forms(0)
   oConnection = oForm.ActiveConnection
   oStatement = oConnection.createStatement
   sSQL = "UPDATE """ & sTablename & """ SET ""small_image"" = ""image"" WHERE ""small_image"" = '' OR ""small_image"" IS NULL"
   oStatement.executeUpdate(sSQL)
   sSQL = "UPDATE """ & sTablename & """ SET ""thumbnail"" = ""image"" WHERE ""thumbnail"" = '' OR ""thumbnail"" IS NULL"
   oStatement.executeUpdate(sSQL)
   oForm.reload
Kann man diesen Code auch noch so ändern das nur der aktuelle Datensatz geändert wird ?
So macht er ja immer die gesamte Tabelle und das wäre ca. 10% der Datensätze falsch.

Habe mir schon mal die SQL Befehle angesehen aber das irgendwie nicht hinbekommen. Dachte man muss einfach nur den Tabellennamen wegnehmen damit nur der aktuelle Datensatz genommen wird, aber das brachte nur einen Fehler.
Könnt Ihr mir bitte sagen wie ich den Code verändern muss ?

Gruss
Chris
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Mehrere Felder mit Inhalt eines anderen Feldes füllen

Beitrag von DPunch »

Aloha
Der_Fummler hat geschrieben:Dachte man muss einfach nur den Tabellennamen wegnehmen damit nur der aktuelle Datensatz genommen wird, aber das brachte nur einen Fehler.
Nein, so einfach ist das nicht. Für die Datenbank gibt es keinen "aktuellen Datensatz", nur für das Formular bzw. das zugrunde liegende RowSet.
Der_Fummler hat geschrieben:Könnt Ihr mir bitte sagen wie ich den Code verändern muss ?
Einem Button im Formular zuweisen:

Code: Alles auswählen

	oDoc = thisComponent
	oForm = oDoc.Drawpage.Forms(0)
	If Len(oForm.getString(oForm.findColumn("small_image"))) = 0 Then
		oForm.updateString(oForm.findColumn("small_image"),oForm.getString(oForm.findColumn("image"))
	End If
	If Len(oForm.getString(oForm.findColumn("thumbnail"))) = 0 Then
		oForm.updateString(oForm.findColumn("thumbnail"),oForm.getString(oForm.findColumn("image"))
	End If
Der_Fummler
Beiträge: 8
Registriert: Mi, 06.07.2011 16:17

Re: Mehrere Felder mit Inhalt eines anderen Feldes füllen

Beitrag von Der_Fummler »

Klasse,
habe ich sofort eingebaut und es klappt super.
Wenn ich das richtig sehe geht das also nur über logische Stringfunktionen und Abfragen die nicht aus Feldern sondern aus 'Spalten' geholt werden.
So hätte ich das niemals angedacht aber so langsam komme ich dank Eurer Hilfe in Gang mit Base.
Ist aber doch schon ziemlich anders wie ich es aus meinem alten Approach kenne. Aber man will ja auch weiterlernen.

Ein wenig stutzig hat mich noch die Exportfunktion aus Formularen gemacht. Da steht im Menü oben Exportieren als PDF und Exportieren. Aber im Exportieren kann man auch nur als PDF exportieren.
Um diese Werte als CSV zu exportieren muss man also immer zur Tabelle gehen. Aus dem Formular geht es wohl nicht. Ist zwar nicht so tragisch aber eben gewöhnungsbedürftig. Auch das es wohl keine Funktion gibt -> Datensatz kopieren <- also einfach alle Daten in einem neuen Datensatz anlegen wenn sich nur wenige Felder unterscheiden.


Gruss
Chris
Antworten