Re: Datumsformat im SQL String
From: Elmar Boye (ElmarB_at_gmx.net)
Date: 01/12/05
- Next message: Frank Kalis: "Re: Datepart week im Jahr 2005"
- Previous message: Elmar Boye: "Re: Performance DataCopy Access => SQLServer"
- In reply to: Gerald Aichholzer: "Re: Datumsformat im SQL String"
- Next in thread: Frank Kalis: "RE: Datumsformat im SQL String"
- Messages sorted by: [ date ] [ thread ]
Date: Wed, 12 Jan 2005 11:39:21 +0100
Hallo Gerald,
Gerald Aichholzer <gary@sbox.tugraz.at> schrieb ...
> Christa Kurschat wrote:
>>
>> Gerald Aichholzer <gary@sbox.tugraz.at> schrieb:
>>
>>> ist es nicht so, dass beim Verwenden von stored procedures das
>>> Datumsformat egal ist?
>>>
>>> z.B.
>>>
>>> CREATE PROCEDURE spListe ( @pDatum AS SMALLDATETIME )
>>> AS
>>> SELECT * FROM Tabelle WHERE DatumFeld < @pDATUM
>>>
>>>
>>> Und Aufruf in VBA:
>>>
>>> Dim cmd As ADODB.Command
>>> Dim rs as ADODB.Recordset
>>>
>>> Set cmd = New ADODB.Command
>>> Set cmd.ActiveConnection = CurrentProject.Connection
>>>
>>> cmd.CommandText = "spListe"
>>> cmd.CommandType = ... stored procedure ...
>>> cmd.Parameters.Add cmd.CreateParameter("pDatum", ... ,
>>> Now())
>>>
>>> rs.Open cmd
>>>
>>> Ist nicht voll funktionsfähig, soll aber als Anregung
>>> dienen.
>>>
>>
>>
>> das mag in dem speziellen Fall funktionieren, weil beides Datümmer
>> sind. Angenommen, Du nimmst nicht now(), sondern den Inhalt
>> irgendeines (ungebundenen) Eingabefeldes, dann klappts schon nicht
>> mehr, weil das Datum im Feld als String interpretiert wird und dann
>> ist es wichtig, daß der String im richtigen Format kommt. Oder Du
>> darfst als Parameter kein datetime verwenden sondern mußt in der SP
>> den String in datetime konvertieren.
>
> auf diesen Hinweis habe ich gewartet. In diesem Fall würde ich aber so
> vorgehen:
>
> Dim dtDatum As Date
>
> ...
> If Not IsDate(Me.txtDatum.Value) Then
> dtDatum = Date() ' oder Fehlermeldung an den Benutzer
> Else
> dtDatum = CDate(Me.txtDatum.Value)
> End If
>
> ...
> cmd.Parameters.Add cmd.CreateParameter("pDatum", ..., dtDatum)
>
Die von mir immer gepredigte Variante.
>
> Vorteile meiner Variante:
>
> - der Benutzer kann das Datum im lokal eingestellten Format
> eingeben (IsDate() und CDate() erkennen das)
> - das am SQL Server eingestellte Datumsformat ist egal
eben.
>
> Nachteile meiner Variante:
>
> - es muss eine SP erstellt werden
Nein, muss nicht. Parameter können überall verwendet werden.
Entweder positionell via "?", z. B.
SELECT * FROM Tabelle WHERE Datum = ?
Beim SQL Server und MDAC 2.6 (und höher) geht es sogar mit
benannten Parametern. Dazu für das Command-Objekt
cmd.NamedParameters = True
einstellen und
SELECT * FROM Tabelle WHERE Datum = @pDatum
verwenden, wobei der Parameter dann auch mit "@" Zeichen
eingeleitet werden muss.
> - mehr VBA-Code (in Zeilen)
Für Fehlertoleranz ein geringer Preis...
> - "komplexer" als einen SQL-String zusammenzubauen
... naja, wenn die SQL Anweisungen komplexer werden, ist
eine String-Orgie ;-) auch nicht das Wahre.
Und ein Vorteil soll noch genannt werden: Beim Verwenden von
Parametern kann der SQL Server die Befehle wiederverwenden,
da Parameter über sp_executesql übergeben werden.
Gruss
Elmar
- Next message: Frank Kalis: "Re: Datepart week im Jahr 2005"
- Previous message: Elmar Boye: "Re: Performance DataCopy Access => SQLServer"
- In reply to: Gerald Aichholzer: "Re: Datumsformat im SQL String"
- Next in thread: Frank Kalis: "RE: Datumsformat im SQL String"
- Messages sorted by: [ date ] [ thread ]
Relevant Pages
|