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. Dynamische Hyperlinks - Zugriff auf ausgeblendete Tabellenblätter

    in Microsoft Excel Hilfe
    Dynamische Hyperlinks - Zugriff auf ausgeblendete Tabellenblätter: Hallo zusammen, es ist mein erster Beitrag hier und ich bedanke mich bereits im Vorfeld für jede Antwort. Ich habe eine relativ gute Excel-Liste erstellt, komme aber ab einem bestimmten Punkt...
  3. Kein Zugriff auf Uni Konto da neue Handynummer

    in Microsoft Outlook Hilfe
    Kein Zugriff auf Uni Konto da neue Handynummer: Hallo, ich habe letztens eine neue Handynummer bekommen. Nun ist mein Uni Konto bei Outlook/Microsoft jedoch mit der alten Verknüpft auf die ich keinen Zugriff mehr habe. Um mich neu bei...
  4. Kein Zugriff auf Organisation

    in Microsoft Teams Hilfe
    Kein Zugriff auf Organisation: Ich bin der Administrator meiner Organisation. Wenn ich mich bei Teams anmelde, erhalte ich die Meldung: "Sie haben keinen Zugriff auf diese Organisation, wenden Sie sich an den Administrator."...
  5. MS Teams: Kein Zugriff auf meine Organisation

    in Microsoft Teams Hilfe
    MS Teams: Kein Zugriff auf meine Organisation: Guten Tag, ich nutze bisher Teams als Gast bei anderen, die mich zu Sessions einladen. Ich möchte aber das Feature "unscharfer Hintergrund" nutzen und selbst einladen können. Dazu versuche ich...
  6. Keinen Zugriff auf Organisation

    in Microsoft Teams Hilfe
    Keinen Zugriff auf Organisation: Hallo Ich habe keinen Zugriff auf meine Organisation wenn ich mich über Teams in Windows anmelde. Auf meinem iPhone klappt das aber ohne Probleme. Was könnte der Grund dafür sein? Vielen...
  7. Bei MS Teams keinen Zugriff auf eig. Organisation

    in Microsoft Teams Hilfe
    Bei MS Teams keinen Zugriff auf eig. Organisation: Hallo, beim Start von Teams kann ich nicht auf meine "eigene Organisation" zugreifen. Dafür besteht die Möglichkeit bei zwei Organisationen anzumelden, wo ich "Gast" bin. Und die Anmeldung dort...
  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