Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Abfragedaten von Formular übernhmen

Begonnen von itil07, Juni 20, 2011, 12:25:04

⏪ vorheriges - nächstes ⏩

itil07

Hallo,

folgenste Konstellation:
Formular - Firmenabfrage
Inhalt = Standort, Bereich, Abteilung, Nachname

In der Abfrage die identischen Daten.
Jetzt geht darum.

Der User wählt über komboboxen im Formular seine wunschabfrage aus und dies solli n die abfrage initalisiert werden und diese soll angezeigt werden.

Beispiel user wählt aus;
Standort: ""
Bereich: ""
Abteilung: "Finanzen"
Nachname: ""

werden alle Mitarbeiter von Finanzen angezeigt

Standort: "Wien"
Bereich: "Controlling"
Abteilung: ""
Nachname: ""

Zeigt alle Controller aus Wien an.

Standort: ""
Bereich: ""
Abteilung: ""
Nachname: "Meier"

Zeigt den Mitarbeiter Meier an.

wie kann ich das umsetzen?
mrin problem ist, wenn ich auch nur ein feld leer lasse, klappt es nicht...


danke schon mal

DF6GL

Hallo,


am Besten schaust Du Dir mal Beispiel-DBs an:


http://dbwiki.net/images/1/19/AccSampleSuchen.zip
http://dbwiki.net/images/6/6f/AccSampleKombiAuswahl.zip


(kleine Rätselrunde:  Vermutlich muss in den Abfragen  als Kriterium z. B. bei Spalte "Standort" stehen:   Wie Forms!DeinForm!Standort oder Forms!DeinForm!Standort ist Null )

itil07

ja also deinen ansatz hatte ich auch. mit dem [Formulare]![Formularname]![Feldname] in "Kriterien" eintragen. jedoch bei Oder mit dem istnull funktioniert leider nicht.

das beispiel funktioniert für sich selbst ja super.. jedoch wenn ich mir die suchen.mdb genauer anschaue und das formular frmadressesuchensimpel anschaue.

Private Sub Suchen_Click()
Dim Krit As String, SQL As String
  Krit = ""
  If Not IsNull(Me!Nachname) Then Krit = Krit & " AND Nachname LIKE '" & Me!Nachname & "*'"
  If Not IsNull(Me!Firma) Then Krit = Krit & " AND Firma LIKE '" & Me!Firma & "*'"
  SQL = "SELECT * FROM tblAdresse "
  If Krit <> "" Then SQL = SQL & "WHERE " & Mid(Krit, 5)
  Me!ufrmAdresseSuchen.Form.RecordSource = SQL
  Me!Nachname.SetFocus
End Sub


mir ist unklar wie ich das für meines übernehmen soll.. bin hier echt etwas überfordert :-( hoffe irh könnt mir helfen, das irgendwie "eifnacher" hinz u rkeigen. ohen eigenes sql scheint es ja nicht zu funktionieren oder?wo auch immer ich da snun eintrage oder? :-(

DF6GL

Hallo,

"mit dem [Formulare]![Formularname]![Feldname] in "Kriterien" eintragen. jedoch bei Oder mit dem istnull funktioniert leider nicht."


WAS funktioniert nicht? WIE hast Du das eingetragen?  Poste mal die SQL-Ansicht (SQL-String) der Abfrage.

bezgl. dem Code halt an Deine Feldnamen und Verhältnisse anpassen:


.
.
If Not IsNull(Me!Standort) Then Krit = Krit & " AND Standort LIKE '" & Me!Nachname & "*'" 
If Not IsNull(Me!Bereich) Then Krit = Krit & " AND Bereich LIKE '" & Me!Bereich & "*'"
If Not IsNull(Me!Abteilung) Then Krit = Krit & " AND Abteilung LIKE '" & Me!Abteilung & "*'" 
If Not IsNull(Me!Nachname) Then Krit = Krit & " AND Nachname LIKE '" & Me!Nachname & "*'"
.
.
.


Das ist schon einfach genug,  und
"ohen eigenes sql scheint es ja nicht zu funktionieren oder?.."

SQL ist nun mal die DB-Abfragesprache schlechthin.


"wo auch immer ich da snun eintrage oder? :-( "

??

VBA-Code im VBA-Editor

SQL (Strings) im Abfrageentwurf/Ansicht/SQL-Ansicht oder bei irgendeiner Eigenschaft , bzw. irgendeinem Funktions-Parameter, die/der einen SQL-String erwartet.

Und: Rechtschreibfehler sind tunlichst zu vermeiden, Access ist da pingelig und gar nicht tolerant....  ;)

itil07

Hallo,

Hier meine SQL-Syntax:

SELECT Status.Statusbezeichnung, Bereich.Bereichsname, Abteilung.Abteilungsname, Personendaten.Nachname, Berechtigungen.Berechtigung, Ber_System.Bezeichnung, Zusätndigkeit.Zuständigkeit
FROM Berechtigungen INNER JOIN (Ber_System INNER JOIN ((Status INNER JOIN (Bereich INNER JOIN (Abteilung INNER JOIN Personendaten ON Abteilung.[Abteilung_ID] = Personendaten.[Abteilung_FK]) ON Bereich.[Bereichsnummer] = Personendaten.[Bereich_FK]) ON Status.[ID_Status] = Personendaten.[Status_FK]) INNER JOIN (Zusätndigkeit INNER JOIN Ber_Haupt ON Zusätndigkeit.[ID_Zustaendigkeit] = Ber_Haupt.[Zuständigkeit]) ON Personendaten.[Konfigurationsnummer] = Ber_Haupt.[Verantwortlicher_FK]) ON Ber_System.ID_Ber_System = Ber_Haupt.System) ON Berechtigungen.ID_Berechtigungen = Ber_Haupt.Berechtigung
WHERE (((Status.Statusbezeichnung)=[Formulare]![Berechtigungsabfrage]![komb_status])  XOR  ((Bereich.Bereichsname)=[Formulare]![Berechtigungsabfrage]![kom_bereich]) XOR ((Abteilung.Abteilungsname)=[Formulare]![Berechtigungsabfrage]![komb_abt])  XOR  ((Personendaten.Nachname)=[Formulare]![Berechtigungsabfrage]![komb_nn])  XOR ((Berechtigungen.Berechtigung)=[Formulare]![Berechtigungsabfrage]![komb_berechtigung])  XOR  ((Ber_System.Bezeichnung)=[Formulare]![Berechtigungsabfrage]![komb_system])  XOR ((Zusätndigkeit.Zuständigkeit)=[Formulare]![Berechtigungsabfrage]![komb_zust])) OR (((Status.Statusbezeichnung)=IsNull([Formulare]![Berechtigungsabfrage]![Statusbezeichnung]))  XOR ((Bereich.Bereichsname)=IsNull([Formulare]![Berechtigungsabfrage]![kom_bereich]))  XOR  ((Abteilung.Abteilungsname)=IsNull([Formulare]![Berechtigungsabfrage]![komb_abt]))  XOR  ((Personendaten.Nachname)=IsNull([Formulare]![Berechtigungsabfrage]![Nachname]))  XOR  ((Berechtigungen.Berechtigung)=IsNull([Formulare]![Berechtigungsabfrage]![komb_berechtigung]))  XOR  ((Ber_System.Bezeichnung)=IsNull([Formulare]![Berechtigungsabfrage]![komb_system]))  XOR  ((Zusätndigkeit.Zuständigkeit)=IsNull([Formulare]![Berechtigungsabfrage]![komb_zust])));


wobei standardmäßig steht dstatt "XOR ein AND, aber mit AND kanns auf keinen fall gehen, aber leider mit XOR auch nicht :-(

eingetragen habe ich:

Kriterium: [Formulare]![Berechtitungsformular]![komb_status]
OdeR: IstNull([Formulare]![Berechtitungsformular]![komb_status])


anbei meine datei.

hoffe du kansnt mir da helfen, vielen dank schon mal herzlichst im voraus.



[Anhang gelöscht durch Administrator]

DF6GL

Hallo, 


Wie kommst Du auf "XOR" ??




Du sollst eintragen:

(im Abfrageentwurf)
Kriterium:    [Forms]![Berechtitungsformular]![komb_status] Oder [Forms]![Berechtitungsformular]![komb_status] Ist Null


Wobei der Formularname hier vermutlich einen Tippfehler enthält...


http://www.donkarl.com/?FAQ3.14

itil07

hallo,

habe das nun bei allen eingetragen. ob "Forms" oder "Formulare" ist dem Access ansich egal nur wenn man formulare eingibt schlägt er alles dann von selbst vor, man kanns ich dann nciht verschreiben - oder irrtisert deutsch das sql? denke nicht.. da es teilweise funktioniert hat..

das jetzige SQL ist echt ultimativ lang.. habe meine datei angehägt.. bitte um prüfung weil es funktioniert noch nicht so ganz wie es sein soll... bitte um etwaiige tipps.
bin aber schon echt ultimativ dankbar :-) vollc ool!!!!!!!!

[Anhang gelöscht durch Administrator]

itil07

also bei status und berechtigung funktioniert das einwandfrei. danach gar nicht mehr..
woran liegt denn das?

mit der bitte um tipps/hilfe

herzlichsten danks chon mal!

DF6GL

Hallo,

es ist nicht egal, ob "Formulare" oder "Forms2 geschrieben wird, auch wenn Access "Forms" wieder nach "Formulare" im Abfrageentwurf zurückwandelt.


Deine hochgeladene accdb kann ich nicht öffnen (mit A2007).

database

#9
Hallo,

...außerdem solltest du das Kennwort aus der hochgeladenen DB entfernen wenn du Hilfe bekommen möchtest - das VBA-Projekt ist gesperrt.

Vorab nur soviel:
Ich vermute, dass du die 'abfr_Berechtigungen' mit deinem Beitrag besprechen willst.
Um das Ergebnis des Suchformulars 'Berechtigungsabfrage' auf 7 verschiedene Kriterien einzuschränken kannst du die Kriterien entweder UND oder ODER verknüpfen.
Wie es letztendlich zu lösen sein wird hängt vom erwarteten Ergebnis ab - willst du alle aus dem 'Bereich 3' UND den Namen 'Kleber' haben oder möchtest du alle aus dem 'Bereich 3' ODER den Namen 'Kleber' haben.
Deiner ersten Anfrage nach gehe ich davon aus, dass die Kritereien AND-verknüpft werden sollen. ("Alle Controller aus Wien" - ist AND-verknüpft)

Wie auch immer diese Entscheidung ausfallen mag - die Horror-SQL der Abfrage 'abfr_Berechtigungen' ist dazu jedenfalls m.E. NICHT notwendig.
Ich würde eher dazu neigen eine ganz neutrale Auswahl-Abfrage zu erstellen und die WHERE-Klausel dynamisch im Formular nach den ausgewählten Kriterien zusammenzustellen.


Dim strKrit As String
Dim strSQL as String

'Abfragefundament erstellen
strSQL = "SELECT Status.Statusbezeichnung, Bereich.Bereichsname, Abteilung.Abteilungsname, Personendaten.Nachname, " & _
        "Berechtigungen.Berechtigung, Ber_System.Bezeichnung, Zusätndigkeit.Zuständigkeit " & _
        "FROM Berechtigungen INNER JOIN (Ber_System INNER JOIN ((Status INNER JOIN (Bereich INNER JOIN " & _
        "(Abteilung INNER JOIN Personendaten ON Abteilung.[Abteilung_ID] = Personendaten.[Abteilung_FK]) " & _
        "ON Bereich.[Bereichsnummer] = Personendaten.[Bereich_FK]) ON Status.[ID_Status] = Personendaten.[Status_FK]) " & _
        "INNER JOIN (Zusätndigkeit INNER JOIN Ber_Haupt ON Zusätndigkeit.[ID_Zustaendigkeit] = Ber_Haupt.[Zuständigkeit]) " & _
        "ON Personendaten.[Konfigurationsnummer] = Ber_Haupt.[Verantwortlicher_FK]) ON Ber_System.ID_Ber_System = Ber_Haupt.System) " & _
        "ON Berechtigungen.ID_Berechtigungen = Ber_Haupt.Berechtigung"

'Auswahlkriterien sammeln +++(siehe Bemerkung nach dem Codeausschnitt)
If Not IsNull(Me!komb_Status) Then
   strKrit = "Status_FK=" & me!komb_Status
End If

If Not IsNull(Me!kom_Bereich) Then
   If strKrit <> "" Then
       strKrit = strKrit & " AND Bereich_FK=" & Me!kom_Bereich
   Else
       strKrit = "Bereich_FK=" & Me!kom_Bereich
   End If
End If

...
..
.

'Kriterienstring zusammensetzen
If strKrit <> "" Then
   strKrit = " WHERE " & strKrit & ";"
Else
   strKrit = ";"
End If

'Abfragefundament und Kriterien zusammensetzen
strSQL = strSQL & strKrit

'die SQL der 'abfr_Berechtigungen' zuweisen
CurrentDb.QueryDefs("abfr_Berechtigungen").SQL = strSQL


+++ Verwende für die Abfragekriterien die Fremdschlüssel und nicht die Bezeichungsfelder aus den verknüpften Tabellen!

Die Abfrage selbst dient dann als Datenherkunft für einen Bericht, der die Auswahlergebnisse formatiert anzeigt oder du öffnest die Abfrage halt dann per VBA um die Daten anzuzeigen.

Dann würde ich dir noch gerne wärmstens ans Herz legen
dass du die Tabellen allesamt überarbeitest,
Tabellen und Felder OHNE Rechtschreibfehler benennst,
vermeide Sonderzeichen und Leerzeichen sowie reservierte Worte bei Feldbezeichnugen (auch MINUSZEICHEN = Sonderzeichen),
dass du dich entscheidest ob du Umlaute verwendest oder nicht (ich empfehle NEIN) und dieses nicht vermischt verwendest,
dann solltest du das Datenmodell gründlich überarbeiten - es befindet sich nicht in der 3. Normalform
und letztendlich definiere deine Tabellenbeziehungen (setzte die referenzielle Integrität!)
Für deine Formulare gilt das oben gesagte 1:1 z.B. lege dich fest wie du die Felder benennst 'komb_Status' und 'kom_Bereich' - bei solchen Bezeichnungen bekommst du garantiert eine Menge Ärger!

HTH

itil07

hallo,

anbei mein neue version mit eingefügten coding und ohne passwort -sorry hatte ich vergessen, alle passwörter lauten "test" falls noch irgendwo eines ist.

nun zu den tabellen.
3. normalform = funktionale abhängigkeiten bei nichtschlüssel attributen...
nehme an du meinst hier berechtigung, zuständigkeit, system... jedoch weiß ich nciht, wie ich das sonst lösen soll :-(.

ansonsten
ok sind:
abteilung, anhänge, bereich, handy, mobiles internet, standorte, status, user, zuständigkeit, ber_system

bin mir nicht sicher bei:
ber_haupt, ber_system, berechtigungen, personendaten

aber was soll ich hier ändern, dass ich dennoch die selbe funktionalität habe.. echt schwierig :-(.
habe auch nichts dagegen komplett neu an zu fangen, aber mir fällt keine bessere lösung ein..

danke schon mal vielmals

lg
itil






[Anhang gelöscht durch Administrator]

DF6GL

Hallo,


welches Format hat die DB? Ich kann sie immer noch nicht mit A2007 öffnen...    ("Nicht erkennbares DB-Format")

database

#12
Hallo,

@Franz

Access 2010

NACHTRAG:
Speichern als 2003-mdb nicht möglich, da verschiedene Features in der DB vorhanden sind...  blablabla

itil07

ich wüsste aber nicht, was ich genommen hätte.. das es nur im 2010 gibt.. die mehrfachauswahlkomboboxen habe ich ja schon lange alle entfernt..