Seite 1 von 3

(gelöst) bestimmte Felder per Makro (Schalter) leeren

Verfasst: Mo, 30.04.2012 21:42
von schane65
Hallo !

Ich habe eine Adressdatenbank, in der zwei Suchfelder enthalten sind, die mit einer OK Taste gesteuert werden, wodurch ein gefundener Datensatz angezeigt wird. Nun möchte ich mit einem Schalter, evtl. gesteuert durch ein Makro, erreichen, dass diese Felder bei Knopfdruck auf leer gesetzt werden.

Gibt es eine einfache Lösung?


Gruß Andreas

Re: bestimmte Felder per Makro (Schalter) leeren

Verfasst: Mo, 30.04.2012 22:25
von F3K Total
Hallo,
das hängt von einigen Dingen ab.

1.) Welcher Typ von Kontrollelement ist das Suchfeld?
2.) Ist es an ein Tabellenfeld gebunden, wenn ja, welche Tabelle, welche Spalte?
3.) Wo befindet es sich (MainForm, Subform, oder ...)

Am besten die DB verfremdet hochladen, dann klappts auch mit 'nem Tipp.

Gruß R

Re: bestimmte Felder per Makro (Schalter) leeren

Verfasst: Mo, 30.04.2012 22:34
von schane65
Hi!

No Problem, hier ist die Datenbank. Es geht im Formular "Adressen_Neu" oben um die Felder "Nachname" und "Stichwort".


Gruß Andreas

Re: bestimmte Felder per Makro (Schalter) leeren

Verfasst: Di, 01.05.2012 11:23
von RobertG
Hallo Andreas,

das geht für 2 Felder mit einem Button nur über Makro. Ansonsten würde aber auch reichen, die beiden Felder direkt zu leeren und auf OK zu drücken.

Code: Alles auswählen

SUB Filter_entfernen
	oDoc=thisComponent
	oDrawpage=oDoc.drawpage
	oForm=oDrawpage.forms.getByName("Filter")		
	oForm2=oDrawpage.forms.getByName("MainForm")		
	REM Datenbankverbindung erzeugen
	oDatenquelle = ThisComponent.Parent.DataSource
	oVerbindung = oDatenquelle.GetConnection("","")
	oSQL_Anweisung = oVerbindung.createStatement()
	stSql = "UPDATE ""Filter"" SET ""Nachname"" = NULL, ""Stichwort"" = NULL"
	oSQL_Anweisung.executeUpdate (stSql)
	oForm.reload()
	oForm2.reload()
End Sub
Die Filtertabelle muss bearbeitet werden. Aus ihr zieht das Hauptformular seinen Filterbefehl. Anschließend müssen beide Formulare neu eingelesen werden.

Ich habe das einmal erstellt und hier angehängt.

Gruß

Robert

Re: bestimmte Felder per Makro (Schalter) leeren

Verfasst: Di, 01.05.2012 12:43
von schane65
Hallo Robert !

Danke schön, so habe ich es mir vorgestellt.



Gruß Andreas

Re: bestimmte Felder per Makro (Schalter) leeren

Verfasst: Di, 01.05.2012 13:03
von schane65
Hallo Robert !

Ich muss doch noch mal stören, da ich den die Schaltfläche samt Makro in die ansonsten funktionierende odt-Datei eingefügt habe. Die Formularverknüpfung auf die Datenbank habe ich auch durchgeführt, bekomme aber bei Betätigung des Buttons eine Fehlermeldung.
Kannst du da noch mal helfen?

Fehlermeldung ist als Bild angehängt.


Gruß Andreas

Re: bestimmte Felder per Makro (Schalter) leeren

Verfasst: Di, 01.05.2012 13:50
von F3K Total
Hallo,
die Filterbuttons kenne ich doch, und den Code auch. :D
Aber zu deinem Probem:

Wenn Du die Datenquelle so suchst:

Code: Alles auswählen

oDatenquelle = ThisComponent.Parent.DataSource
dann sucht das Makro den Vater des Formulares, in einer Base Datei ist dies das Datenbankdokument (.odb), da klappt der Befehl.
Bei einer .odt Datei geht das so nicht.
Ich empfehle:
ersetze die Zeilen

Code: Alles auswählen

oDatenquelle = ThisComponent.Parent.DataSource	
oVerbindung = oDatenquelle.GetConnection("","")
durch z.B.

Code: Alles auswählen

oform = Thiscomponent.drawpage.forms(0)
oVerbindung = oform.activeConnection
Viel Erfolg
Gruß R

Re: bestimmte Felder per Makro (Schalter) leeren

Verfasst: Di, 01.05.2012 14:17
von schane65
Hallo R.

Leider funktioniert das nicht. Die beiden Felder "Nachname" und "Stichwort" werden nicht geleert. Es kommt allerdings keine Fehlermeldung mehr.



Gruß Andreas

Re: bestimmte Felder per Makro (Schalter) leeren

Verfasst: Di, 01.05.2012 16:44
von RobertG
Hallo Andreas,

ich versuche einmal kurz auf den jetzigen Fehler einzugehen:

Code des ursprünglichen Makros von mir:

Code: Alles auswählen

oForm=oDrawpage.forms.getByName("Filter")      
   oForm2=oDrawpage.forms.getByName("MainForm")      
   REM Datenbankverbindung erzeugen
   oDatenquelle = ThisComponent.Parent.DataSource
   oVerbindung = oDatenquelle.GetConnection("","")
   oSQL_Anweisung = oVerbindung.createStatement()
und der Code vermutlich jetzt:

Code: Alles auswählen

oForm=oDrawpage.forms.getByName("Filter")      
   oForm2=oDrawpage.forms.getByName("MainForm")      
   REM Datenbankverbindung erzeugen
   oform = Thiscomponent.drawpage.forms(0)
oVerbindung = oform.activeConnection
   oSQL_Anweisung = oVerbindung.createStatement()
Da Base auf Groß- und Kleinschreibung meines Wissens nicht reagiert benutzt Du die gleiche Variable einmal für das Formular "Filter" und dann Für das Formular, das an der ersten Stelle in der Drawpage steht. Da das Formular "Filter" aber später gegründet wurde steht es eigentlich an der 2. Stelle. Dadurch wird zum Schluss mit oForm.reload() und oForm2.reload() das gleiche Formular doppelt neu geladen.
Das kannst Du umgehen, indem Du statt "MainForm" für das 2. Formular "Filter" einträgst und die erste Definition von oForm heraus nimmst.

Gruß

Robert

Re: bestimmte Felder per Makro (Schalter) leeren

Verfasst: Di, 01.05.2012 19:21
von schane65
Hallo R.

Genauso hat es funktioniert. Ich habe zwar noch einen kleinen Fehler begangen, in dem ich den reload des oForm() auch herausgenommen habe, aber ist jetzt wieder drin und funktioniert.


Danke schön


Gruß Andreas

Re: (gelöst) bestimmte Felder per Makro (Schalter) leeren

Verfasst: Di, 01.05.2012 19:57
von F3K Total
Hallo zusammen,

für den geneigten "Filterer" gibt es hier http://user.services.openoffice.org/en/ ... 32#p214525 ein Beispiel, wo durch Eingabe mehrerer kommaseparierter Suchbegriffe in ein einziges Textfeld, durch alle Spalten der entsprechenden Tabelle gesucht wird.
Also "Bothe" wird genauso gefunden wie "Zoll" oder "Abschlepper" oder der "Wohnort" oder, oder ...

Gruß R

Re: (gelöst) bestimmte Felder per Makro (Schalter) leeren

Verfasst: Di, 01.05.2012 20:51
von RobertG
Kleine Ergänzung:

während die obige Lösung auf Makros baut kommt die Lösung mit einem Suchfeld und nur einer einfachen Texteingabe ohne Makros aus. Der Text wird einfach in eine Tabelle geschrieben und die Abfrage für die andere Tabelle aktualisiert. Eine Abfrage, die ohne weiteres über alle Felder der gewünschten Tabelle gehen kann.
Zum Schluss waren nur Makros notwendig, weil es erwünscht war, dass mehrere Felder gleichzeitig auf NULL gesetzt werden sollten.

Gruß

Robert

Re: (gelöst) bestimmte Felder per Makro (Schalter) leeren

Verfasst: Di, 01.05.2012 21:13
von F3K Total
Hallo Robert,
was ist an Makros denn verwerflich?
Ein gepflegtes

Code: Alles auswählen

oForm.reload
ist mir persönlich z.B. lieber, als ständiges Update-Knöpfe drücken.

Gruß R

Re: bestimmte Felder per Makro (Schalter) leeren

Verfasst: Do, 03.05.2012 21:54
von schane65
Hallo !

Ich glaube, ich habe Mist gebaut. Ich habe in der Tabelle "Adressen" weitere Felder eingebaut und diese dann auch im Formular übertragen. Desweiteren habe ich Telefonummer in Telefon und Handynummer in Handy umbenannt. Telefon 2, Handy 2 und Fax sind hinzugekommen. Nun kann ich kann ich diese Daten zwar zu einer Person hinzufügen, bekomme sie dann aber bei jeder Person im Formular angezeigt. Entscheidend ist das Formular Adressen_Neu.

Was habe ich denn nun wieder falsch gemacht?

R. oder Robert, kann einer von euch helfen?


Gruß Andreas

Re: bestimmte Felder per Makro (Schalter) leeren

Verfasst: Do, 03.05.2012 22:05
von RobertG
Hallo Andreas,

es fehlen die Zuweisungen der Datenfelder zu den entsprechenden Tabellenfeldern. Ich gehe auf das Textfeld 'txtTelefonnummer' und lasse mir den Reiter 'Daten' anzeigen. Da steht dann: Datenfeld - 'Telefonnummer'. Betätige ich dann das Listfeld, so gibt es 'Telefonnummer' gar nicht, sondern z.B. 'Telefon', 'Handy' ...

Wenn Du die Felder korrekt verbindest wird's wohl klappen.

Gruß

Robert