Mehrere Felder mit Inhalt eines anderen Feldes füllen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Mehrere Felder mit Inhalt eines anderen Feldes füllen

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

von Der_Fummler » Di, 12.07.2011 11:45

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

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

von DPunch » Di, 12.07.2011 09:45

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

von Der_Fummler » Di, 12.07.2011 08:45

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

von Der_Fummler » Fr, 08.07.2011 08:51

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

von pmoegenb » Fr, 08.07.2011 08:31

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

von Der_Fummler » Fr, 08.07.2011 07:52

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

von DPunch » Do, 07.07.2011 17:02

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

von Der_Fummler » Do, 07.07.2011 15:01

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

von Der_Fummler » Mi, 06.07.2011 21:18

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

von komma4 » Mi, 06.07.2011 20:23

Guter Einwand - Danke.

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

von DPunch » Mi, 06.07.2011 19:13

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

von komma4 » Mi, 06.07.2011 18:19

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: '

Mehrere Felder mit Inhalt eines anderen Feldes füllen

von Der_Fummler » Mi, 06.07.2011 16:32

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

Nach oben