Newsgroup: it.comp.appl.access
Titolo: [MSDE] INSERT in campo smalldatetime via VBA

Ciao a tutti.
C'è questo comportamento che non capisco.
Tabella Consecutive
                (IdBadge smallint,
                 OraInOut smalldatetime,
                InOut bit)
la tabella da cui sono caricati i dati del recordset ha la stessa struttura
perchè se scrivo:
                StringOut = "('" & Rst.Fields(0) & " '," & _
                            "'" & Format(Rst.Fields(1), "yyyymmdd hh:mm:ss")
& "'," & _
                            "'" & Rst.Fields(2) & "')"
                StringSQL = "INSERT Consecutive VALUES"
                StringSQL = StringSQL & StringOut
                Exec (StringSQL)
Ottengo questo errore:
"The conversion of char data type to smalldatetime data type resulted in
an-out-of range"
ma se utilizzo un recordset
    Rst1.addnew
    rst1.fields(0) = rst.fields(0)
    rst1.fields(1) = rst.fields(1)
    rst1.fields(2) = rst.fields(2)
questo errore non si presenta?
Per eseguire l'sql uso la funzione che posto sotto
Function EseguiCodice(StringSQL As String)
Dim Conn As ADODB.Connection
Dim Cmd As ADODB.Command
Dim Rst As ADODB.Recordset
'Stabilisce la connessione
    Set Conn = CurrentProject.Connection
    Set Cmd = New ADODB.Command
'Crea un nuovo oggetto recordset
    Cmd.ActiveConnection = Conn
    Cmd.CommandType = adCmdText
    Cmd.CommandText = StringSQL
    Cmd.Execute
End Function
Dove sbaglio e perché?
grazie a tutti


Ciao Alba,
il problema deriva dal fatto che la funzione Format(Rst.Fields(1), "yyyymmdd
hh:mm:ss") non rende una stringa compatibile con Sql Server.
La parte data è corretta, per la parte ora Sql Server prevede il separatore
: (due punti) e il separatore punto per i millisecondi.
La tua format rende questo risultato 20050419 09.26.00 che bisogna
trasformare così 20050419 09:26:00
Puoi risolvere in questo modo
----------
Replace(Format(Rst.Fields(1), "yyyymmdd hh:mm:ss") ,".",":")
----------
o meglio ancora costruirti una funzione personale per la conversione del
tipo data in stringa compatibile con Sql Server.
Ciao Giorgio


Semplice: MSDE non riconosce "yyyymmdd hh:mm:ss" come formato valido per una
data e non riesce a fare la conversione automatica.
Prova il formato ODBC Canonico yyyy-mm-dd hh:mm:ss.
In altre parole, per inserire una data in MSDE  attraverso una stringa SQL
devi necessariamente convertire la data che vuoi inserire in una stringa, ma
il formato di quest'ultima deve essere corretto.
Prova cosě.
ATTENZIONE non l'ho verificata, quindi controlla bene eventuali errori di
sintassi (apici e doppi apici)
StringOut = "('" & Rst.Fields(0) & " '," &  " CONVERT(SMALLDATETIME, '" &
Format(Rst.Fields(1), "yyyy-mm-dd hh:mm:ss") & "', 120) " & "'" &
Rst.Fields(2) & "')"
Torna?
Fammi sapere
--
Simplex2
www.mdenittis.it


[CUT]
Ciao simplex2,
direi di no :-) , il formato è corretto
----------
Tip: Che formato devo utilizzare per la definizione delle date?
http://italy.mvps.org/MVPs/lbenaglia/LorenzoBenaglia-Tip-FormatoDate.htm
----------
solo che la funzione Format di VBA non rende quanto ci si aspetta.
Ciao Giorgio

 ----------
Ciao Giorgio,
mi hai disorientato!
Ora sono incasinatissimo, magari dopo con piů calma mi leggo gli articoli.
Grazie.

 trasformare cosě 20050419 09:26:00
Ciao MVP (titolo meritatissimo)e simplex2,
e grazie per le risposte
quello che non capisco č questo:
1) se apro la tabella da Access e provo a scrivergli nel campo con i "."
mi salva il record e quindi ho presunto che la sintassi andasse bene.
2) se non uso alcuna format perché utilizzo direttamente Rst.Fields(1) che
contiene il valore Data estratto dalla tabella perché MSDE non me lo
accetta?
3) se invece apro un recordset in scrittura (rst1) e scrivo rst1.fields(1)
= rst.fields(1) mi accetta il valore.
Rimango sempre piů perplito .... :(
Ps. Approfitto ed apro un altro trhead relativo a MSDE 
titolo: Ciclare risultato SP
Ciao
MarcoMac
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Grazie.
Prego Giorgio

 Rimango sempre più perplito .... :(
spero di non aver generato ulteriori perplessità :-)
Ciao Giorgio

Se ( dal pannello di controllo) cambi il separatore da punto a due punti la
funzione format ti restituirą la stringa corretta per Sql Server
per non essere frainteso
----------
la funzione Format(Rst.Fields(1), "yyyymmdd hh:mm:ss") ti restituirą la
stringa corretta per Sql Server
----------
:-)
Giorgio