Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: Phantax am Oktober 03, 2010, 13:07:17

Titel: Abfrage durch Textfeld
Beitrag von: Phantax am Oktober 03, 2010, 13:07:17
Hallo,

Ich möchte eine Abfrage durch ein Textfeld im Formular ausführen.
Das Kriterium der Abfrage (Name) soll im Textfeld geschrieben werden und auf ein Button-Klick die Abfrage starten.

Im Textfeld des Formulars eingeben
(http://phantax.net/img/accesshelp1.png)

Textfeld als Kriterium (von Name) nehmen und Abfrage ausführen
(http://phantax.net/img/accesshelp2.png)


Wie kann man das machen? Würde mich auf Hilfe freuen :)
Titel: Re: Abfrage durch Textfeld
Beitrag von: database am Oktober 03, 2010, 18:52:44
Hallo,
das ist durchaus machbar, bringt aber sofort Probnleme, wenn das Textfeld oder das Formular umbenannt wird.
Du solltest Verweise auf Formularfelder in gespeicherten Abfragen vermeiden sowie die Verwendung von reservieten Worten (Name) für Tabellenfelder unbedingt vermeiden..

Zum Verständnis aber die SQL deiner Abfrage:


SELECT Lehrer.ID, Lehrer.[Name], Lehrer.Vorname
FROM Lehrer
WHERE Lehrer.[Name] = [Formulare]![Formular1]![Text0];


HTH
Peter
Titel: Re: Abfrage durch Textfeld
Beitrag von: Phantax am Oktober 03, 2010, 23:37:31
Hmm, sorry aber ich komm nicht ganz mit.
Was soll ich mit den SQL Code machen? Den in den VBA vom Button mit dem Event "Click" einfügen?

Ich zeig hier mal kurz mein Formular:
(http://www.phantax.net/img/accesshelp3.png)

Im Textfeld Lehrer steht ja "Mustermann". Wenn man jetzt auf dem Button daneben klickt, möchte ich das eine  Abfrage (im separaten Formular)  ausgeführt wird mit dem Inhalt des Textfeldes als Kriterium (Name). Indem falle  "Mustermann". Im seperaten Formular sollen dann weitere Informationen angezeigt werden wie hier.

(http://www.phantax.net/img/accesshelp4.png)
Titel: Re: Abfrage durch Textfeld
Beitrag von: database am Oktober 04, 2010, 08:13:55
Hallo, guten Morgen,

du hast ja eine Abfrage - so habe ich es deinem ersten Posting entnommen - welche offenbar die Datenherkunft für das Formular 'Q_LEHRER_browse' bilden soll.
Nun die oben angeführte SQL KOPIERST du in die SQL-Ansicht dieser Abfrage.

Somit wird, wenn das Formular 'Q_LEHRER_browse' geöffnet wird, diese Abfrage ausgeführt und die entsprechenden Daten angezeigt, wenn die Abfrage Q_Klassen_browse die Datenherkunft ist.

Dieses funktioniert aber nur dann, wenn das Formular 'Klassen' geöffnet ist!
Besser ist es den Status des Formulars 'Q_LEHERER_browse zu erfragen und wenn es nicht geöffnet ist, dieses zu öffnen, Wenn es bereits offen ist, werden die Daten lediglich aktualisiert.
Um jetzt nicht in einer Textorgie zu versinken habe ich dir eine klitzekleines Beispiel erstellt, aus dem das alles ersichtlich wird.

Bei der Gelegenheit darf ich dich aber darauf aufmerksam machen, dass das Datenmodell deiner Applikation nicht stimmt!
Die Fächer sollten nicht in der Form gespeichert werden, dass mehrere Fächer in einem Feld stehen! (Normalisierung)
Ebenso müssten die Klassen in eine eigen Tabelle und die so entstanden n:m beziehung über eine Zwischentabelle aufgelöst werden!
Gleiches gilt für die Räume, auch die müssten eigentlich in eine eigene Tabelle ...

Ich habe in meinem Beispiel darauf keine Rücksicht genommen um dir nicht das Verständnis der ursprünglich angefragten Problematik zu nehmen.

HTH
Peter

[Anhang gelöscht durch Administrator]
Titel: Re: Abfrage durch Textfeld
Beitrag von: Phantax am Oktober 04, 2010, 16:30:10
Hallo, danke für die Antwort.
Ich hab das jetzt so gemacht, jedoch funktioneirt es leider nicht.
Wenn ich auf dem Button drücke erscheint nur eine leeres Abfrageergebnis. :(
Titel: Re: Abfrage durch Textfeld
Beitrag von: database am Oktober 04, 2010, 18:23:23
Hallo,

es kann NICHT sein, dass du ein Abfrageergebnis siehst, wenn alle Objekte so heißen wie sie in den Bildern zu lesen sind.
Du bräuchtest ja nur die Codes und die Abfragedefinition aus meinem Beispiel in deine DB übernehmen und da die Spalten- Tabellen- und Feldnamen anpassen.
Beim Klicken auf den Button wird keine Abfrage ausgeführt sondern ein Formular (Q_Klassen_browse) geöffnet bzw. wenn es schon geöffnet ist eine Datenaktualisierung gemäß dem Eintrag im Feld Klassenlehrer (Text0) durchgeführt.

Ich kann leider keine genau angepassten Codes liefern, weil ich ja nicht weiß wie deine Felder im Echtsystem tatsächlich heißen - das ist halt der Nachteil, wenn Bilder statt einer Datei hochgeladen werden.
Bei meinem Beispiel klappt der Aufruf dieser Zusatzinformationen klaglos!

Kannst deine DB komprimieren und zippen und hänge sie hier rein, Ich schau mir das an der Originaldatei an.

Grüße

Peter
Titel: Re: Abfrage durch Textfeld
Beitrag von: Phantax am Oktober 04, 2010, 22:11:44
Okay ich habe hiermal die Datenbank eingefügt.
Vielen dank das du dich dir dafür Zeit nimmst, echt nett von dir :)

http://phantax.net/Schuldatenbank.zip

Die Formulare sind KLASSEN_browse und LEHRER_browse
Titel: Re: Abfrage durch Textfeld
Beitrag von: database am Oktober 05, 2010, 09:27:24
Hallo,

so, wo soll ich anfangen?
Am Besten gleich beim Wichtigsten - dein Datenmodell ist vollkommen falsch aufgebaut und in der Form wie es in der DB steht schlichtweg unbrauchbar!
Wenn du das Ding weiter betreiben / entwickeln willst MUSST du dir UNBEDINGT nähere Kenntnisse der DB-Technik aneignen.

Fragen so wie - wie werden Beziehungen zwischen Tabellen realisiert, was ist ein Primärschlüssel, was ist ein Fremdschlüssel, was ist eine 1:n / m:n Beziehung, was sind Zwischentabellen, ...
mit einem Wort die Grundlagen der Datenbanktechnik MUSST du dir aneignen.
Es gibt neben sehr guten Büchern auch eine Menge Informationsquellen im Internet dazu.
DF6GL hat in seiner Signatur etliche sehr gute Links stehen - schau dir die mal an!

Um dir zu zeigen, dass deine Anfrage gelöst werden kann, habe ich meinen Vorschlag in deiner DB umgesetzt.
Dazu habe ich die Abfrage Q_LEHRER_browse geändert, dem Formular LEHRER_browse diese geänderte Abfrage als
Datenherkunft zugewiesen und den Code hinter dem Aufrufbutton im Formular KLASSEN_browse eingetragen.
Ich habe einige Formulare und vor Allem die Bilder aus den Tabellen entfernt, damit ich das Ding dann hier hochladen konnte.

Bilder - auch so ein Thema - nicht in den Tabellen speichern sondern in einer Verzeichnisstruktur und in der Tabelle lediglich den Pfad zum Bild.
Die 3 kleinen Bildchen in deiner DB haben diese auf fast 4 MB aufgeblasen - den Effekt hast nicht, wenn Bilder in einer Verzeichnisstruktur abgelegt werden.

HTH
Peter



[Anhang gelöscht durch Administrator]
Titel: Re: Abfrage durch Textfeld
Beitrag von: database am Oktober 05, 2010, 10:40:08
Ich habe mir nochmal ein wenig Zeit genommen und ein normalisiertes Datenmodell erstellt, welches als Basis für deine Applikation dienen KÖNNTE.
sieh dir das einmal genau an...    ;D
Die dazugehörige Datei samt einigen Datensätzen ist ebenfalls im Anhang zu finden.
Ach ja - ehe ich's vergesse - verwende nur reale Daten für Testdatensätze!
Mit Einträgen in den Tabellen wie  'hadskfga' oder 'jadhjfru89' wirst du auf die Dauer nicht recht glücklich werden  ;)

Grüße

Peter

EDIT: Datenbank angefügt

[Anhang gelöscht durch Administrator]
Titel: Re: Abfrage durch Textfeld
Beitrag von: Phantax am Oktober 06, 2010, 16:16:29
Hallo,

Erstmal Dankeschön das du dir Zeit genommen hast um die Datenbank genauer anzuschauen.
Ich hab es vill. noch nicht erwähnt, aber habe mich vorher so gut wie gar nicht mit Datenbanken auseinander gesetzt ^^
Access kam mir völlig neu und habe direkt los begonnen ohne großes Vorwissen (Grundwissen).
Ich sollte mich wirklich erstmal mehr über das Programm und der ganzen Datenbanktechnik  erkundigen.

Zu dem Problem mit der Abfrage.
Ich habe mir die Datenbank angeschaut und mich erstmal gefreut das die Sache nun funktioniert.
danke dafür!
Vorhin habe ich die gemerkt das man die gleiche Sache viel einfacher machen kann, ohne Abfragen und VBA coden :D
Man erstellt sich ein Button mit dem Assistenten wählt dann "open Form", dann auf "go to specific record" und wählt als Herkunft das Textfeld vom Formular mit dem Button aus.


Jedoch tritt bei beiden Möglichkeiten ein kleines Problem auf :/
Wenn man jetzt  im neuen Formular ist mit dem Ergebnis, (z.B. von Klassen_browse nach Lehrer_browse nach dem Button-klick) kann man nicht mehr zu anderen records wechseln. sprich mit den Drop-down menü oder den Pfeilen. Man muss also erst das Formular schließen und wieder öffnen damit man zu anderen records wechseln kann.

Weiss du oder jemand anders woran das liegen könnte? wenn nicht, dann ist es auch egal ist nicht soo wichtig :)



Das mit den Beziehungen  raff ich nicht nicht so ganz und werde es mir deshalb mal anschauen nachdem ich mich mehr mit Beziehungen ausseinader gesetzt hab.
Aauch dafür ein Danke und für die ganzen Tipps die du mir gegeben hast :)
Hat mich echt weitergebracht :)
Titel: Re: Abfrage durch Textfeld
Beitrag von: database am Oktober 07, 2010, 08:44:39
Hallo,

ZitatVorhin habe ich die gemerkt das man die gleiche Sache viel einfacher machen kann, ohne Abfragen und VBA coden
...na und was glaubst du steht in der Ereignisprozedur 'Beim Klicken' von deinem neuen Superbutton? --- sieh mal nach  ;D ;D

Zitatschließen und wieder öffnen damit man zu anderen records wechseln kann

Wenn ich dich bis hierher richtig verstanden habe ...

Durch das Öffnen des Formulars und übergabe des Kriteriums ( "open Form", dann auf "go to specific record" ) wird auf die zugrundeliegende Tabelle ein Filter angewendet, wodurch nur noch jene Datensätze zur Verfügung stehen, die diesem Filterkriterium entsprechen.
Durch das Schließen und wieder Öffnen des Formulars wird dieser Filter egalisiert und es stehen wiederum alle Datensätze zur Verfügung - altenativ könntest du auch den Formularbasierten Filter über die Symbolleiste ein- und ausschalten.


Zitat...völlig neu und habe direkt los begonnen ohne großes Vorwissen...

Was ja an sich bei Access das Schöne ist, man KANN ohne besondere Kenntnisse relativ schnell zu Ergebnissen kommen - KANN - muss aber nicht zwangsweise.
Denn in 99,9% der Fälle kommt man schon kurz nach den ersten Dateneingaben drauf, dass da Dinge vor sich gehen, die man SO nicht gewollt hat, oder eben Dinge NICHT machbar sind, die man eigentlich benötigen würde.

Das große Hilferezept ist in jedem Fall - Grundlagen erlernen.
Mit etwas Interesse und dem notwendigen Fleiß ist das gar nicht mal so schwer zu erlernen - da du dich ja offensichtlich im Schulumfeld bewegst, weißt du ja wovon ich rede  ;)