Office: In VB Zugriff auf Abfrage

Helfe beim Thema In VB Zugriff auf Abfrage in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Hi, In meinem VB-Code brauche ich einen Zugriff auf eine Abfrage. Geht das überhaupt? Ausführlich: tbl arbeiter --> kürzel, Vorname, Name,... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von sist, 30. Mai 2006.

  1. sist User

    In VB Zugriff auf Abfrage


    Hi,

    In meinem VB-Code brauche ich einen Zugriff auf eine Abfrage.
    Geht das überhaupt?

    Ausführlich:

    tbl arbeiter --> kürzel, Vorname, Name, Sollarbeitszeit;

    Das Formular, in dem ich auf diese Tabelle zugreifen will macht eine
    Zeiterfassung von Arbeitern.
    Je nach Verhältnis haben die Arbeiter unterschiedliche Sollzeiten.
    Um dann bei der Eingabe von der Abeitszeit die Überstunden zu
    berechnen brauche ich aus der Tabelle arbeiter die sollzeit.

    Bis jetzt steht es einfach fix im code:

    Select Case Text7.Value <-- Benutzer z.B. sd
    Case Is = sd
    userzeit = 8
    Case Is = hs
    userzeit = 4
    Case Is = ms

    Es muss doch möglich sein diese Werte aus einer Tabelle zu holen!?
    Bzw. aus einer abfrage die schon nach "Arbeiter" selektiert.
    Diese Abfrage funktioniert auch, nur der Zugriff von VB nicht.


    vielen Dank schon mal für die Hilfe!
     
  2. Co-Jack Erfahrener User
    Definitiv! Leider ist meine Erfahrung in der Hinsicht schon etwas betagt, muss so Access 97 gewesen sein, als ich das mal gemacht habe...

    Also, MS benutzt eine API die sich DAO (Data Access Objects) nennt, die solche Funktionalitäten bereitstellt. Meines Wissens wurde die Technik von MS weiterentwickelt und heißt jetzt ADO.
    Die MS Referenz zu ADO findest Du hier: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/dasdkadooverview.asp

    Vielleicht hilft es Dir weiter, wenn Du mal nach "ADO Access Beispiel" oder so ähnlich googlelst.

    Weiter kann ich Dir leider nicht helfen, da müsste ich selbst erstmal suchen...
     
    Co-Jack, 30. Mai 2006
    #2
  3. sist User
    @Co-Jack
    thx für die schnelle Antwort, aber irgendwie kommt mir das alles etwas zu umfangreich vor,
    anscheinend muss da immer ein sql server im hintergrund laufen und man muss erst eine
    Verbindung zu Datenbank herstellen!?
    Ich möchte doch "einfach" nur aus meiner DB die ich geöffnet vor mir habe auf eine
    Abfrage zugreifen.
    Werde jetzt noch nach ein paar Bsps suchen, wenn ich was find werd ichs posten.

    Ansonsten, irgendjemand mehr Ahnung?
     
  4. freaky
    freaky Erfahrener User

    In VB Zugriff auf Abfrage

    Hi,

    so richtig werde ich aus Deiner Frage noch nicht schlau:

    Du willst aus Visual Basic (welche Version?) auf eine Access-Datenbank zugreifen oder?! Oder meinst Du hier VBA?

    Was hat das mit dem SQL-Server zu tun???? Oder handelt es sich um eine SQL-Datenbank???

    Grundsätzlich ist der Zugriff genau wie auf eine Tabelle möglich...aber dazu müsstest Du mehr Infos geben...
     
    freaky, 30. Mai 2006
    #4
  5. Co-Jack Erfahrener User
    Hab hier grad was in nem anderen Forum gefunden, vielleicht hilft dir das ja weiter, handelt sich um ein Beispiel aus VBA in Access heraus:

    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim qdf As DAO.QueryDef

    ' Zugriff auf die aktuelle DB
    Set db = CurrentDb
    Set qdf = db.QueryDefs("Meine_Parameter_Abfrage")
    qdf.Parameters!MeinParameter1 = "Wert_für_Parameter1_in_Anführungszeichen_falls_er_ein_Text_ist"
    qdf.Parameters!MeinParameter2 = Wert_für_Parameter2
    ' usw.

    Set rs = qdf.OpenRecordset(dbOpenDynaset)
    ' hier folgt brillanter Code, der mit dem Recordset arbeitet

    ' Am Ende sauber abschließen
    qdf.Close: Set qdf = Nothing
    rs.Close: Set rs = Nothing
    Set db = Nothing

    Falls du kein Recordset willst, sondern z.B. bloß eine Aktionsabfrage mit Parametern ausführen, sieht der Code ähnlich aus, nur folgt nach dem Zuweisen der Parameter kein "Set rs..." usw. sondern ein schlichtes:
    qdf.Execute
     
    Co-Jack, 1. Juni 2006
    #5
  6. sist User
    @Co-Jack,
    sitz grade mal wieder seit ein paar tagen vor der db und versuche jetzt
    mit Deine neuen Antwort klar zu kommen.
    Vielen Dank für Deine Mühen!

    @ freaky
    also: Access 2003 Prof.
    nicht VB sondern VBA! (Dachte da gibts keine soo großen Unterschiede)

    So, und jetzt versuche ich das Problem noch mal klar und verständlich zu beschreiben:

    Grundsätzlich geht es um Zeiterfassung von arbeitern.
    Dazu gibt es eine Tabelle mit Arbeiterdaten z.B. Name, kürzel, sollzeit...
    Anhand dieser Sollzeit wird nach jeder Zeiteingabe ermittelt ob der arbeiter Überstunden gemacht hat oder weniger gearbeitet hat.
    Denke das is klar!?


    So, die Tabelle Zeiterfassung hält alle Records von Arbeiten die ihre Zeiten eingeben.
    Über ein Formular geben die Arbeiter ihre Zeiten ein.
    Als Datenquelle für dieses Formular liegt die tabelle Zeiterfassung zu grunde.
    In der Anwendung sieht das dann so aus:
    Arbeiter öffnet DB, muss über ein drop-down feld sein kürzel auswählen,
    dann wird das formular zur eingabe geöffnet.
    Alle Daten (stunden, datum) werden eingegeben und auf Knopfdruck gespeichert.
    Bei diesem Knopfdruck wird über VBA die ganze Überstunden, Übertragszeit
    usw. berechnet.

    Problem:
    Jetzt steht im VBA Code das je nachdem welcher benutzer ausgewählt
    wurde die Sollzeit desjenigen zum berechnen genommen wird:
    In dem Textfeld7 ist das kürzel zwischengespeichert.
    Wenn da sd steht, dann werden eben 8 std als Sollzeit genommen.
    Denke das jeder der das hier liest weiss was ne switch-case Anweisung ist.

    Die Lösung ist aber sehr unschön, weil die Sollzeiten nicht aus der Tabelle
    "Arbeiter" genommen werden sondern so fest im Code stehen.

    Jetzt habe ich eine Abfrage gemacht die eben für das kürzel, dass ganz
    am Anfang zur identifizierung des Arbeiters eingegeben wird, rausfiltert.
    Die Abfrage liefert dann folgendes Ergebnis:
    Arbeiter | Sollzeit | Name | .........
    __sd___|___8___| Simon|...........

    Wie kann ich nun aus dem VBA Code auf diese Abfrage zugreifen,
    mir die Sollzeit holen und damit weiter rechnen?

    Ansonsten: Danke fürs lesen und hoffentlich ist es jetzt verständlich!
    Dachte nicht das es so schwer ist ein Access Prob genau zu definieren..

    @all, schönen Tag noch!
     
  7. freaky
    freaky Erfahrener User
    Hi,

    nichts einfacher als das: In VB Zugriff auf Abfrage *:p*

    Also hier mal ein Code für einen Zugriff auf eine Abfrage:

    Code:
    Dim db      As DAO.Database
    Dim rs      As DAO.Recordset
    Dim strSQL  As String
    
    Set db = CurrentDb
    strSQL = "SELECT * FROM [Abfr_DeineAbfrage] WHERE [Deine_ID]='" & Textfeld7.Value & "'"
    Set rs = db.OpenRecordset(strSQL)
    If Not rs.EOF And Not rs.BOF Then
    DeineVariable = rs("DeinFeld")
    End If
    Set rs = Nothing
    Set db = Nothing
    So sieht das ganze aus (ähnlich wie Co-Jack). Du greifst auf Tabellen oder abfragen gleich zu. Der Code bleibt immer gleich. Du setzt halt nur in der SQL-Abfrage den Namen der Tabelle oder Abfrage ein.

    Im Recordset (rs) stehen dann diec Ergebnisse zur Verfügung. Wenn es nur einen Wert gibt ist es ganz leicht. Sonst müsstest Du noch alle Recordsets durchlaufen. Das ließe sich auch gut mit einer Funktion abbilden, die dann als Rückgabewert den ausgelesenen Wert hat.
     
    freaky, 6. Juni 2006
    #7
  8. sist User

    In VB Zugriff auf Abfrage

    thx!
    werde das gleich bzw. morgen probieren und dann schreiben ob und wie es funktioniert hat!

    bis dahin
     
  9. carnage Neuer User
    hilfe

    Hy,
    ich hab hier das selbe Problem...
    mittlerweile hab ich schon etliche "angeblichen" loesungswege gefunden.
    aber alle laufen auf das selbe raus.
    "Typen unvertraeglich"
    oder
    Funktioniert garnicht.
    habe es auch schon mit queryDefs versucht und was weis ich nicht was noch... sogar dieses TransferText Methode allerdings kann ich diese nicht gebrauchen. Muss aus Tabellen Bestimmte Werte nehmen und diese evtl. noch bearbeiten und anschließend als .csv ausspucken lassen.

    vllt. kann mir hier jmd. weiterhelfen. bin schon foermlich am verzweifeln...
    hoffe mal das es nicht daran liegt dass ich eine etwas kompliziertere Abfrage habe...
    und zwar sieht das sql statement wie folgt aus:

    Code:
    sSQL = "SELECT [Artikel_View].ArtikelNr,
    [Artikel_View].Bestand,
    [Artikel_View].Preis1,
    [Artikel_View].Gewicht,
    [Bild].Name,
    Replace([Artikel_View].[Beschreibung],(Chr$(10)),""
    "") AS Beschreibung,
    [Warengruppe].Bezeichnung " & _
    
    "FROM (Artikel_View INNER JOIN Warengruppe
    ON [Artikel_View].WarengrpNr = [Warengruppe].WarengrpNr)
    LEFT JOIN Bild ON [Artikel_View].ArtikelNr = [Bild].ArtikelNr " & _
    
    "ORDER BY [Artikel_View].ArtikelNr;"
    Zustande kommt das Statement aus 3 Tabellen Artikel Warengruppe und Bild. Aus diesen 3 möchte ich nur bestimmte Werte und natuerlich nur die Warengruppe und das Bild zum jeweiligen Artikel.

    Soa und bei:
    Code:
    Set RS = DB.OpenRecordset(sSQL)
    steigt er mir mit "Typen unverträglich" aus

    ---------------

    hier noch der komplette code:
    Code:
    Public Function Export_CSV(ByRef sPath As String)
        Dim DB As DAO.Database
        Dim RS As Recordset
        Dim QDF As DAO.QueryDef
    
        Dim FSO As Object
        Dim FILE As Object
    
        Dim iCount As Integer
        Dim sSQL As String
        Dim tStart, tEnd As Double
    
        tStart = Timer
    
        'Pfad vervollstaendigen und Datumanhaengen
        sPath = Replace(sPath, ".csv", "")
        sPath = sPath & "_" & Format(Date, "yyyymmdd") & ".csv"
    
        'Init aktuelle DB
        Set DB = CurrentDb
    
        sSQL = "SELECT [Artikel_View].ArtikelNr, [Artikel_View].Bestand, [Artikel_View].Preis1, [Artikel_View].Gewicht, [Bild].Name, Replace([Artikel_View].[Beschreibung],(Chr$(10)),""
    "") AS Beschreibung, [Warengruppe].Bezeichnung " & _
        "FROM (Artikel_View INNER JOIN Warengruppe ON [Artikel_View].WarengrpNr = [Warengruppe].WarengrpNr) LEFT JOIN Bild ON [Artikel_View].ArtikelNr = [Bild].ArtikelNr " & _
        "ORDER BY [Artikel_View].ArtikelNr;"
    
        'Open FILE
        Set FSO = CreateObject("Scripting.FileSystemObject")
        Set FILE = FSO.CreateTextFile(sPath, True)
    
        FILE.WriteLine (" ... ... ... ")
    
        tEnd = Timer
        
        MsgBox "Fertig in " & Round((tEnd - tStart), 2) & " sek"
    
        FILE.Close: Set FILE = Nothing
        QDF.Close: Set QDF = Nothing
        RS.Close: Set RS = Nothing
        DB.Close: Set DB = Nothing
    
    End Function
    
     
    carnage, 8. Oktober 2007
    #9
  10. freaky
    freaky Erfahrener User
    Hi,

    also Deine "Replace"-Anweisung wird so nicht funktionieren.

    Was willst Du denn damit machen? Was bedeuten die Anführungszeichen doppelt da? ...

    Notfalls einfach die gesamte Abfrage in einne Recvordset laden und dann sequentiell abarbeiten udn die Datensätze ändern...
    Sollte es aber sehr viele Daten sein, kann das schon etwas dauern....dann müssen es aber wirklich viele Daten sein.

    Solltest Du das Jet 4.0 mit dem neuesten Servicepack installiert haben funktioniert "Replace" eh nicht mehr mit in einer SQL-Anweisung...

    Also ich würde auf Replace verzichten....
     
  11. carnage Neuer User
    das replace hat ich noch drin das er mir gleich die zeilenumbrueche raus nimmt. und es funktioniert soweit wie es soll. eigentlich sollte noch ein
    drin stehen aber html ist aktiv daher wird es nicht angezeigt. doppelte " dass es mir das Statement nicht verhagelt.
    aber gut, ich verzichte auf das replace sofern der rest klappt.

    und hier ist doch mein problem, ich kann nichts ins recordset laden und sequentiell abarbeiten. es kommt immer "typen unvertraeglich" sobalt er zu dem cmd kommt.
     
    carnage, 8. Oktober 2007
    #11
  12. freaky
    freaky Erfahrener User
    Hallo,

    also ohne Replace geht es immer noch nicht?

    Hast du mal versucht, die Abfrage selbst in Access anzulegen und Dir dann mal den SQL-String angesehen? Vielleicht hilft Dir das schon weiter, denn der wird mit Sicherheit funktionieren.

    Zunächst würde ich - um den Fehler einzugrenzen - erstmal alles "Überflüssige" aus der SQL-Anweisung zu entfernen.

    Also praktisch mit "SELECT * FROM Artikel_View".

    Dann das Sortieren dazu nehmen und anschließend die Left Join Anweisungen.

    Grundsätzlich würde ich bei den Left Join und Inner Join ein paar Klammern mehr setzen - das kann aber nicht das eigentliche Problem sein.

    Noch was: das kannst Du auch mal testen:

    Dim RS As DAO.Recordset

    Vielleicht kommt da Access "etwas durcheinander"...

    (Noch besser wäre natürlich ADO...)
     
  13. carnage Neuer User

    In VB Zugriff auf Abfrage

    Ohne Replace geht es auch nicht.

    Die Abfrage hab ich schon mit Hilfe des Assistenten erstellt.
    Sie funktioniert auf jedenfall!

    Das entrümpeln hab ich jetzt mal nicht gemacht,
    sonder hab gleich mal das DAO.Recordset geschrieben.
    Und siehe da - es funktioniert! es wird angenommen und er arbeitet den Artikelstamm ab!

    Ich war mir zwar sicher das auch schon versucht zu haben aber naja...
    ADO nimmt er bei mir schon einmal gar nicht an.
    Sagt nur irgendwas von "Benutzerdefinierte Variable nicht definiert"

    Vielen Dank für deine Hilfe freaky!!!
    Endlich kann ich das Projekt abschließen!!!
    Du weist gar nicht wie sehr ich erleichtert bin dass es jetzt funktioniert!
    Many Thanks!

    cya carnage
     
    carnage, 8. Oktober 2007
    #13
  14. freaky
    freaky Erfahrener User
    Hi,

    bei ADO musst Du erst in den Verweisen das Objekt einbinden. Dann sollte es auch funktionieren..

    Aber hauptsache es funktioniert jetzt! :-D
     
Thema:

In VB Zugriff auf Abfrage

Die Seite wird geladen...
  1. In VB Zugriff auf Abfrage - Similar Threads - Zugriff Abfrage

  2. Zugriff auf nicht vorhandene Datei seitens Excel

    in Microsoft Excel Hilfe
    Zugriff auf nicht vorhandene Datei seitens Excel: Hallo, wann immer ich in Excel Daten in eine Zelle gebe, dauert es ca. 1-2 Minuten, bevor Excel die weitere Bearbeitung freigibt. Unten links gibt es den Hinweis "Zugriff auf Datei erfolgt". Dies...
  3. Fehler beim Zugriff auf Pfad/Datei

    in Microsoft Excel Hilfe
    Fehler beim Zugriff auf Pfad/Datei: Moin, Ich habe eine Excel Datei erstellt, die ziemlich viele Makros hat, die Anforderung lässt sich leider nicht anders bewerkstelligen. Kurz vor Fertigstellung des Programms bekomme ich jetzt...
  4. Zugriff auf Zellen in geschlossenen Arbeitsmappen

    in Microsoft Excel Hilfe
    Zugriff auf Zellen in geschlossenen Arbeitsmappen: Ich möchte gerne auf Zellen in anderen Arbeitsmappen zugreifen, ohne diese dabei öffnen zu müssen. Vom Prinzip her soll dies analog zur "INDIREKT-Funktion" ablaufen (die leider nur bei geöffneten...
  5. Zugriff aus Access-Datei (xx.accdb)

    in Microsoft Excel Hilfe
    Zugriff aus Access-Datei (xx.accdb): Guten Tag Mit Windows 10 und Excel 2021 Pro konnten mit unten stehendem Makro Daten an ein Access-DB übergeben werden. Mit Windows 11 und Excel 2021 Pro geht das nicht mehr. [ATTACH]...
  6. Zugriff auf andere Excel Datei ohne aktives Öffnen

    in Microsoft Excel Hilfe
    Zugriff auf andere Excel Datei ohne aktives Öffnen: Liebe Community, ich habe mir eine Formel geschrieben um Werte aus einer anderen Excel Datei in meine Haupt Excel Datei einzufügen. Leider muss die Datei aus der ich die Daten haben will immer...
  7. Zugriff auf dynamisches Tabellenblatt

    in Microsoft Excel Hilfe
    Zugriff auf dynamisches Tabellenblatt: Hallo Zusammen, folgende Problemstellung: Ich habe ein Excel Sheet mit einer variablen Anzahl an Tabellenblättern (Anzahl Klassenarbeiten). Auf einer anderen Tabelle("Durchschnitt") in der...
  8. Zugriff über MS Jet auf Access Abfrage in Access DB

    in Microsoft Excel Hilfe
    Zugriff über MS Jet auf Access Abfrage in Access DB: Hallo zusammen, wie kann ich über MS Jet auf eine Abfrage in einer Access DB zugriefen? Er lässt nur Zugriff auf Tabellen zu ... Gibt es ne andere Abfrage die den Zugriff auf ne Access Abfrage...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden