Home Office-Hilfe.com - Wir lösen Ihr Problem mit Microsoft Excel, Word, Outlook, PowerPoint, Access gratis Forum Impressum

  In VB Zugriff auf Abfrage
Neues Thema eröffnenNeue Antwort erstellen
Autor Nachricht
sist
Newbie
Newbie


Anmeldedatum: 06.02.2006
Beiträge: 8

BeitragVerfasst am: 30.05.2006, 15:09 Nach oben

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!
Benutzer-Profile anzeigenPrivate Nachricht senden
Co-Jack
Newbie
Newbie


Anmeldedatum: 26.05.2006
Beiträge: 48
Wohnort: im Norden

BeitragVerfasst am: 30.05.2006, 16:03 Nach oben

sist hat Folgendes geschrieben:

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


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...
Benutzer-Profile anzeigenPrivate Nachricht senden
sist
Newbie
Newbie


Anmeldedatum: 06.02.2006
Beiträge: 8

BeitragVerfasst am: 30.05.2006, 17:12 Nach oben

@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?
Benutzer-Profile anzeigenPrivate Nachricht senden
freaky
Moderator
Moderator


Anmeldedatum: 11.04.2006
Beiträge: 751
Wohnort: im Norden

BeitragVerfasst am: 30.05.2006, 21:20 Nach oben

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...

_________________
Gruß
freaky
----------------------------------------------------------------
Windows 2000, Windows XP
Office 97, Office 2000, Office 2003 und Office 2007
_____________________________________________
Feedback nicht vergessen....
---------------------------------------------------------------
Benutzer-Profile anzeigenPrivate Nachricht senden
Co-Jack
Newbie
Newbie


Anmeldedatum: 26.05.2006
Beiträge: 48
Wohnort: im Norden

BeitragVerfasst am: 01.06.2006, 17:02 Nach oben

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
Benutzer-Profile anzeigenPrivate Nachricht senden
sist
Newbie
Newbie


Anmeldedatum: 06.02.2006
Beiträge: 8

BeitragVerfasst am: 06.06.2006, 10:12 Nach oben

@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:
Zitat:
Select Case Text7.Value <-- Benutzer z.B. sd
Case Is = sd
userzeit = 8
Case Is = hs
userzeit = 4


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!
Benutzer-Profile anzeigenPrivate Nachricht senden
freaky
Moderator
Moderator


Anmeldedatum: 11.04.2006
Beiträge: 751
Wohnort: im Norden

BeitragVerfasst am: 06.06.2006, 17:43 Nach oben

Hi,

nichts einfacher als das: Razz

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.

_________________
Gruß
freaky
----------------------------------------------------------------
Windows 2000, Windows XP
Office 97, Office 2000, Office 2003 und Office 2007
_____________________________________________
Feedback nicht vergessen....
---------------------------------------------------------------
Benutzer-Profile anzeigenPrivate Nachricht senden
sist
Newbie
Newbie


Anmeldedatum: 06.02.2006
Beiträge: 8

BeitragVerfasst am: 19.06.2006, 14:01 Nach oben

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

bis dahin
Benutzer-Profile anzeigenPrivate Nachricht senden
carnage
Newbie
Newbie


Anmeldedatum: 08.10.2007
Beiträge: 3

BeitragVerfasst am: 08.10.2007, 11:42 Nach oben

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)),""<br>"") 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)),""<br>"") 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

_________________
Enter your password here:
Benutzer-Profile anzeigenPrivate Nachricht sendenWebsite dieses Benutzers besuchenMSN MessengerICQ-Nummer
freaky
Moderator
Moderator


Anmeldedatum: 11.04.2006
Beiträge: 751
Wohnort: im Norden

BeitragVerfasst am: 08.10.2007, 12:08 Nach oben

Hi,

Zitat:
Replace([Artikel_View].[Beschreibung],(Chr$(10)),""
"")


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....

_________________
Gruß
freaky
----------------------------------------------------------------
Windows 2000, Windows XP
Office 97, Office 2000, Office 2003 und Office 2007
_____________________________________________
Feedback nicht vergessen....
---------------------------------------------------------------
Benutzer-Profile anzeigenPrivate Nachricht senden
carnage
Newbie
Newbie


Anmeldedatum: 08.10.2007
Beiträge: 3

BeitragVerfasst am: 08.10.2007, 12:31 Nach oben

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.

_________________
Enter your password here:
Benutzer-Profile anzeigenPrivate Nachricht sendenWebsite dieses Benutzers besuchenMSN MessengerICQ-Nummer
freaky
Moderator
Moderator


Anmeldedatum: 11.04.2006
Beiträge: 751
Wohnort: im Norden

BeitragVerfasst am: 08.10.2007, 13:23 Nach oben

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...)

_________________
Gruß
freaky
----------------------------------------------------------------
Windows 2000, Windows XP
Office 97, Office 2000, Office 2003 und Office 2007
_____________________________________________
Feedback nicht vergessen....
---------------------------------------------------------------
Benutzer-Profile anzeigenPrivate Nachricht senden
carnage
Newbie
Newbie


Anmeldedatum: 08.10.2007
Beiträge: 3

BeitragVerfasst am: 08.10.2007, 14:03 Nach oben

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

_________________
Enter your password here:
Benutzer-Profile anzeigenPrivate Nachricht sendenWebsite dieses Benutzers besuchenMSN MessengerICQ-Nummer
freaky
Moderator
Moderator


Anmeldedatum: 11.04.2006
Beiträge: 751
Wohnort: im Norden

BeitragVerfasst am: 08.10.2007, 14:42 Nach oben

Hi,

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

Aber hauptsache es funktioniert jetzt! Very Happy

_________________
Gruß
freaky
----------------------------------------------------------------
Windows 2000, Windows XP
Office 97, Office 2000, Office 2003 und Office 2007
_____________________________________________
Feedback nicht vergessen....
---------------------------------------------------------------
Benutzer-Profile anzeigenPrivate Nachricht senden
Beiträge der letzten Zeit anzeigen:      
Neues Thema eröffnenNeue Antwort erstellen


Ähnliche Beiträge
Thema Autor Forum Antworten Verfasst am
Keine neuen Beiträge Wenn Abfrage saschathede Microsoft Excel Hilfe 3 29.08.2008, 10:19 Letzten Beitrag anzeigen
Keine neuen Beiträge Wenn-Abfrage aus verschiedenen Zellen... Nark Microsoft Excel Hilfe 3 08.08.2008, 15:00 Letzten Beitrag anzeigen
Keine neuen Beiträge Feld Abfrage flazZz Microsoft Access Hilfe 1 05.08.2008, 21:42 Letzten Beitrag anzeigen
Keine neuen Beiträge Filter in Abfrage setzen oder Ähnliches rhservice Microsoft Access Hilfe 2 04.08.2008, 20:04 Letzten Beitrag anzeigen
Keine neuen Beiträge Inhalt Kombifeld aus Abfrage, Ergebni... Milenio Microsoft Access Hilfe 2 31.07.2008, 16:28 Letzten Beitrag anzeigen


 Gehe zu:   



Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht 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 posten
Du kannst Dateien in diesem Forum herunterladen

Haftungsausschluss/Disclaimer


SMS kostenlos versenden | Battle-Dream | Tuning Forum | Join the YoungGeneration | krankenversicherungsvergleich | Kalorienarme Rezepte!
Versicherungsvergleich | Bürobedarf | Papier | Betten

Ranking-Hits



Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Alle Zeiten sind GMT + 1 Stunde
Deutsche Übersetzung von phpBB.de