Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Sql-Anfängerfrage (Self-Join auslesen)
zurück: hilfe weiter: Tabelleninhalte suchen Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Bitte Status wählen ! Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
stargazer01
Access-Entwickler


Verfasst am:
29. Jul 2005, 10:38
Rufname:
Wohnort: Leverkusen

Sql-Anfängerfrage (Self-Join auslesen) - Sql-Anfängerfrage (Self-Join auslesen)

Nach oben
       

Hallo

ich habe eine Tabelle mit den Abteilungen zu einer oder mehreren Firmen. Diese Tabelle enthält auch ein Feld mit der Bezeichnung der in der Hierarchie nächst höheren Abteilung. Dieses ist bei den Hauptabteilungen leer. Ich möchte jetzt in verknüpften Kombinationsfeldern anhand der gewählten Abteilung die höchste Abteilung in der Hierarchie ermitteln. Ich weiss nur nicht, wie ich das mit Sql hinkriegen soll. Vieleicht kann mir einer mal auf die Sprünge helfen.

mfg.

Titel ergänzt / stpimi, 21.08.2005
stpimi
Moderator Access


Verfasst am:
21. Aug 2005, 22:34
Rufname:
Wohnort: Graz


AW: Sql-Anfängerfrage (Self-Join auslesen) - AW: Sql-Anfängerfrage (Self-Join auslesen)

Nach oben
       

Mit SQL alleine wirst Du das nicht hinbekommen.
Du musst eine Schleife machen, in der Du jeweils den übergeordneten Satz ausliest.
Ungetestet etwa so:
Code:
    Dim lngIDUpper As Long
    Dim rs As DAO.Recordset
   
    Set rs = CurrentDb.OpenRecordset("SELECT ID, IDUpper FROM Tabelle")
    lngIDUpper = Me!IDUpper
    Do Until IsNull(lngIDUpper)
        rs.MoveFirst
        rs.FindFirst "ID = " & lngIDUpper
        lngIDUpper = rs!IDUpper
    Loop
    Me!IdUpMost = rs!id
    rs.Close
    Set rs = Nothing

_________________
Lg, Michael

Dein Feedback hilft auch anderen - vergiß es nicht!
stargazer01
Access-Entwickler


Verfasst am:
06. Sep 2005, 17:48
Rufname:
Wohnort: Leverkusen

kleines Problem - kleines Problem

Nach oben
       

Hallo Michael

ich habe ein kleines Problem mit deiner Variante
ich erhalte den Fehler unzulässige Verwendung von Null

mfg
Ralf
Willi Wipp
Moderator


Verfasst am:
06. Sep 2005, 17:53
Rufname:
Wohnort: Raum Wiesbaden

Re: Sql-Anfängerfrage (Self-Join auslesen) - Re: Sql-Anfängerfrage (Self-Join auslesen)

Nach oben
       

Hi stargazer01,

waere schoen wenn Du auch noch die Stelle angeben koenntest Wink
Wobei eine Variable vom Datentyp Long eigentlich niemals den Wert Null (nicht 0, sondern nicht belegt) erhalten kann.
Code:
    Do Until IsNull(lngIDUpper)
wird daher wohl so nicht klappen Wink
_________________
Eine kurze Rueckmeldung waere nett
SL Willi Wipp

(Anleitung fuer das Anhaengen von Dateien: Klicke links auf [www], Gaeste muessen sich dafuer anmelden)
stargazer01
Access-Entwickler


Verfasst am:
07. Sep 2005, 11:47
Rufname:
Wohnort: Leverkusen


AW: Sql-Anfängerfrage (Self-Join auslesen) - AW: Sql-Anfängerfrage (Self-Join auslesen)

Nach oben
       

Hallo Willi Wipp

ich habe inzwischen folgenden Code
Code:
Private Sub Kombinationsfeld137_Dirty(Cancel As Integer)
    Dim Hauptabteilung As String
    Dim Suchabteilung As String
    Dim Suchfimra As String
    Dim SQL As String
    Dim rs As DAO.Recordset
   
    If Me!Kombinationsfeld137 <> "" Then
        Suchabteilung = Me!Kombinationsfeld137
        Suchfirma = Me!Kombinationsfeld128
        SQL = "SELECT Abteilung, Uebergeordnete_Abteilung " & _
                "FROM Abteilung " & _
               "WHERE Abteilung = Suchabteilung " & _
                 "AND Firma = Suchfirma"
        Set rs = CurrentDb.OpenRecordset(SQL)
        Hauptabteilung = Me!Uebergeordnete_Abteilung
        Suchabteilung = Me!Abteilung
        If Hauptabteilung <> " " Then
            Do Until Hauptabteilung = " " Or ""
                rs.MoveFirst
                rs.FindFirst "Abteilung = " & Hauptabteilung
                Hauptabteilung = rs!Uebergeordnete_Abteilung
            Loop
            Me!Kombinationsfeld130 = Hauptabteilung
            rs.Close
            Set rs = Nothing
          Else
            Me!Kombinationsfeld130 = Hauptabteilung
        End If
    End If
End Sub
Zur Erklärung: in einer Maske, in der ich für den Personalbestand verschiedender Firmen unter anderem die Abteilung des Mitarbeiters einpflegen kann über das Kombinationsfeld137 und die Firma über das Kombinationsfeld128 möchte ich die Hauptabteilung automatisch in das Kombinationsfeld130 setzen, nachdem ich die Abteilung selektiert habe.
Dazu muss ich auf eine zweite Tabelle Abteilung zugreifen, die als Felder
die Abteilung, die Hauptabteilung und die Firma enthalten. Mit Firma ist die Firma gemeint, die die entsprechende Abteilung enthält, da ich gleiche Abteilungsnamen in mehreren Firmen haben kann (z.B. Verkauf oder Buchhaltung etc.).
Wenn ich nun das Kombinationsfeld137 ändere erhalte ich die Fehlermeldung:
Zitat:
Laufzeitfehler '3061' 3 Parameter wurden erwartet, aber es wurden zu wenige Parameter übergeben
und die markierte Zeile beim Debuggen ist die Zeile
Code:
    Set rs = CurrentDb.OpenRecordset(SQL)
Ich hoffe, ich konnte einigermassen erklären, was ich erreichen will und wo mein Problem liegt.

mfg.
Ralf
Nachtrag in gesperrtem Thema: stargazer01 am 08. Sep 2005 um 17:08 hat folgendes geschrieben:
Hallo

ich möchte bei Änderung eines Kombinationsfeldes, das einen Abteilungsschlüssel enthält, die höchste Abteilung in der Firmenhierarchie ermitteln. Dazu will ich in VBA ein select statement in einem Recordset ausführen der gesamte Code sieht so aus:
Code:
Private Sub Kombinationsfeld137_Change()
    Dim Hauptabteilung As String
    Dim Suchabteilung As String
    Dim Suchfirma As Integer
    Dim SQL As String
    Dim rs As DAO.Recordset
   
    If Me!Kombinationsfeld137 <> "" Then
        Suchabteilung = Me!Kombinationsfeld137
        Suchfirma = Me!Kombinationsfeld128
        MsgBox Suchabteilung
        SQL = "SELECT Abteilung, Uebergeordnete_Abteilung " & _
                "FROM Abteilung " & _
               "WHERE Abteilung = Suchabteilung " & _
                 "AND Firma = Suchfirma" And ";"
        Set rs = CurrentDb.OpenRecordset(SQL)
        Hauptabteilung = Me!Uebergeordnete_Abteilung
        Suchabteilung = Me!Abteilung
        If Hauptabteilung <> " " Then
            Do Until Hauptabteilung = " " Or ""
                rs.MoveFirst
                rs.FindFirst "Abteilung = " & Hauptabteilung
                Hauptabteilung = rs!Uebergeordnete_Abteilung
            Loop
            Me!Kombinationsfeld130 = Hauptabteilung
            rs.Close
            Set rs = Nothing
          Else
            Me!Kombinationsfeld130 = Hauptabteilung
        End If
    End If
End Sub
In der Zeile SQL = "SELECT...... " erhalte ich die Fehlermeldung
Zitat:
Laufzeitfehler 13 Typen unverträglich
Die im Select-Statement angesprochenen Tabellenfelder sind definiert wie folgt:
Firma Zahl
Abteilung Text
Übergeordnete_Abteilung Text

Weiss einer, was hier falsch läuft

mfg.
Ralf
Willi Wipp
Moderator


Verfasst am:
08. Sep 2005, 17:32
Rufname:
Wohnort: Raum Wiesbaden

Re: Sql-Anfängerfrage (Self-Join auslesen) (II) - Re: Sql-Anfängerfrage (Self-Join auslesen) (II)

Nach oben
       

Hi stargazer01,

zu Deinem SQL-Code:
1. Variablen durfen nicht im SQL-Strring stehen.
2. Felder vom Datentyp Text mussen mit Hochkomma uebergeben werden
3. um Strings zu verbinden verwendet man & und nicht And
4. auf das Semikolon am Ende kann man verzichten.
Also etwa so
Code:
        SQL = "SELECT Abteilung, Uebergeordnete_Abteilung " & _
                "FROM Abteilung " & _
               "WHERE Abteilung = '" & Suchabteilung & _
               "' AND Firma = '" & Suchfirma & "'"
        '...
            ' Die Schleife ist nicht noetig!
'            Do Until Hauptabteilung = " " Or ""
'                rs.MoveFirst
            ' und beim FindFirst auch Hochkomma
            rs.FindFirst "Abteilung = " & Hauptabteilung
            If rs.NoMatch Then
                ' Nichts gefunden!
              Else
                Hauptabteilung = rs!Uebergeordnete_Abteilung
            End If
'            Loop
        '...

_________________
Eine kurze Rueckmeldung waere nett
SL Willi Wipp

(Anleitung fuer das Anhaengen von Dateien: Klicke links auf [www], Gaeste muessen sich dafuer anmelden)
stargazer01
Access-Entwickler


Verfasst am:
09. Sep 2005, 09:23
Rufname:
Wohnort: Leverkusen

AW: Sql-Anfängerfrage (Self-Join auslesen) - AW: Sql-Anfängerfrage (Self-Join auslesen)

Nach oben
       

Hallo

ich erhalte, wenn ich dein SQL-Statement benutze, immer noch einen Laufzeitfehler 3061 beim Benutzer der Methode CurrentDB.Openrecordset (sql), aber sie erwartet nur noch einen fehlenden Parameter. Wenn ich mir das SQL in einer MSGBox anzeigen lasse, sieht das für mich ok aus.
Auch die Variablen Suchabteilung und Suchfirma enthalten die richtigen Werte.

Das Sql sieht so aus
Code:
        sql = "SELECT Abteilung, Uebergeordnete_Abteilung " & _
                "FROM Abteilung " & _
               "WHERE Abteilung = '" & Suchabteilung & _
               "' AND Firma = '" & Suchfirma & "'"

mfg
Ralf
Willi Wipp
Moderator


Verfasst am:
09. Sep 2005, 11:38
Rufname:
Wohnort: Raum Wiesbaden

Re: Sql-Anfängerfrage (Self-Join auslesen) (III) - Re: Sql-Anfängerfrage (Self-Join auslesen) (III)

Nach oben
       

Hi stargazer01,

handelt es sich bei Abteilung um eine Tabelle oder eien Abfrage?
Wenn es eine Abfrage ist, ist es eine Parameter-Abfrage?
Wenn Nein, dann gib die SQL mal im Direktfenster (Strg+G; Textfenster) aus
und teste sie in einer neuen (leeren) Abfrage in der SQL-Ansicht.
Code:
        Debug.Print sql

_________________
Eine kurze Rueckmeldung waere nett
SL Willi Wipp

(Anleitung fuer das Anhaengen von Dateien: Klicke links auf [www], Gaeste muessen sich dafuer anmelden)
stargazer01
Access-Entwickler


Verfasst am:
09. Sep 2005, 13:58
Rufname:
Wohnort: Leverkusen

AW: Sql-Anfängerfrage (Self-Join auslesen) - AW: Sql-Anfängerfrage (Self-Join auslesen)

Nach oben
       

Hallo

also, es gibt eine Tabelle Abteilung, die die Felder Firma, Abteilung und uebergeordnete Abteilung enthält.

mfg.
Willi Wipp
Moderator


Verfasst am:
09. Sep 2005, 14:12
Rufname:
Wohnort: Raum Wiesbaden

Re: Sql-Anfängerfrage (Self-Join auslesen) (IV) - Re: Sql-Anfängerfrage (Self-Join auslesen) (IV)

Nach oben
       

Hi stargazer01,

(immer diese Leerzeichen ...) dann vielleicht so
Code:
        sql = "SELECT Abteilung, [Uebergeordnete Abteilung] " & _
                "FROM Abteilung " & _
               "WHERE Abteilung = '" & Suchabteilung & _
               "' AND Firma = '" & Suchfirma & "'"
'        Debug.Print sql 'Im Direktfenster (Strg+G; Testfenster)
Wenn es das nicht war, dann teste den SQL-Code mal in einer neuen Abfrage!
_________________
Eine kurze Rueckmeldung waere nett
SL Willi Wipp

(Anleitung fuer das Anhaengen von Dateien: Klicke links auf [www], Gaeste muessen sich dafuer anmelden)
stargazer01
Access-Entwickler


Verfasst am:
12. Sep 2005, 17:42
Rufname:
Wohnort: Leverkusen


etwas umständlich aber immerhin - etwas umständlich aber immerhin

Nach oben
       

Hallo Willi Wipp
erst mal danke für deine Tipps. Ich habe inzwischen der besseren Schreibweise halber das Feld uebergeordnete Abteilung in uebergeordneteAbteilung geändert.

Mit viel Probieren habe ich folgende Routine jetzt im Einsatz, die bisher einwandfrei läuft:
Code:
Private Sub Kombinationsfeld137_Change()
    Dim Hauptabteilung As String
    Dim Suchabteilung As String
    Dim Suchfirma As Integer
    Dim SQL As String
    Dim rs As DAO.Recordset
'Hauptabteilung sicherheitshalber vorbelegen
'
    Hauptabteilung = "X"
    Suchfirma = Me!Kombinationsfeld128
    Suchabteilung = Me!Kombinationsfeld137
    Do Until Hauptabteilung = " "
        SQL = "SELECT Abteilung, UebergeordneteAbteilung, Firma " & _
                "FROM Abteilung " & _
               "WHERE Abteilung = '" & Suchabteilung & _
               "' AND Firma = " & Suchfirma
        Set rs = CurrentDb.OpenRecordset(SQL)
' Bei Wert Null Hauptabteilung auf Blank setzen
        Hauptabteilung = Nz(rs!uebergeordneteAbteilung, " ")
        If Hauptabteilung <> " " Then Suchabteilung = Hauptabteilung
    Loop
    Me!Kombinationsfeld130 = rs!Abteilung
End Sub

mfg
Ralf
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Access Tabellen & Abfragen: Auslesen einer Matrix 2 maxpower 594 03. Jul 2009, 11:00
Gast Auslesen einer Matrix
Keine neuen Beiträge Access Tabellen & Abfragen: Textfeld auslesen und in SQL verwenden 3 B0b 1917 17. Jun 2009, 19:53
jens05 Textfeld auslesen und in SQL verwenden
Keine neuen Beiträge Access Tabellen & Abfragen: Daten aus Access Tabelle auslesen 7 JahNik 1697 08. Jun 2009, 01:41
Willi Wipp Daten aus Access Tabelle auslesen
Keine neuen Beiträge Access Tabellen & Abfragen: Ordner auf der Festplatte auslesen 10 Levin 2137 21. Apr 2009, 14:03
TommyK Ordner auf der Festplatte auslesen
Keine neuen Beiträge Access Tabellen & Abfragen: Datumsfeld nach Feiertagen auslesen 3 der_Jochen 310 22. März 2009, 22:52
Willi Wipp Datumsfeld nach Feiertagen auslesen
Keine neuen Beiträge Access Tabellen & Abfragen: String von hinten auslesen und alles vor / löschen 1 Gast 2942 19. Aug 2008, 10:28
KlausMz String von hinten auslesen und alles vor / löschen
Keine neuen Beiträge Access Tabellen & Abfragen: in Zeile springen, auslesen und verknüpfen 4 bubes 397 02. Aug 2008, 20:10
bubes in Zeile springen, auslesen und verknüpfen
Keine neuen Beiträge Access Tabellen & Abfragen: Schnittpunkt einer Matrix auslesen 0 derMatze 802 12. Feb 2008, 22:33
derMatze Schnittpunkt einer Matrix auslesen
Keine neuen Beiträge Access Tabellen & Abfragen: Ersten 3 Zeichen auslesen 1 testgast 692 15. Jan 2008, 13:04
KlausMz Ersten 3 Zeichen auslesen
Keine neuen Beiträge Access Tabellen & Abfragen: Summe + Wahrheitswert auslesen 2 pktm 374 11. Dez 2007, 11:56
pktm Summe + Wahrheitswert auslesen
Keine neuen Beiträge Access Tabellen & Abfragen: 2 Tabellen auslesen und als excel exportieren 0 Hobo2k 392 27. Nov 2007, 10:50
Hobo2k 2 Tabellen auslesen und als excel exportieren
Keine neuen Beiträge Access Tabellen & Abfragen: mit VBA Wert auslesen 11 Gast 2638 15. Aug 2007, 22:13
Willi Wipp mit VBA Wert auslesen
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Excel Tipps