Mehrere bestimmte Zeilen automatisch füllen lassen

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

JohnHarper
Beiträge: 9
Registriert: Mi, 12.01.2011 00:22

Mehrere bestimmte Zeilen automatisch füllen lassen

Beitrag 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!
gogo
*****
Beiträge: 207
Registriert: Mi, 10.11.2010 13:11

Re: Mehrere bestimmte Zeilen automatisch füllen lassen

Beitrag 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
g
LucidLynx/WinXP LibreOffice v3.3.2 ab 03/12 v3.3.2 & v3.4.5
JohnHarper
Beiträge: 9
Registriert: Mi, 12.01.2011 00:22

Re: Mehrere bestimmte Zeilen automatisch füllen lassen

Beitrag 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
gogo
*****
Beiträge: 207
Registriert: Mi, 10.11.2010 13:11

Re: Mehrere bestimmte Zeilen automatisch füllen lassen

Beitrag von gogo »

in welcher Zeile tritt der Fehler denn auf?

g
g
LucidLynx/WinXP LibreOffice v3.3.2 ab 03/12 v3.3.2 & v3.4.5
JohnHarper
Beiträge: 9
Registriert: Mi, 12.01.2011 00:22

Re: Mehrere bestimmte Zeilen automatisch füllen lassen

Beitrag von JohnHarper »

In der Zeile die mit oFeld beginnt. Hab mehrfach überprüft, aber der Name ist richtig vom kombifeld.
gogo
*****
Beiträge: 207
Registriert: Mi, 10.11.2010 13:11

Re: Mehrere bestimmte Zeilen automatisch füllen lassen

Beitrag 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
g
LucidLynx/WinXP LibreOffice v3.3.2 ab 03/12 v3.3.2 & v3.4.5
JohnHarper
Beiträge: 9
Registriert: Mi, 12.01.2011 00:22

Re: Mehrere bestimmte Zeilen automatisch füllen lassen

Beitrag 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) :D.

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 :-D.

Noch mals Danke schön
gogo
*****
Beiträge: 207
Registriert: Mi, 10.11.2010 13:11

Re: Mehrere bestimmte Zeilen automatisch füllen lassen

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

Code: Alles auswählen

" & sWert & "
Die Zahl steht dann blank im String

Einen Text so:

Code: Alles auswählen

""" + sWert + """
Der Text steht dann als "Text" im String


oder so:

Code: Alles auswählen

'" + sIDKunde + "'
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
g
LucidLynx/WinXP LibreOffice v3.3.2 ab 03/12 v3.3.2 & v3.4.5
JohnHarper
Beiträge: 9
Registriert: Mi, 12.01.2011 00:22

Re: Mehrere bestimmte Zeilen automatisch füllen lassen

Beitrag 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!!!
Antworten