Hej! I Access anger man datum inom #, inte '. Därför ska det vara såhär: Är du bekant med parameterfrågor? Om du använder dessa slipper du sådana här problem. Att konkatenera in data i en SQL sträng är jobbig och osäkert.Datum, Access vs Visual Basic
Jag har haft ett problem med datumhantering relativt länge när det gäller att söka efter datum från ett VB-program och in i Access.
Problemet, tror jag, består i att när programmet ska kontrollera datum, går inte detta om fältet i Access är inställt på datum. Ställer jag om Access så att det blir ett textfält, fungerar det igen naturligtvis. Detta oavsett om datumet är i datumformat eller en sträng i VB.
Jag har provat de flesta metoder för att få VB och Access att begripa bägge två att det rör sig om ett datum, bland annat genom att göra om datumen till strängar, formatera datumet till rätt format (åååå-mm-dd) och så vidare. Dock utan att lyckas.
För att välja datum använder jag mig av en DateTimePicker, gör applikationen i VB6, har en svensk version av Access 97 alt 2002 som DBMS samt har kort datum i fältet och kontrollerat så att det är samma format i applikationen.
I just den här applikationen ska jag kontrollera om en viss post befinner sig mellan två olika datum, i princip så här just i den delen:
strListSql = strListSql & "and [MEDDELANDE].[datum] between """ & datDatum1 & """ and """ & datDatum2 & """"
Jag tror att det bara är något missat tecken, eller att jag inte har gjort någon nödvändig inställning (eller att svensk Access och VB6 inte är kompatibla vad gäller datum...). Det fungerar förvisso hyfsat ändå, men jag skulle gärna vilja ha det som det är avsett.
Någon som kan ge lite hjälp i denna frågan??
Mvh // DanSv: Datum, Access vs Visual Basic
strListSql = strListSql & "and [MEDDELANDE].[datum] between #" & datDatum1 & "# and #" & datDatum2 & "#"
Detta fungerar bra med svenska inställningar. Jag har dock märkt att det blir problem med finska inställnignar, därför brukar jag alltid formatera om datumet till amerikanskt format innan jag sätter in det i SQL-strängen (eller så använder man command-objektet och sätter parametrar, då slipper man problemet).
/JohanSv: Datum, Access vs Visual Basic
Om du bifogar lite mer omgivadnde koda så kan jag visa hur du löser det med en parameter fråga.
Access är förtjust i Amerikansk datumformat och använder #-tecknet som avskiljare:
Option Explicit
Function AccessDate(Value As Date) As String
AccessDate = "#" & _
Right("0" & Month(Value), 2) & "/" & _
Right("0" & Day(Value), 2) & "/" & _
Right("0" & Year(Value), 4) & _
"#"
End Function
Om du även vill kunna skicka Null:
Function AccessDate(Value As Variant) As String
If IsDate(Value) Then
AccessDate = "#" & _
Right("0" & Month(Value), 2) & "/" & _
Right("0" & Day(Value), 2) & "/" & _
Right("0" & Year(Value), 4) & _
"#"
Else
AccessDate = "NULL"
End If
End Function
Du använder koden på följande sätt:
strListSql = strListSql & " AND [MEDDELANDE].[datum] BETWEEN " & AccessDate(datDatum1) & " and " & AccessDate(datDatum2)