Newsgroup: it.comp.lang.visual-basic
Titolo: MDAC and Date

Ho una semplice domanda da fare!
Quando da vb creo una stringa sql e la do da mangiare a un recordset,
se ho l'MDAC in italiano o in inglese cambia qualcosa?? (mi riferisco al
formato delle date)
Secondo me influisce solo dal database che ho sotto o mi sbaglio????
Grazie mille
Mik

 ha scritto nel messaggio
news:baamh1$q8hv5$1...@ID-165476.news.dfncis.de...

non sbagli affatto il fatto che l'mdac sia in italiano od in inglese non
cambia,
cambia a seconda del formato standard con cui è configurato il db

[*KillerBoy* : 
kill...@killerboy.org
] ha scritto:

Ehhhhhhhhh???

 Ehhhhhhhhh???
Come ehhhhhhh??

[*Mik* : 
spud...@gmx.net
] ha scritto:

Ehhhhh!!! I dati in un (tipo di) database, _fortunatamente_ sono sempre
scritti alla stessa maniera. L'esposizione degli stessi è un altro discorso
che col database non c'azzecca una cippa, anzi, meno ancora!


Beh fin qui siamo d'accordo!!!! Ovviamento...
Il problema è il seguente,
metti ad esempio una query...
SELECT * FROM tabella WHERE   fldData >= '12/12/2003'
Chi decide come interpretarla??? il db! No?

 Chi decide come interpretarla??? il db! No?
Bocciato ... è il linguaggio di programmazione che appoggiandosi a
quel dannato registro da dove prende le impostazioni internazionali
si comporta di conseguenza. Solo in visualizzazione però.
Quando parli con un db ... parla sempre in inglese e vedrai che ti
capisce che sia cinese, americano o ostrogoto.
-- 
Saluti
Andrea Moro
Sito Comune : 
http://www.it-lang-vb.net

capisce che sia cinese, americano o ostrogoto.
Il DB nelle date non parla sempre in inglese...... non parla nessuna
lingua...

 Chi decide come interpretarla??? il db! No?
Non scherziamo.
Esiste una sintassi dipendente dal db. Che poi il db decida di 'accettare'
espressioni scritte merdosamente, e di interpretarle, è una eccezione, e non
deve essere confusa con la norma.
Quindi, se lavori con Access, dovrai usare SEMPRE il formato #mm/dd/yyyy#,
se usi Sql-Server o MSDE, e tanti altri, dovrai usare SEMPRE 'yyyymmdd'.
Ma che il db sia in inglese, italiano, giapponese, greco o turco, per te la
query non cambia.
E ci mancherebbe anche...
Alberto

 capisce che sia cinese, americano o ostrogoto.
Sono daccordo con la visualizzazione,
ma il vb con l'interpretazione della stringa
'06/05/2003'
non centra niente!!!
E penso che se il db è installato col formato predefinito in italiano
non interpreterà mai com cinque giugno 2003 ma bensi come
sei maggio 2003!


Non è che sia molto vero...

 ha scritto nel messaggio
news:wA5ya.14466$lK4.4...@twister1.libero.it...

RISOLTO!!!!!!!!!!!!!!!!!!
dipende dall'utente di sqlserver che accede!!!

 Chi decide come interpretarla??? il db! No?
Beh quella al limite è la formattazione e la prende anche dalle impostazioni
internazionali!
N.b.
L'SQL in tutti i manuali si prende le date come mm/dd/yyyy
poi ci sono tools (Access è il tools grafico di jet) che son di manica
larga!
12/12/2003
dovrebbe essere il 12 dicembre
4/1/2003
il 1 di Aprile
se poi access ti "abitua male" quelli son fatti di access....come ti han
detto la data è memorizzata sempre nel solito formato
è un po la storia del Double
12.405,324
12405,324
12,405.324
secondo te il numero come è memorizzato?
in 3 modi diversi???
o è FORMATTATO in 3 modi diversi?
--
Il Wodkino Nazionale è a : 
www.martek.it
Pagina Vb/Bestiario/Lamer Experience :
http://www.martek.it/go.asp?portamia=2
 Quotefix e altro:
http://www.martek.it/go.asp?portamia=4
Usr: ICLVB Pw: amici

 dipende dall'utente di sqlserver che accede!!!
Vedo con piacere che non hai capito una beata fava di quello che ho scritto.
Buon lavoro
Alberto


Tu cosa mi suggerisci?
Ciao
Alberto
-- 
Santo cielo, Magnum, si può sapere cos'è questo baccano?
Higgins, posso spiegarle...
Credo non sia necessario.
Zeus, Apollo, a voi...

Parliamo di SQLSERVER e VB
Il problema come ho scritto sopra dipendeva dall'utente!
Se fai una query e ti loggi con un utente con default inglese
interpreta (SQLS) come è il formato standard in inglese,
se fai una query e ti loggi con un utente con default italiano
interpreta (SQLS)  come è il formato standard italiano!!!!!!!
Mik

 dipende dall'utente di sqlserver che accede!!!
Mik, no!
La formattazione/visualizzazione dei dati la fai tu. Se non la fai tu, in
molti casi valgono le impostazioni del sistema (e quindi con quelle scelte
dall'utente).
Ma tutto ciň non c'entra niente con i dati scritti nel database.
Questa distinzione (e il concetto che sta dietro) č fondamentale!

 Buon lavoro
Andrea


Al di la del fatto che in SQL-SERVER  le date sono memorizzate in un
formato double che rappresentanto i secondi a partire da una certa
data che adesso non ricordo, ma in ogni caso prova in sql server 2000
a definire un utente in linuga italiana e uno in lingua inglese e
fargli una query sulla date.

[*Mik* : 
spud...@gmx.net
] ha scritto:

Sostituisci quell "interpreta" con "visualizza" e siamo tutti d'accordo.
Sino ad allora nessuno può affermare questa cosa.


Gia scritto 


Prima che tu ti convinca di avere scoperto l'America, sappi che ti stai
infilando in un tunnel senza fine.
Escine al più presto, magari rileggendoti alcuni post sopra.



Lo faccio normalmente per avere sempre ambienti di test credibili.
Una query sulle date, eseguita da un utente ITA o da un utente ENG o Turco o
Siciliano, è assolutamente identica.
Come dicevo sopra, solo query scritte merdosamente risentono di queste cose.


[*massi69* : 
gorreri...@imotionline.com
] ha scritto:

Vorresti dire che esistono query diverse a seconda della lingua?
E la sintassi _unica/standard/inamovibile/certa/guai al primo che la
tocca(per cervellotica che sia)_ di SQL (linguaggio SQL) che ruolo ha?

 Gia scritto
... sei scivolato ... ;-)


Inviami le query d'esempio che le provo !

[*massi69* : 
gorreri...@imotionline.com
] ha scritto:

Per SQL Server:
... where data='aaaammgg'
Per Access:
... where data=#MM/GG/AAAA#

> Vedo con piacere che non hai capito una beata fava di quello che ho
scritto.
Scusa mi ero confuso, probabilmente non mi sono spiegato bene!
Hai perfettamente ragione a dire che se uso il formato yyyymmdd
funziona in ogni caso con sqlserver!
E da adesso farň cosě!
Il rpoblema era che io partivo da una query sql scritta nel modo
data>'23/04/2003'
e quindi ottenevo risultati diversi a seconda del linguaggio dell'utente!
tutto qui...


Select * from tabella where data between '20030101' and '20030519'


 e quindi ottenevo risultati diversi a seconda del linguaggio dell'utente!
Infatti è sbagliata, anche per Access che però è buono e capisce che quel 23
non può essere un mese.


Ok OK ho postato sopra!!
Grazie!

 non può essere un mese.
Infatti non lo sapevo che andavano scritte in quel modo!
Adesso ho perfettamente capito!!
Anche la distinzione tra visualizzazione e memorizzazione!
Grazie ancora!

 Alberto
Grazie albe la "beata fava" mi ha rimesso al mondo!
era un pezzo che non la sentivo dire.....ma sei conterraneo pure tu?
:-D
--
Il Wodkino Nazionale č a : 
www.martek.it


 :-D
Per questi commenti metti OT davanti!!!
Grazie!
MIk

Select * from tabella where data between '20030101' and '20030519'
 Sei sicuro che ti funzioni passandola come parametro da DAO 3,51? Con
un utente impostato con lingua italiana ?

 era un pezzo che non la sentivo dire.....ma sei conterraneo pure tu?
Ho un socio spezzino.
L'ho preso su dai lui.
Qua si direbbe:
"damant al solet at'nè capì un bel cas ed gninto"
Ciao
Alberto

 un utente impostato con lingua italiana ?
Non uso DAO.
Vuoi però dirmi che con DAO la query dipende dalle impostazioni del login
Sql-Server?
Se così è, sono ben felice di non usarlo.
Ma credo che Lupo potrà illuminarci.


Ma se devo considerare anche l'ora comecostruisco la query??
yyyymmaa hhnn  ???
MIk


Te lo dico perche ho avuto un anno, forse anche di piu, fa un
applicazione con questo problema scritta in DAO e la notazione yyymmdd
non se la diregiva, ed era sensibile al cambio dell'utente, ai quei
tempi ho trovato anche dei documenti di MS che dicevano per l'appunto
di controlla lo user in Sql server se non si usavano le trusted
connection.

 yyyymmaa hhnn  ???
Select * from tabella where data> 'yyyymmdd hh:mm:ss.nnn'
Ovviamente quello che non metti vale 0 (ad esempio, se non metti i secondi
si considera 00, ecc...).
Ciao
Alberto
PS: in realtà, esiste anche la possibilità di utilizzare la lettera T al
posto dello spazio, ma non è compatibile con alcuni altri dbms. Per cui, io
non la metto.

 ha scritto nel messaggio
news:gd6ya.14438$Ny5.4...@twister2.libero.it...

Grazie ancora!!
Mik

>> 'yyyymmdd'.
"SEMPRE" ?
In Oracle puoi definire tu il formato delle date e di tanti altri tipi
di dato durante una sessione, es.
alter session set nls_date_format='YYYY/MM/DD'
Ricordo che di default Oracle usa il formato
'DD-MMM-YYYY'
Stefano "HappyMan"
--
Database Gate - The Powerful SQL Editor ODBC-based
HD Checker - The S.M.A.R.T. Hard Disk Reader
Asus Checker - CPU and Asus MB Checker
http://www.sgr.info

 Stefano "HappyMan"
volendo lo puoi fare anche con SQL Server, usando l'istruzione
SET DATEFORMAT xxx
che mi sembra sia valida solo per la connessione corrente...
Andrea Montanari
montanar...@virgilio.it
http://www.asql.biz/DbaMgr.shtm
DbaMgr2k ver 0.4.0  -  DbaMgr ver 0.50.0
(my vb6+sql-dmo little try to provide MS MSDE 1.0 and MSDE 2000 a visual
interface)
--------- remove DMO to reply


Ricercando tra tutto sono riuscito a trovare il documento che diceva
di usare solo il formato yyyymmdd sono in T-SQL
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/acdata/ac_8_qd_14_3unn.asp
e quello che diceva della lingua di connessione
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/acdata/ac_8_qd_14_3unn.asp

 Ma credo che Lupo potrà illuminarci.
Ho fatto un post per le sintassi, separate, per Access (DAO o ADO) e per SQL
Server.
Nulla di nuovo, comunque, ... se non che ... se mi si plonka vorrei almeno
saperlo. :-P

Server.
Anch'io !

[*massi69* : 
gorreri...@imotionline.com
] ha scritto:

E' lo stesso link, ripetuto.
Non fa altro che confermare: 'aaaammgg'


A me i due link sembrano identici...
Mi interessa veramente capire in quali casi occorre rifarsi all'utente,
perchè sarebbe un bel casino...


 Anch'io !
Dove?


Gia errore :(
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/acdata/ac_8_qd_14_3unn.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/acdata/ac_8_con_03_765d.asp
In particolare è interessante quando dice che il formato yyyymmdd
"Applications using other APIs, or Transact-SQL scripts, stored
procedures, and triggers, should use the unseparated numeric strings
(for example, yyyymmdd as 19980924)."
Mentre l'altro
"SQL Server evaluates datetime constants at run time. A date string
that works for the date formats expected by one language may be
unrecognizable if the query is executed by a connection using a
different language and date format setting. "
Cio che mi chiedo se bastava scrivere yyyymmdd non sarebbe bastato
scriverlo.... ma !

 ! 

Di solito nei programmi che scrivevo.....

 scriverlo.... ma !
SQL Server recognizes date and time data enclosed in single quotation marks
(') in these formats:
Alphabetic date formats (for example, 'April 15, 1998')
Numeric date formats (for example, '4/15/1998', 'April 15, 1998')
Unseparated string formats (for example, '19981207', 'December 12, 1998')
Sostanzialmente, dice che tu puoi scrivere la data in qualunque dei tre
formati.
E questo è vero.
Però, nell'altro link, spiega anche che alcuni di questi formati funzionano
solo con determinate impostazioni locali.
Mentre con yyyymmdd siamo sempre a posto.
Quindi, allarme rientrato, e si prosegue come prima.


Alberto
Ma allora perche affermare questo 
"Applications using other APIs, or Transact-SQL scripts, stored
procedures, and triggers, should use the unseparated numeric strings
(for example, yyyymmdd as 19980924)."
E non dirlo anche per ADo differenziandolo sopra ?

 lingua...
Era una metafora per dire che doveva scrivere quella diavolo di data
in formato mm/dd/yyyy ... dove per db era poi il suo access, perchč
č chiaro che altri db, come sql server o oracle non supportano quella
sintassi.
-- 
Saluti
Andrea Moro
Sito Comune : 
http://www.it-lang-vb.net

 alter session set nls_date_format='YYYY/MM/DD'
Si ma viene utilizzato, come per sql server, solo per l'immissione di dati
di tipo
datetime ... quando poi vai a ricacciare la select con la data tanto oracle
che sql
server te la ridanno nel formato yyyy-mm-dd ecc. ecc.


 Alberto
Andrea


Non mi sembra che la data sia formattata come sopra. Ma TempRes è di tipo
Stringa, vero?


 Alberto
Andrea

 Regional Settings?
Non credo.
Se usi:
TempRes = "'" & Format$(TempDate, "yyyymmdd") & "'"
e TEMPDATE è di tipo Date e TEMPRES è di tipo stringa, deve funzionare.
Il primo casino che mi veniva in mente era che TempRes non fosse stringa.
Il secondo che TempDate non sia Date.
Altro non saprei. Prova a forzare il $ prima della parentesi.
Ciao
Alberto

 Alberto
Andrea

 Mi vergogno :-P
Mi vergogno, ma con pudore che tanto non va ancora.
Adesso la query è diventata:
Insert into
SSDocs( idDoc,VSSDatabase,VSSProject,UltimaVersione,DataCreazione,
DataUltimaModifica ) values ( '23','','','1',''2003/05/20'',''2003/05/20'' )
e l'errore da QA:
Server: Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near '2003'.
Il mistero si infittisce.... :-P
Andrea

 DataUltimaModifica ) values (
'23','','','1',''2003/05/20'',''2003/05/20'' )
Ma sbaglio o quelle '/' non dovrebbero esserci???
Mik

 Mik
Andrea

 Mik
Andrea

 DataUltimaModifica ) values ( '24','','','1',''20030520'',''20030520'' )
Perchè usi i doppi apici?????????
MIk


A parte il formato della data, questa query è diversa da quella che mi avevi
sottoposto prima.
Innanzitutto vedo dei caratteri di delimitazione raddoppiati.
Da dove vengono?
Ciao
Alberto

 Alberto
Andrea

 Alberto
Andrea
P.S.: Oggi la testa va per fatti suoi... è già a Piacenza...