PDA

Vollständige Version anzeigen : Access: Daten von Tabelle per VBA abfragen


Frankne
22.03.2004, 14:29
Hallo,
ich habe die Tabelle "Kalender" in diesem Format: 1. Spalte ist das Datum des ersten des Monats und die 2. Spalte ist die Stundenzahl des Monats bsp: "1.1.2004"; "160"

Nun ist meine Frage Wie kann ich die Daten der Tabelle "Kalender" per VBA abfragen?
Ich wollte das in etwa so haben txtsollstunden = getSollstunden("1.1.2004").

Wohl gemerkt es soll per VBA passieren und nicht per Access direkt.
Vielen Dank im Voraus
Gruß Frank

Arne Dieckmann
22.03.2004, 15:09
Teste einmal diese Funktion (Feldnamen in den eckigen Klammern noch anpassen):

Public Function getSollStunden(Datumswert As Date) As Variant

On Error GoTo getSollSt_Err

Dim strSQL As String
strSQL = "SELECT [Stundenfeld] FROM Kalender WHERE [DatumsFeld]=" & Format(Datumswert, "\#yyyy\-mm\-dd\#")
getSollStunden = DBEngine(0)(0).OpenRecordset(strSQL, 8)(0)
Exit Function

getSollSt_Err:
If Err.Number = 3021 Then
getSollStunden = Null
Else
getSollStunden = "#ERROR"
End If

End Function

Frankne
22.03.2004, 16:18
xxx

Frankne
23.03.2004, 15:12
Hallo noch mal,

was muss ich in der Funktion ändern, damit ich auch nach strings suchen kann?

momentan sieht der code so aus:

Dim strSQL As String
strSQL = "SELECT Arbeitszeit FROM Stundenarten WHERE Stundenart = 21 ArbeitsStunden"
istArbeitszeit = DBEngine(0)(0).OpenRecordset(strSQL, 8)(0)
Exit Function


gruß Frank

Arne Dieckmann
23.03.2004, 15:20
Das müsste so gehen:

strSQL = "SELECT Arbeitszeit FROM Stundenarten WHERE Stundenart='21 ArbeitsStunden'"

Etwas flexibler ist allerdings die Funktion TLookup(), die man wie DLookup() (DLookup() findest Du in der Onlinehilfe), verwenden kann. Dort musst Du aber die erforderlichen Kriterien vorher richtig zusammenbasteln:

Public Function TLookup(Expression As String, Domain As String, Optional Criteria) As Variant

'Ersatz für DLookup()

On Error GoTo TLookup_Err

Dim strSQL As String
strSQL = "SELECT [" & Expression & "] FROM [" & Domain & "]"
If Not IsMissing(Criteria) Then strSQL = strSQL & " WHERE " & Criteria
TLookup = DBEngine(0)(0).OpenRecordset(strSQL, 8)(0)
Exit Function

TLookup_Err:
If Err.Number = 3021 Then
TLookup = Null
End If

End Function

Anwendung dann in VBA und in diesem Fall:

DeineVar=TLookup("Arbeitszeit","Stundenarten","Stundenart='21 ArbeitsStunden'")

Frankne
23.03.2004, 15:51
bei TLookup kommt die Fehlermeldung:

Es wurde 1 Parameter erwartet, aber es wurden zuwenig übergeben.

bei der Variante mit:
strSQL = "SELECT Arbeitszeit FROM Stundenarten WHERE Stundenart='21 ArbeitsStunden'"
kommt die selbe fehlermeldung

Danke für deine Unterstützung
Gruß Frank

Arne Dieckmann
23.03.2004, 16:41
So auf den 1. Blick sehe ich keinen Fehler in der Anweisung, deswegen folgende Rückfragen von mir:

Stimmen die Feldnamen hundertprozentig? Bitte 3mal kontrollieren - manchmal liegt es nur an einem Buchstabendreher ("Arbeitszeit" heisst in der Tabelle tatsächlich "Arbeitsziet" oder so etwas).

Was ist Stundenart für ein Feld, bitte imTabellenentwurf nachsehen (nachher ist es doch ein Zahlenfeld, das wiederum in einer anderen Tabelle nachschlägt ... - haben wir schon alles gehabt).

Handelt es sich bei "Stundenarten" um eine Tabelle oder wiederum eine Abfrage?