PDA

Vollständige Version anzeigen : Datum in SQL mit Recordset Wie ?


Elko
03.01.2002, 22:31
Hallo
Ich schon wieder

Möcht mit einer Prozedur veststellen ob es ein Datum in einer Tabelle schon gibt.

strNR = Me.AnfangsDatum 'Mein Feld in meinem Formular
If Err <> 0 Then
Beep
Exit Sub
End If

strSQL = "select * from Daten where[Anfangs_Datum] = '" & strNR & " '"

Set db = CurrentDb()
Set rs = db.OpenRecordset(strSQL, dbOpenSnapshot)
Err = 0
rs.MoveLast
If Err <> 0 Then
rs.Close
Exit Sub
End If
lngAnz = rs.RecordCount
rs.MoveFirst
strMsg = "Schichtplan vom »" + strNR + "« existieren bereits:" + vbCrLf + vbCrLf
For I = 1 To lngAnz
strMsg = strMsg & "Schitplan" & " " & rs("[Anfangs_Datum]") & " " & vbCrLf

rs.MoveNext
Next I
rs.Close
Beep
MsgBox strMsg, vbOKOnly + vbInformation, "Hinweis:"

Aber ich komme da nicht so ganz klar die Variable StrNR = As Date
aber wie schreibe ich es in die SQL ?

Vieleicht kann mir nochmal jemand helfen

MarioR
03.01.2002, 22:52
Hallo,

versuch mal Folgendes:

strSQL = "select * from Daten where [Anfangs_Datum] = " & Format(strNR, "\#yyyy\-mm\-dd\#")

Goki
03.01.2002, 22:55
Hallo Elko,

das geht in SQL über einen Umweg ...

Grund:
Du gibst im Formular das Datum im deutschen Format 01.01.2002 ein.

Der Fehler:
VBA arbeitet mit armerikanischen Zahlen- und Datumsformaten. D. h. du mußt das Datum vor dem Einsetzen in den SQL-String "auseinandernehmen und wieder zusammensetzen". Ausserdem ist der SQL-String ein bißchen falsch aufgebaut ... da fehlen ein paar Klammern ... :D

Wie das geht?
Und zwar so ... Folgenden Code mußt Einbauen und und schon kann es losgehen ... :D

' Die Variablen für den SQL-Aufruf
dim db as Database, rs as Recordset, SQL as String
' Die Variablen für den Umbau des Datums
Dim ConvDat As Variant, ConvDatTag As Variant, ConvDatMo As Variant, ConvDatJahr As Variant

' Ab hier wird das Datum umgebaut
ConvDatTag = Left(Me!AnfangsDatum, 2)
ConvDatMo = Mid(Me!AnfangsDatum, 4, 2)
ConvDatJahr = Right(Me!AnfangsDatum, 4)
ConvDat = ConvDatMo & "/" & ConvDatTag & "/" & ConvDatJahr

' Ab hier wird der SQL-String zusammengesetzt
SQL = "SELECT * FROM Daten WHERE ((Daten.Anfangs_Datum) = #" & ConvDat & "#);"

' Der Select wird ausgeführt
set db = CurrentDb
set rs = db.OpenRecordset(SQL, dbOpenDynaset)

So damit klappts dann auch mit dem Nachbarn <img src="graemlins/grins.gif" border="0" alt="[grins]" />

slg
Goki <img src="graemlins/kasperl.gif" border="0" alt="[Kaslperl]" />

Sascha Trowitzsch
03.01.2002, 22:56
Hallo,

(wieso ist eigentlich bei dir eine Variable mit dem Präfix 'str' vom Typ Datum?)

Das muss so aussehen:

Dim strD as String

strD="#" & Format(strNR, "mm") & "/" & Format
(strNR, "dd") & "/" & Format(strNR, "yyyy") & "#"

strSQL = "select * from Daten where[Anfangs_Datum] = " & strD

Leider ist diese komplizierte Konvertierung nötig, weil der SQL-Parser nur amerikanische Datumsformate versteht.
(Aus "4.01.2002" wird "#01/04/2002#" )

Ciao, Sascha

erwin
03.01.2002, 23:15
hmmmm ( @sascha )

wieso nur AMI, ich hatte bis dato bei Jet-SQL auch mit ISO keine Prob. dh. zB.: tab.Datumsfeld = Format(DatumsVar,"yyyy-mm-dd")

so long erwin...

Elko
04.01.2002, 09:09
Vielendank jetzt weis ich bescheid

Phillip-Berlin
07.03.2002, 14:13
mir hat dieses zeuch den letzten nerv geraubt:

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Private Sub</span> Befehl25_Click()
<span class="TOKEN">Dim</span> strSummeBuchungstag1
<span class="TOKEN">Dim</span> strD
strNR = Me.txtBuchungstag1
strD = Format(strNR, &quot;mm&quot;) &amp; &quot;-&quot; &amp; Format(strNR, &quot;dd&quot;) &amp; &quot;-&quot; &amp; Format(strNR, &quot;yyyy&quot;)
strSummeBuchungstag1 = DSum(&quot;[Personenzahl]&quot;, &quot;qryBuchungstag1&quot;, &quot;[best] = #&quot; &amp; strD &amp; &quot;# &quot;)
&nbsp;
<span class="TOKEN">End</span> <span class="TOKEN">Sub</span></pre></div>

@sascha ... übrigens danke