Mehrere bestimmte Zeilen automatisch füllen lassen

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 bestimmte Zeilen automatisch füllen lassen

Re: Mehrere bestimmte Zeilen automatisch füllen lassen

von JohnHarper » Do, 13.01.2011 16:18

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

Re: Mehrere bestimmte Zeilen automatisch füllen lassen

von gogo » Do, 13.01.2011 13:15

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

Re: Mehrere bestimmte Zeilen automatisch füllen lassen

von JohnHarper » Do, 13.01.2011 12:24

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

Re: Mehrere bestimmte Zeilen automatisch füllen lassen

von gogo » Do, 13.01.2011 09:05

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

von JohnHarper » Do, 13.01.2011 01:17

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

von gogo » Mi, 12.01.2011 21:08

in welcher Zeile tritt der Fehler denn auf?

g

Re: Mehrere bestimmte Zeilen automatisch füllen lassen

von JohnHarper » Mi, 12.01.2011 20:37

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

von gogo » Mi, 12.01.2011 15:41

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

Mehrere bestimmte Zeilen automatisch füllen lassen

von JohnHarper » Mi, 12.01.2011 00:51

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!

Nach oben