Seite 1 von 1
Mehrere bestimmte Zeilen automatisch füllen lassen
Verfasst: Mi, 12.01.2011 00:51
von JohnHarper
Hallo an alle.
Ich suche schon ziemlich lange nach einer Lösung für mein Problem, aber bin nicht fündig geworden (Bücher, Google, Forensuche).
Ich habe eine Tabelle und darin sind verschiedene Gebiete nach Gruppen unterteilt (A,B,C,...). Manche Gruppen sollen einen gleichen Wert erhalten (z.B.). Ich will nun aber nicht jedes Mal einen SQL Befehl manuell eingeben und schon gar nicht jedes Mal für jedes Gebiet einzeln reinschreiben.
Ich hätte es gerne irgendwie hinbekommen, dass ich diese lange Liste entweder durch ein Makro, ein Kombinationsfeld oder sonst irgendwie mit einem bestimmten Wert füllen kann.
Bisher ging dies nur mit SQL und Where, aber ich würde es gerne mit einem Kombinationsfeld machen, da ich eine zweite Tabelle habe in der die festgelegte Anzahl drin steht. Den Wert in das Kombinationsfeld zu bekommen ist nicht schwer, aber den Wert auf bestimmte Zeilen einer Spalte in der Datenbank-Tabelle zu übernehmen dafür sehr. Welches wäre der beste, stabilste und auch einfachste Weg dies durchzuführen.
Danke im Voraus!
Re: Mehrere bestimmte Zeilen automatisch füllen lassen
Verfasst: Mi, 12.01.2011 15:41
von gogo
Deinen SQL-Text kennst Du ja,
Den Wert aus dem Kontrollfeld des Formulars bekommst Du mit
Code: Alles auswählen
dim sWert as String
oDoc = StarDesktop.CurrentComponent
oForm = oDoc.DrawPage.Forms.GetByIndex(0)
oFeld = oForm.getByName("Name des Kontrollfeldes wie es im Formularnavigator steht")
sWert = oFeld.text
nun setzt Du Deinen SQL-Text zusammen und führst diesen dann aus.
so etwa:
Code: Alles auswählen
dim SQLTXT as string
SQLTXT = "Update ""DeinTabellenname"" set ""DeinFeldname = "" + sWert + " where ...
oStatement = ThisDatabaseDocument.CurrentController.ActiveConnection.createStatement
oResultSet = oStatement.executeUpdate( SQLTXT )
msgbox oResultSet & " Datensätze wurden verändert!"
g
Re: Mehrere bestimmte Zeilen automatisch füllen lassen
Verfasst: Mi, 12.01.2011 20:37
von JohnHarper
Hi. Danke schon einmal für die schnelle Antwort.
Hab es ausprobiert, aber ich erhalte andauernd den Fehler "BASIC-Laufzeitfehler. Es ist eine Exception aufgetreten Type: com.sun.star.container.NoSuchElementException Message:.
Hab den Namen bei
oFeld = oForm.getByName("Name des Kontrollfeldes wie es im Formularnavigator steht")
den Namen geändert, das Makro gespeichert und an die Schaltfläche gehängt, aber immer der Fehler... Was mache ich falsch? Oder hab ich was vergessen beim Makro?
Danke
Re: Mehrere bestimmte Zeilen automatisch füllen lassen
Verfasst: Mi, 12.01.2011 21:08
von gogo
in welcher Zeile tritt der Fehler denn auf?
g
Re: Mehrere bestimmte Zeilen automatisch füllen lassen
Verfasst: Do, 13.01.2011 01:17
von JohnHarper
In der Zeile die mit oFeld beginnt. Hab mehrfach überprüft, aber der Name ist richtig vom kombifeld.
Re: Mehrere bestimmte Zeilen automatisch füllen lassen
Verfasst: Do, 13.01.2011 09:05
von gogo
Versuch mal das:
Code: Alles auswählen
oDoc = StarDesktop.CurrentComponent
oForm = oDoc.DrawPage.Forms.GetByIndex(0)
on error goto RausDaAberSchnell
for n=0 to 1000
oControl=oForm.getByIndex(n)
myselect=oControl.name
msgbox "Index: " & n & " ergibt Kontrollfeld-Name: " & myselect
next n
on error goto 0
exit sub
RausDaAberSchnell:
msgbox "Index: " & n & " zu hoch! (exit Makro)"
Wenn Du den richtigen Index (z.B. 2) weisst, kannst Du dann:
oFeld = oForm.getByName("Name des Kontrollfeldes wie es im Formularnavigator steht")
durch
oFeld = oForm.getByIndex(2)
ersetzen
g
Re: Mehrere bestimmte Zeilen automatisch füllen lassen
Verfasst: Do, 13.01.2011 12:24
von JohnHarper
Hi
Hab den Befehl ausgeführt und den Index für das Kombinationsfeld erhalten. Soweit so gut. Nun zeigt er mir aber einen Fehler an bei +sWert+
Unexpected Token in Statement. Ich glaube er meint das + zeichen. Weil der Rest stimmt so (hoffe ich)

.
Code: Alles auswählen
REM ***** BASIC *****
Sub EingabeBeilage1
dim sWert as String
oDoc = StarDesktop.CurrentComponent
oForm = oDoc.DrawPage.Forms.GetByIndex(0)
oFeld = oForm.getByIndex(4)
sWert = oFeld.text
dim SQLTXT as string
SQLTXT = "Update ""Datenbankname"" set ""Feldname"" = +sWert+"
oStatement = ThisDatabaseDocument.CurrentController.ActiveConnection.createStatement
oResultSet = oStatement.executeUpdate(SQLTXT)
msgbox oResultSet & " Datensätze wurden verändert!"
End Sub
Stimmt es mit dem + Zeichen? hab es durch ' und & ersetzt aber half nix. Habe es weggelassen und bekam Fehler. Aber die Anbindung an das Feld klappt schon einmal

.
Noch mals Danke schön
Re: Mehrere bestimmte Zeilen automatisch füllen lassen
Verfasst: Do, 13.01.2011 13:15
von gogo
SQLTXT = "Update ""Datenbankname"" set ""Feldname"" = +sWert+"
kann nicht funktionieren, da die "+" in den String reinwandern und nicht der Wert von "sWert"!
Am besten mal den SQLTXT mit msgbox anzeigen lassen, dann weisst Du was ich meine.
Eine Zahl bindest Du folgendermaßen in einen String ein:
Die Zahl steht dann blank im String
Einen Text so:
Der Text steht dann als
"Text" im String
oder so:
Der Text steht dann als
'Text' im String
Am besten mal den SQLTXT mit msgbox anzeigen lassen bevor Du das Update laufen lässt. Wenn der Text den Du in der MsgBox-Message siehst exakt so eingetippt unter "Extras/SQL" funktioniert, dann sollte er auch im Makro funktionieren...
g
Re: Mehrere bestimmte Zeilen automatisch füllen lassen
Verfasst: Do, 13.01.2011 16:18
von JohnHarper
Danke Danke Danke
Es läuft nun alles. Habe mir gleich mal mehrere Kombiboxen gemacht und kann nun mit einem Klick auf die Schaltfläche 6 Spalten ändern

. Und durch Modifikation des SQL-Befehls, kann ich die Boxen nun abhängig vom Datum (Kalenderwoche und Jahr) nun wochengezielt abändern lassen

.
Danke gogo... warst mir eine riesen Hilfe!!!