Seite 1 von 1

freie Abrage

Verfasst: Mo, 28.05.2007 19:51
von s_m_peters
Hallo zusammen,

ich bin ganz neu in dem Programm und habe eine Abfrage mit den für meine Suche wichtigen Kästchen erstellt. Danach habe ich ein Formular mit einer besseren Ansicht erstellt.

Jetzt ist mein Problem, dass ich nicht einfach etwas eingeben kann und mir die dazu passenden Einträge angezeigt werden. Ich kann keine festgelegten Abfragen gebrauchen, da ich auf einen großen Buchbestand zurückgreifen muss und z.B. wissen muss, wie viele Bücher ich von Goethe da habe.

Wenn ich jetzt für jeden Autor eine neue spezielle Abfrage erstellen muss, brauche ich nachher genauso viele Abfragen wie Tabellen.


Ich hoffe mir kann jemand helfen und ich frage hier nichts total dummes :wink: .

Vielen Dank,

Sarah

Verfasst: Mo, 28.05.2007 21:28
von Barlee
Hallo Sarah,

das bekommst Du mit Abfrageparametern in Griff.
Beispiel:
Du hast eine Tabelle "Buch" mit den Spalten
-Titel,
-Autor,
-Erscheinungsjahr

Nun möchtest Du Dir alle Bücher von Goethe anzeigen lassen. Folgende Abfrage:

Code: Alles auswählen

select * from Buch where Autor = :Autor
"fragt" Dich, nach welchem Autor Du suchen möchtest. In unserem Beispiel gibst Du "Goethe" an und bekommst alle Datensätze zurück, in denen Goethe erfasst ist.
":Autor" ist hierbei der Parameter, der jedesmal beim Ausführen abgefragt wird. Hier bist Du also frei.

Kommst Du damit weiter?

Gruß Barlee

Nicht so ganz

Verfasst: Mo, 28.05.2007 22:01
von s_m_peters
Ich habe bei dieser Tabelle z. B. die Spalten, Autor, Titel, Erscheinungsjahr, Verlag, usw.
Wenn ich nun eine Suche aufrufe möchte ich, dass alle Kästchen erscheinen und ich z. B. Goethe und Suhrkamp eingeben kann, aber ohne diese Suche abspeichern zu müssen.

Ich möchte eine Suche so ähnlich wie z. B. bei Amazon. Leere Kästchen, freie Eingabe. Keine Suche, die man abspeichern muss.
Wie muss ich das eingeben? Bitte helft mir!

Bin so verzweifelt. :(

Verfasst: Di, 29.05.2007 00:05
von berndkli
Hallo Sarah
Ich möchte eine Suche so ähnlich wie z. B. bei Amazon. Leere Kästchen, freie Eingabe. Keine Suche, die man abspeichern muss.
Das geht - wenn überhaupt - nur mit Programierung. Wenn du nur eine Tabelle hast, benutze doch den Standard Filter direkt in der Tabelle; da kannst du 3 Parameter eingeben und mit "und" oder "oder" verknüpfen.

Gruss Bernd

Hallo Sarah,

Verfasst: Di, 29.05.2007 09:25
von paunami
bin selbst Neu in Ooo, aber eine Idee von mir wäre:

Im Formular selbst gibt es in der Navigationsleiste einen Suchen-Button. Hier Suchparameter eingeben und schon zeigt er Dir der Reihe nach alles an, was er findet.

Tschau

doppelter thread?

Verfasst: Mi, 30.05.2007 16:23
von oseebass
ist das nicht das gleiche wie deine andere frage unter:

viewtopic.php?t=12480 ?

Re: freie Abrage

Verfasst: Sa, 16.06.2007 14:56
von sarotti
Hallo s_m_Peters,

habe vor einiger Zeit genau diese Funktion "freier Formularfilter" gesucht und bin zu folgender Lösung gelangt:

Code: Alles auswählen



Sub Filter_erstellen

DIM FormFilter as string
Dim i%
oDoc = ThisComponent 

'//das Formular 
oFormSuche = oDoc.DrawPage.Forms(0) '//Index des Formulars (mit getByName kann auch der Name gewählt werden)

'//Die Suchfelder im Formular werden nachfolgend ausgelesen...

oArt = oFormSuche.getByName("TextBox")
sArt= oArt.text '//=Inhalt
oBuchHinw = oFormSuche.getByName("TextBox1")
sBuchHinw = oBuchHinw.text
oAuftragg = oFormSuche.getByName("TextBox2")
sAuftragg = oAuftragg.text
oEmpfaenger = oFormSuche.getByName("TextBox3")
sEmpfaenger = oEmpfaenger.text
oEinteilung= oFormSuche.getByName("TextBox4")
sEinteilung= oEinteilung.currentValue'//current value wegen Listfeld
oMonat=oFormSuche.getByName("Monat")
sMonat=oMonat.currentValue 
oJahr=oFormSuche.getByName("Jahr")
sJahr=oJahr.currentValue
oKonto=oFormSuche.getByName("Konto_Auswahl")
sKonto=oKonto.currentValue

DIM x(7)

'// die folgenden Abfragen dienen dazu eine Püfung vorzunehmen, ob die Abfragefelder leer sind

if sArt <> "" then
x(0) = "`Art` LIKE '%" + sArt + "%'"
end if

if sBuchHinw <> "" then
x(1) = "`Buchungshinweis` LIKE '%" + sBuchHinw + "%'"
end if

if sAuftragg <> "" then
x(2)= "`Auftraggeber` LIKE '%" + sAuftragg + "%'"
end if

if sEmpfaenger <> "" then
x(3) = "`Empfänger` LIKE '%"+ sEmpfaenger + "%'"
end if

if sKonto <> "" then
x(4) = "`KTO_Nr` LIKE '%"+ sKonto + "%'"
end if

if sMonat<>"" and sJahr="" then
	msgBox "Bitte geben Sie Monat UND Jahr ein",0,"Fehler"
	exit sub
end if

if sJahr<> "" then
	x(5)= " YEAR(`Datum`) = " + sJahr
end if

if sMonat<>"" and sJahr<>"" then
	x(5)= " YEAR(`Datum`) = " + sJahr + " AND MONTH(`Datum`) = "+ sMonat
end if

if sEinteilung <> "" then
x(6) = "`Einteilung` LIKE '"+ sEinteilung + "'"
end if

'//Hier wird ein eventuell bestehender Filter zunächst geleert
FormFilter=""

for i=0 to 6
	FormFilter=FormFilter+x(i)				'// hier wird der Filter in einer Schleife zusammengestellt
	
	if FormFilter<>"" and x(i+1)<>"" then
		if right(FormFilter,3)<> "AND" then
			FormFilter=FormFilter+" AND"		'// es folgt das Ergänzen der einzelnen Bestandteile des Fiters um " AND"
		end if
	end if

next

do until right(FormFilter,4) <>" AND" '//sofern am Ende des Filters ein AND steht wird dieses abgeschnitten
	FormFilter=left(FormFilter,(len(FormFilter)-4))
loop

oFormSuche.filter = FormFilter

oFormSuche.ApplyFilter=true					'//setzen des Filters

oFormSuche.reload()

End Sub

O.K. sieht erst mal schwierig aus.... :)

Gruss
sarotti