Freigeben über

SQL Abfrageergebnis in Variable Speichern VBA

Anonym
2015-11-18T13:25:14+00:00

Hallo,

Ich stehe irgendwie vor der sprichwörtlichen Wand. Ich brauche, um eine Funktion so zum Laufen zu bringen, wie ich das gern möchte, das Ergebnis einer SQL Abfrage in einer Variable, die ich im VBA Code weiterverarbeiten kann.

Bisher sieht mein Versuch so aus:

[CODE]

Dim store as Recordset

Set store = CurrentDb.OpenRecordset("Select ID FROM Chronik_Computer WHERE (Computername = '" & Me.Computername.Value & "') AND (Ausgabedatum = '" & Me.Ausgabedatum.Value & "') AND (Rueckgabedatum = '');")

[/code]

Aber wenn ich dann diese Funktion aufrufe bekomme ich immer nur einen Fehler: "Datentypenkonflikt in Kriterienausdruck"

Die Dateitypen sind aber zueinander passend. In der Tabelle ist es bei Ausgabedatum logischer Weise ein Datumsfeld. Das ist me.ausgabedatum aber auch. Also dürfte dieser Value doch passen. Bei Computername haben wir einfachen Text. und Rueckgabedatum ist in diesem Fall eh leer. Aber warum bekomme ich ständig diese Fehlermeldung?

[EDIT]

Ok, die Typenkonflikte habe ich insofern behoben, dass ich jetzt die Felder in der Datenbank, auf die ich  mich hier beziehe von "Datum" in "Kurzer Text" geändert habe. Nun bekomme ich auch die richtige ID heraus, die ich mir auch per MsgBox anzeigen lassen kann. ABER.... Wenn ich diese so ermittelte ID als Kriterum in einem INSERT Befehl als WHERE Klausel nutzen will, kommt WIEDER das "Typen Unverträglich".... ich werd hier noch verrückt. Ich kann auch nicht mal das Ergebnis (also die Variable "store" in eine Integer-Variable übergeben. Auch hier sind die Datentypen unverträglich. Ich frage mich ehrlich, was das soll...

Was ich also wirklich hier erreichen will ist folgendes:

Ich habe eine Chronik-Tabelle (wie ja oben zu sehen ist) in der ich Alle biesherigen Transaktionen zwischen Usern und PCs ablege. Sodass immer nachvollzogen werden kann, wer in welchem Zeitraum welchen Rechner hatte etc.

Nun soll, wenn ein PC zurückgegeben wird natürlich das Rückgabedatum in die entsprechende Zeile geschrieben werden.

Damit das auch korrekt funktioniert, brauche ich die oben stehende Abfrage um die ID der Zeile herauszufinden, die editiert werden muss. Mit dieser ID wollte ich dann folgenden Code ausführen:

[Code]

CurrentDb.Execute "INSERT INTO Chronik_Computer ([Rueckgabedatum]) VALUES ('" & Me.Heute & "') WHERE ID = '" & store & "';"

[/code]

Aber auch hier wieder: Typen Unverträglich

[/edit]

Ist es wirklich so schwer ein Abfrageergebnis in eine Variable zu speichern?

Bitte um Hilfe!

Microsoft 365 und Office | Access | Für Zuhause | Windows

Gesperrte Frage. Diese Frage wurde aus der Microsoft-Support-Community migriert. Sie können darüber abstimmen, ob sie hilfreich ist, aber Sie können keine Kommentare oder Antworten hinzufügen oder der Frage folgen.

0 Kommentare Keine Kommentare

Antwort, die vom Frageautor angenommen wurde

Anonym
2015-11-19T08:07:58+00:00

Vielen Dank für eure Hilfe.

Ich habe gestern noch einige Zeit herumprobiert und schlussendlich habe ich die Felder der Tabelle in "kurzer Text" geändert. Damit war dieses Problem schon mal behoben.

Was das Hinzufügen des Rückgabedatums in die schon vorhandene Zeile mit der Ausgabe angeht, nun, da habe ich einen Wertvollen Tip einer unserer Hauseigenen Java Programmierer bekommen.

Ein INSERT INTO erstellt wohl zwingend eine neue Zeile und kann damit logischer Weise keine Zeile verändern.

Dazu braucht es den UPDATE Befehl. Final sieht die Funktion nun so aus:

Dim store As DAO.Recordset

Dim agd As Date

Dim rowid As Integer

If Me.im_Lager = True Then

MsgBox ("Gerät ist bereits im Lager und kann nicht erneut eingelagert werden!")

Else

agd = Me.Ausgabedatum.Value

Set store = CurrentDb.OpenRecordset("SELECT ID FROM Chronik_Computer WHERE Chronik_Computer!Computername = '" & Me.Computername.Value & "' AND Chronik_Computer!Ausgabedatum = '" & agd & "' AND Chronik_Computer!Rueckgabedatum IS NULL")

rowid = store(0)

store.Close

Set store = Nothing

CurrentDb.Execute "UPDATE Chronik_Computer SET Rueckgabedatum = '" & Date & "' WHERE ID = " & rowid & ";"

Me.Ausgabedatum.Value = ""

Me.im_Lager = True

Me.Ausgegeben = False

End If

War diese Antwort hilfreich?

0 Kommentare Keine Kommentare

2 zusätzliche Antworten

Sortieren nach: Am hilfreichsten
  1. Anonym
    2015-11-18T19:49:50+00:00

    Hallo Patrick,

    was Karl geschrieben hat stimmt soweit. Allerdings ist Deine Variable store vom Typ Recordset und nicht vom Typ Long.

    Korrekt wäre also store!ID das sollte dann passen.

    Wenn es sich nur um einen Wert handelt solltest Du mal in die Hilfe unter DLookup schauen. Das geht dann so wie Du es eigentlich gemeint hast :)

    Dim i as long

    i = dlookup("ID", "Chronik_Computer", "Computername = '" & Me.Computername.Value & "') AND (Ausgabedatum = '" & Me.Ausgabedatum.Value & "') AND (Rueckgabedatum = ''")

    CurrentDb.Execute "INSERT INTO Chronik_Computer ([Rueckgabedatum]) VALUES ('" & Me.Heute & "') WHERE ID = " & i

    Viele Grüße

    Mike

    War diese Antwort hilfreich?

    0 Kommentare Keine Kommentare
  2. Anonym
    2015-11-18T17:56:15+00:00

    Hallo!

    Wegen der Datümer s. http://www.donkarl.com?FAQ6.8 .

    Im zweiten SQL-Bsp. hast du ein Feld "ID". Falls das in der Tabelle ein Zahlfeld ist (kein Textfeld), dann mussst du bei der Parameterübergabe die Hochkommas vorne und hinten weglassen.

    War diese Antwort hilfreich?

    0 Kommentare Keine Kommentare