tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
14
ZUGRIFFE
783
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    starbug starbug ist offline Mitglied Gold
    Registriert seit
    Jan 2011
    Beiträge
    191
    Hallo,

    ich würde gerne wissen wie ich in Access eine Abfrage per VBA erstellen kann und dann
    zusätzlich noch ein Kriterium übergeben kann was variabel sein muss.

    Also generel würde ich ja sowas machen
    Code :
    1
    2
    3
    4
    
        Dim db As DAO.Database
        Dim rec_adr As DAO.Recordset 
     
       Set rec_adr = db.OpenRecordset("SELECT * FROM Artikerl WHERE ArtikelNr = 1234")

    Ich möchte das aber so haben, das wenn ich in meiner Artikelliste auf die ArtikelNr. doppleklicke sich die Abfrage öffnet und als Kriterium die angeklickte ArtikelNr übergeben wird. Wie kann man sowas machen?
     

  2. #2
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Erstelle in Datasheet-Formular auf die Abfrage.
    Dann kannst du dieses mit dem Filter öffnen

    Code vb:
    1
    2
    3
    4
    5
    6
    7
    
    Sub openFilteredDS(ByVal artikelNr As Long)
        Dim myFilterString As String
        
        myFilterString = "ArtikelNr = " & artikelNr
        
        Call DoCmd.OpenForm("myFormName", acFormDS, , myFilterString)
    End Sub
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  3. #3
    starbug starbug ist offline Mitglied Gold
    Registriert seit
    Jan 2011
    Beiträge
    191
    Ok ich hab das mal gemacht aber ändert sich nichts. der Filter schaltet sich zwar ein aber es ändert sich halt nichts. es wäre glaube ich auch besser wenn sich das neue Formular oder die Abfrage in einem neuen Fenster öffnet. Was könnte man da tun?
     

  4. #4
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Diese function öffnet das ganze in einem neuen Fenster.

    Wie hast du es denn eingebaut?
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  5. #5
    starbug starbug ist offline Mitglied Gold
    Registriert seit
    Jan 2011
    Beiträge
    191
    Hier rein

    Code :
    1
    2
    
    Private Sub PRDNO_DblClick(Cancel As Integer)
    End Sub
     

  6. #6
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Ja, das ist leer. Da wird nix ausgeführt. Du musst schon mein Code anpassen und da reinkopieren. Ansonsten geht nix.
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  7. #7
    starbug starbug ist offline Mitglied Gold
    Registriert seit
    Jan 2011
    Beiträge
    191
    Ich weiss das es leer ist, ich wollte nur zeigen wo ich es eingefügt habe. Allerdings hast du ja bei deiner Methode nen String Parameter als Argument, den kann ich doch hier gar nicht einfügen da schon was anderes als Parameter übergeben wurde
     

  8. #8
    starbug starbug ist offline Mitglied Gold
    Registriert seit
    Jan 2011
    Beiträge
    191
    Hier mal wich es angepasst habe:


    Code :
    1
    2
    3
    4
    5
    6
    7
    
    Sub openFilteredDS(ByVal artikelNr As Sring)
        Dim myFilterString As String
        
        myFilterString =  Me.artikelNr
        
        Call DoCmd.OpenForm("Artikel_Form", acFormDS, , myFilterString)
    End Sub

    Nur da tut sich nichts.
     

  9. #9
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Item: Wie nix? Es öffnet kein Fenster, es kommt keine ehlermeldung? Die Maus blockiert, er wie was wo?

    Nebenbei, finde die 10 Unterschiede
    Code vb:
    1
    2
    3
    4
    5
    
    'Dein Code
        myFilterString =  Me.artikelNr
     
    'Mein Code
        myFilterString = "ArtikelNr = " & artikelNr
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  10. #10
    starbug starbug ist offline Mitglied Gold
    Registriert seit
    Jan 2011
    Beiträge
    191
    Du hast aber auch oben die Variable artikelNr als Long zugewiesen, oder meinst du mit "ArtikelNr"
    den Namen des Textfeldes?: Kurze andere Frage: Ich müsste das doch auch mit SQL ausführen können, so etwa:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    Private Sub PRDNO_DblClick(Cancel As Integer)
     
    Dim sqlstring As String
     
    sqlstring = "SELECT Master.ArtikelNr, Master.Artikel, Master.KundenNr, Master.Kunde, Master.Preis FROM Master"
            
    DoCmd.RunSQL sqlstring
     
     
    End Sub


    Kommt aber immer ein Fehler und zwar: "Laufzeitfehler 3075 Syntaxfehler (fehlender Operator) in Abfrageasudruck Master.Preis".

    Wieso ist das so?
     

  11. #11
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    RunSQL führt ein SQL aus. Sprich, ein INSERT, DELETE oder UPDATE. SELECT ohne INTO zählt da nicht dazu, da es keine Daten manipuliert.

    Ein Auszug aus der F1-Hilfe auf runSQL
    SQLStatement: A string expression that's a valid SQL statement for an action query or a data-definition query . It uses an INSERT INTO, DELETE, SELECT...INTO, UPDATE, CREATE TABLE, ALTER TABLE, DROP TABLE, CREATE INDEX, or DROP INDEX statement. Include an IN clause if you want to access another database.

    Die ArtikelNr in meinem Beispiel war ein Beispiel. Nimm dein ArtikelNr-Feld oder was auch immer. Aber es muss immer vom Type 'Feld = Wert' sein und nicht nur 'Wert'
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  12. #12
    starbug starbug ist offline Mitglied Gold
    Registriert seit
    Jan 2011
    Beiträge
    191
    Also ist es generell nicht möglich eine einfache Auswahlabfrage mit VBA zu erstellen?
     

  13. #13
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Doch. Es ist nur die Frage was du damit willst.

    Du kannst jederzeit eine Abfrage erstellen und öffnen. Doch dazu muss sie mindestens als Abfrage gespeichert sein.

    Dazu eine kleine Funktion
    Code vb:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    Public Sub openSqlAsQuery(ByVal sql As String)
        Const C_TEMP_QUERY_NAME = "vw_temp"
        
        'Dein SQL
        sql = "SELECT * FROM "
        
    On Error Resume Next
        'Versuchen das SQL hinter der Abfrage vw_temp zu ersetzen
        CurrentDb.QueryDefs(C_TEMP_QUERY_NAME).sql = sql
        If Err.Number <> 0 Then
            'Falls das Query vw_temp noch nicht besteht, neu anlegen
            Call CurrentDb.CreateQueryDef(C_TEMP_QUERY_NAME, sql)
            Err.clear
        End If
    On Error GoTo 0
     
        'Abfrage öffnen
        Call DoCmd.OpenQuery(C_TEMP_QUERY_NAME)
     
    End Sub

    Diese kannst du dann so aufrufen
    Code vb:
    1
    2
    3
    4
    5
    6
    7
    8
    
    Public Sub test()
        Dim SqlString As String
        
        SqlString = "SELECT Master.ArtikelNr, Master.Artikel, Master.KundenNr, Master.Kunde, Master.Preis FROM Master"
     
        Call openSqlAsQuery(SqlString)
     
    End Sub
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  14. #14
    starbug starbug ist offline Mitglied Gold
    Registriert seit
    Jan 2011
    Beiträge
    191
    Code :
    1
    2
    3
    4
    5
    
    Public Sub openSqlAsQuery(ByVal sql As String)
        Const C_TEMP_QUERY_NAME = "vw_temp"
        
        'Dein SQL
        sql = "SELECT * FROM "


    Muss ich denn dann hier sql = SELECT Master.ArtikelNr, Master.Artikel......etc. eingeben?

    Oder ist das irgendwie so eine Allgemeine Form. Weil bei dem Test Code würde ich es ja sonst nochmal engeben.
     

  15. #15
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Zitat Zitat von Yaslaw Beitrag anzeigen
    Diese kannst du dann so aufrufen
    Code vb:
    1
    2
    3
    4
    5
    6
    7
    8
    
    Public Sub test()
        Dim SqlString As String
        
        SqlString = "SELECT Master.ArtikelNr, Master.Artikel, Master.KundenNr, Master.Kunde, Master.Preis FROM Master"
     
        Call openSqlAsQuery(SqlString)
     
    End Sub
    Nachtrag:
    Sorry, hab ein Fehler in meinerm Script entdeckt!
    das folgende muss gelöscht werden!
    Code vb:
    1
    2
    
        'Dein SQL
        sql = "SELECT * FROM "

    So sollte es aussehen
    Code vb:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    Public Sub openSqlAsQuery(ByVal sql As String)
        Const C_TEMP_QUERY_NAME = "vw_temp"
         
    On Error Resume Next
        'Versuchen das SQL hinter der Abfrage vw_temp zu ersetzen
        CurrentDb.QueryDefs(C_TEMP_QUERY_NAME).sql = sql
        If Err.Number <> 0 Then
            'Falls das Query vw_temp noch nicht besteht, neu anlegen
            Call CurrentDb.CreateQueryDef(C_TEMP_QUERY_NAME, sql)
            Err.clear
        End If
    On Error GoTo 0
     
        'Abfrage öffnen
        Call DoCmd.OpenQuery(C_TEMP_QUERY_NAME)
     
    End Sub
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 10.11.11, 13:08
  2. [MDX] Abfrage mit ähnlicher Semantik zu SQL Abfrage mit Group By und Where
    Von Thomas Darimont im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 28.01.10, 18:56
  3. Antworten: 34
    Letzter Beitrag: 23.12.09, 20:56
  4. SQL Abfrage: Abfrage nach ungleichen Variablen? ne -.-
    Von Nilman im Forum Relationale Datenbanksysteme
    Antworten: 8
    Letzter Beitrag: 31.05.05, 13:24
  5. sql server 2000 Abfrage einer Abfrage
    Von supafunk im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 15.04.05, 18:20