Seite 1 von 1

Mehrere Felder mit Inhalt eines anderen Feldes füllen

Verfasst: Mi, 06.07.2011 16:32
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

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

Verfasst: Mi, 06.07.2011 18:19
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: '

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

Verfasst: Mi, 06.07.2011 19:13
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

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

Verfasst: Mi, 06.07.2011 20:23
von komma4
Guter Einwand - Danke.

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

Verfasst: Mi, 06.07.2011 21:18
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

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

Verfasst: Do, 07.07.2011 15:01
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

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

Verfasst: Do, 07.07.2011 17:02
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

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

Verfasst: Fr, 08.07.2011 07:52
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

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

Verfasst: Fr, 08.07.2011 08:31
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/

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

Verfasst: Fr, 08.07.2011 08:51
von Der_Fummler
Danke,
na dann werde ich mich mal an die Arbeit machen.

Gruss
Chris


Moderation,4: full quote gelöscht

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

Verfasst: Di, 12.07.2011 08:45
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

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

Verfasst: Di, 12.07.2011 09:45
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

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

Verfasst: Di, 12.07.2011 11:45
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