Mehrere Felder mit Inhalt eines anderen Feldes füllen
Moderator: Moderatoren
-
- Beiträge: 8
- Registriert: Mi, 06.07.2011 16:17
Mehrere Felder mit Inhalt eines anderen Feldes füllen
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
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
- 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
Willkommen im Forum
Das Letztere sind zwei einfache Apostrophen: '
Bei BASE kannst Du das in der ODB unter Extras>SQL... mit SQL-Befehlen erledigen:Der_Fummler hat geschrieben:in die anderen beiden Felder small_image und thumbnail kopieren lassen.
Code: Alles auswählen
UPDATE "Tabelle1" Set "small_image" = "image" WHERE "small_image" = ''
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)
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)
Re: Mehrere Felder mit Inhalt eines anderen Feldes füllen
Aloha
Auf der sicheren Seite wäre man mit dem Zusatz
Die meisten DBMS dürften das so aber nicht akzeptieren, solange das Feld nicht ausdrücklich auf einen Leerstring gesetzt wurde.komma4 hat geschrieben:Das Letztere sind zwei einfache Apostrophen:
Auf der sicheren Seite wäre man mit dem Zusatz
Code: Alles auswählen
OR "small_image" IS NULL
- 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
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)
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)
-
- Beiträge: 8
- Registriert: Mi, 06.07.2011 16:17
Re: Mehrere Felder mit Inhalt eines anderen Feldes füllen
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
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
-
- Beiträge: 8
- Registriert: Mi, 06.07.2011 16:17
Re: Mehrere Felder mit Inhalt eines anderen Feldes füllen
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
Gruss
Chris
Re: Mehrere Felder mit Inhalt eines anderen Feldes füllen
Aloha
Beim Button unter Ereignisse -> Aktion ausführen zuweisen
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
-
- Beiträge: 8
- Registriert: Mi, 06.07.2011 16:17
Re: Mehrere Felder mit Inhalt eines anderen Feldes füllen
Fantastisch,DPunch hat geschrieben:Aloha
Beim Button unter Ereignisse -> Aktion ausführen zuweisenCode: 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
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.
-
- ********
- Beiträge: 4330
- Registriert: Di, 22.06.2004 12:02
- Wohnort: 71134 Aidlingen
- Kontaktdaten:
Re: Mehrere Felder mit Inhalt eines anderen Feldes füllen
Z. B. hier: http://sql.1keydata.com/de/Der_Fummler hat geschrieben: Gibt es im Netz ein gute Anlaufstelle zum erlernen der Base SQL Befehle ?
Gruß
Peter
---------------------------------------------------------------------------
Windows 7 Prof. 64-bit SP1, LibreOffice 4.3.6.2 und AOO 4.1.1
Peter
---------------------------------------------------------------------------
Windows 7 Prof. 64-bit SP1, LibreOffice 4.3.6.2 und AOO 4.1.1
-
- Beiträge: 8
- Registriert: Mi, 06.07.2011 16:17
Re: Mehrere Felder mit Inhalt eines anderen Feldes füllen
Danke,
na dann werde ich mich mal an die Arbeit machen.
Gruss
Chris
Moderation,4: full quote gelöscht
na dann werde ich mich mal an die Arbeit machen.
Gruss
Chris
Moderation,4: full quote gelöscht
-
- Beiträge: 8
- Registriert: Mi, 06.07.2011 16:17
Re: Mehrere Felder mit Inhalt eines anderen Feldes füllen
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
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
Aloha
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:Dachte man muss einfach nur den Tabellennamen wegnehmen damit nur der aktuelle Datensatz genommen wird, aber das brachte nur einen Fehler.
Einem Button im Formular zuweisen:Der_Fummler hat geschrieben:Könnt Ihr mir bitte sagen wie ich den Code verändern muss ?
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
-
- Beiträge: 8
- Registriert: Mi, 06.07.2011 16:17
Re: Mehrere Felder mit Inhalt eines anderen Feldes füllen
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
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