2016-10-04 3 views
0

Ich bin kein Programmierer auf jeden Fall, aber ich versuche, eine kleine Datensammlung Datenbank gehen. Ich muss anhand der Eingabe einen Datensatz finden. Ich habe zwei Kriterien, die ich finden soll, und wenn beide nicht zusammen gefunden werden, soll es einen neuen Datensatz erstellen (wobei beide Felder ausgefüllt sind, um eine Duplizierung des Paares zu verhindern). Das erste Kriterium ist, dass es nach einem Datum suchen muss. Ich habe das schon herausgefunden, hier ist der Code.MS Access VBA, keine Ergebnisse beim Ausführen von DoCmd, um einen Datensatz zu finden

Dim Date1 As String 
Date1 = Text6.Value 

DoCmd.OpenForm "Data", , , "Data![ShiftDate] = #" & Date1 & "#" 

Funktioniert wie ein Charme. Jetzt habe ich versucht, das zweite Kriterium hinzuzufügen. Das zweite Kriterium wird aus einer Listbox, entweder Tag oder Nacht, gezogen. Dann soll es meine Datenfelder nach denselben Kriterien in einem Listenfeld auf meinen Daten durchsuchen! bilden.

Dim Date1 As String 
Dim Shift1 As String 

Date1 = Text6.Value 
Shift1 = List12.Column(1) 
MsgBox Shift1 

DoCmd.OpenForm "Data", , , _ 
    "Data![ShiftDate] = #" & Date1 & "# AND Data![Shift] ='" & Shift1 & "'" 

die msgbox war nur um zu überprüfen, dass es die richtigen Worte zieht, Tag oder Nacht. Alles funktioniert gut, aber anstatt eine Aufzeichnung am richtigen Datum zu ziehen, und mit der richtigen Schicht, erhalte ich leere Aufzeichnungen. Ich habe versucht, die erste Hälfte der where-Anweisung herauszunehmen, um den Schichtteil zu isolieren, und kann es immer noch nicht erreichen, um einen Datensatz zu finden. Ich habe keine Ahnung, was ich falsch mache.

+0

Wird 'Shift' wirklich als Text gespeichert oder zeigt das Listenfeld einen Text an, der mit einer numerischen ID verknüpft ist? Woher kommen die Einträge der Listbox? Wie Tag = 1, Nacht = 2 –

+0

Ich hatte eine Tabelle dafür, aber tötete schließlich die Listbox vollständig, weil es unnötig war. Es funktioniert jetzt nur als Textfelder. Jetzt besteht der Trick darin, herauszufinden, wie Daten in das Datums- und Verschiebefeld eingegeben werden, wenn sie noch nicht erstellt wurden! Wenn der Datensatz nicht gefunden wird, erstellen Sie wie gewohnt einen neuen Eintrag, füllen die beiden Kriterien aber automatisch mit den Eingaben aus, die für die Suche verwendet wurden. – Fenris522

+0

Sind die Namen der Kontrollfelder die gleichen wie die Namen der darunter liegenden Tabellen? – geeFlo

Antwort

0

Es scheint, dass Sie bereits ein Formular haben.

Ich empfehle Ihnen, diese versuchen: Fügen Sie eine Schaltfläche mit einem Click-Ereignis in das Formular und fügen Sie dem Click-Ereignis folgenden Code:

dim rs as dao.recordset set rs = currentdb.openrecordset ("SELECT * FROM [yourtable] WHERE ('ShiftDate' = '" & [yourParameter] & "' AND 'Shift' = '" & [your2ndParameter] & "')") if rs.eof then ' here NO record is found currentdb.execute ("INSERT INTO [yourtable] ('ShiftDate', 'Shift') VALUES ('" & [yourParameter] & "', '" & [your2ndParameter] & "')") else ' here a record is found endif

Da Ihr ShiftDate ist ein Datum, das Sie Ihre konvertieren müssen Datum in ein Format SQL Datum, wie folgt aus:

Function SQLDatum(Datumx) As String 
If IsDate(Datumx) Then 
    SQLDatum = Format(CDate(Datumx), "\#yyyy-mm-dd\#", vbMonday, _ 
         vbFirstFourDays) 
    Else 
    SQLDatum = "" 
End If 
End Function 
+0

Für eine einfache Suche würde ich einfach die "DLookup" -Funktion verwenden und nur die ID (Primärschlüsselfeld) zurückgeben, wenn der Datensatz. –

+0

DLookup könnte einfacher sein, aber ich habe gelernt, die Leistung eines RS ist besser. – snibbo

0

In Ihrem Befehl

DoCmd.OpenForm "Data", , , "Data![ShiftDate] = #" & Date1 & "# AND ... 

Sie öffnen ein Formular Data, aber gleichzeitig geben Sie einen Filter an, indem Sie auf das Formular verweisen, das mit Data![ShiftDate] geöffnet wird. Das ist sehr seltsam, da der Filter auf die Datenquelle angewendet werden muss. Ich würde einfach

DoCmd.OpenForm "Data", , , "ShiftDate= #" & Date1 & "# AND Shift= '" & Shift1 & "'" 

unter Bezugnahme auf die Tabellenspalten der Datenquelle (auf der linken Seite von =) schreiben.

Beachten Sie, dass die Spalte Shift eine Textspalte sein muss. Wenn es eine Nummer wäre, müssten Sie die einfachen Anführungszeichen löschen und eine entsprechende ID übergeben.

Verwandte Themen