Access wie kann man mit Werten aus dem vorigen Datensatz arbeiten

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
SELECT TOP 1 Datum FROM Berichte ORDER BY Datum DESC;

Den Spalten und Tabellennamen musst du natürlich noch anpassen ^^ den habe ich jetzt mal frei erfunden ^^

Ich hoff es hilft dir weiter.

Liebe Grüße,

Davi Schwickerath

BrilleHN 
Fragesteller
 22.05.2013, 06:37

Das ist eine SQL-Abfrage kann man die auch in VBA benutzen?

0
Davidtut  22.05.2013, 06:59
@BrilleHN

kannst du mit DoCmd.RunSQL ("SELECT TOP 1 Datum FROM Berichte ORDER BY Datum DESC;") in VBA ausführen ;-)

Viel Erfolg =)

1
BrilleHN 
Fragesteller
 22.05.2013, 13:16
@Davidtut

Wenn ich jetzt folgendes schreibe (kann ich erst heute Abend testen)

Dim altes_Datum
altes_Datum = DoCmd.RunSQL ("SELECT TOP 1 Datum FROM Berichte ORDER BY Datum DESC;")

Dann sollte, wenn sich SQL in Access genauso verhält wie SQL in PHP in der Variablen altes_Datum ein Array befinden.

Wenn das so ist wie bekomme dann ich das Datum aus dem Array?

0
Davidtut  22.05.2013, 14:17
@BrilleHN

oh Entschuldigung ich vergas das DoCMD.RunSQL nur für delete, update und insert anwendbar ist.

versuch das einmal

altes_Datum = DLookup("Datum","Berichte","order by Datum DESC Limit 1")

1
BrilleHN 
Fragesteller
 22.05.2013, 20:36
@Davidtut

Vielen Dank ich habe es jetzt hinbekommen - sieht ein wenig verrückt aus:

Private Sub Abteilung_AfterUpdate()
If Nz(Me!start) = "" Then
Dim strSQL
strSQL = DLookup("start", "tabWochenBerichte", "[ID]=Forms![Wochenbericht]![ID]-1")
If strSQL <> "" Then
Me!start = DateAdd("d", 7, strSQL)
Me!ende = DateAdd("d", 4, Me!start)
Me!KW = Format(Me!start, "ww", 2, 2)
Me!Jahr = Year(Me!start)
End If
End If
End Sub

Es funktioniert super - aber weißt Du zufällig wie man beim Erstellen eines neuen Datensatzes den Fokus auf ein bestimmtes Feld legen kann?

0
CholoAleman  22.05.2013, 22:48
@Davidtut

statt dem alten DoCmd.RunSQL würde ich die mehr effiziente Version

CurrentDb.Execute “Query statement”

benutzen. Funktioniert auch prima wenn Parameter aus Formularen geholt werden.

1

Ja, man kann SQL-Abfragen auch in VBA nutzen:

Erstelle eine Abfrage auf Deine Tabelle, wie Du es immer machst (Assistent, Entwurf..) und verwende nicht viel Aufwand darauf (Tabelle[n] einbinden, keine Bedingungen und fertig).

Öffne diese Abfrage (Doppelklick)

Geh dann auf ''Ansicht'', ''SQL-Ansicht''

Lösche den vorhandenen SQL-Text und füge Deinen SQL-Code ein.

Für die Fortgeschrittenen (nicht zum obigen Problem gehörig):

Umgekehrt kannst Du auch eine ordentliche Abfrage erstellen, Dir den SQL-Code wie oben herauskopieren und im VBA-Code verwenden um Datensätze für eine Listbox etc. zu selektieren:

strNeuerDS = "SELECT ...."
 Me.MeineListbox.RowSource = strNeuerDS
Me.Requery
PauleVBA  22.05.2013, 09:50

Hier mal ein kompletter Auswahlstring mit Variable:

strNeuerDS = "SELECT Tabelle_Nutzer.Feld_Name, Tabelle_Nutzer.Feld_Vorame " & _
FROM Tabelle_Nutzer WHERE Tabelle_Nutzer.Feld_Name Like '" _
& Me.TextBox_Name_Search.Value & "*'

Der String begrenzt dann auf alles was wie die Textbox_Name_Search beginnt.

Mei liefert dann Meier, Meierei, Meinert,..... eben allse was mit Mei beginnt.

Beachten muss man, dass die RowSource hinten kein Semikolon als Abschluss des SQL zulässt

0
BrilleHN 
Fragesteller
 29.05.2013, 18:29
@PauleVBA

Ist das die gängig Syntax?

Tabelle_Nutzer.Feld_Name

wenn ich mit SQL in einem VBA-Script auf ein bestimmtes Feld in einer Bestimmten Tabelle zugreifen möchte?

Ich hatte Probleme, als ich den SQL-Code einer Aktualisierungs-Abfrage 1:1 verwenden wollte bzw. das hier hat nicht funktioniert:

SELECT tabAzubis.Auszubildender
FROM tabWochenBerichte INNER JOIN tabAzubis ON tabWochenBerichte.[Azubi-ID] = tabAzubis.[Azubi-ID]
WHERE (((tabWochenBerichte.[Azubi-ID])=[tabAzubis].[Azubi-ID]))
GROUP BY tabAzubis.Auszubildender
0

Hallo,

ein recht einfache Möglichkeit wäre, einen Button "Neuer Datensatz mit Datum des aktuellen Datensatzes" in das Formular zu setzen, und in den Click-Event desselben etwa:

CLng(MAltesDatum) = Me!Datum
DoCmd.GoToRecord , "", acNewRec
Me!Datum = DateAdd(7, "d", MAltesDatum)

Das sollte es tun, wenn neues Datum 7 Tage vom alten Datum entfernt ist, ansonsten andere Werte benutzen.

Hilft das?

Gruss, Cholo

BrilleHN 
Fragesteller
 23.05.2013, 07:13

Ja aber wenn man das aus einem Datensatz heraus aufruft welcher nicht der letzte ist, dann stimmt das Datum im neuen nicht.

0
CholoAleman  24.05.2013, 00:46
@BrilleHN

Das ist richtig, das ist hier die Bedingung. Aber auch das kannst Du schnell erledigen: Wie kann man Deinen letzter Datensatz erkennen?

Das höchste Datum?

Dann statt CLng(MAltesDatum) = Me!Datum eben

CLng(MAltesDatum) = DMax([Datumsfeld],[Tabelle])

Ist es das Autonumfeld (so es das gibt):

CLng(MAltesDatum) = DMax([Autonumfeld],[Tabelle])

Oder so. Hilft?

Gruss, Cholo

0
CholoAleman  24.05.2013, 00:54
@CholoAleman

Sorry, das zweite Beispiel ist natürlich Stuss. Es muss heissen

CLng(MAltesDatum) = DLookup("[Datumsfeld]", "[Tabelle]", "[Tabelle].[Autonumfeld] = DMax([Autonumfeld],[Tabelle])")

Wenn das mit dem Nesten der zwei aggregated functions nicht funktioniert, das DMax zunächst einer Variablen zuweisen, z.B. MTest, und dann:

CLng(MAltesDatum) = DLookup("[Datumsfeld]", "[Tabelle]", "[Tabelle].[Autonumfeld] = " & MTest)
0