Newsgroup: it.comp.lang.visual-basic
Titolo: [VB6] Problema con Stringa SQL e record non trovato

Salve a tutti...
Ho uno strano problema con un DB access.
Eseguo queste istruzioni:
strSQLNseriali = "SELECT * FROM NSeriali WHERE IDNSeriali = " & _ 
IDNSeriali & ";"
RSNSeriali.Open strSQLNseriali, Db, adOpenStatic, adLockPessimistic
debug.print RSNSeriali.RecordCount
___
La stringa SQL che viene inviata ï¿œ la seguente:
"SELECT * FROM NSeriali WHERE IDNSeriali = 895;"
Il record, che ha nel campo (chiave) IDNSeriali il valore 895 ï¿œ 
presente... ma l'istruzione debug.Print restituisce il valore Zero,
cioï¿œ non trova record.
Eppure inserendo la Stringa SQL in Access funziona
-- 
Daniele Pinna
www.dapinna.com
www.ildocfainpillole.it
leva oops. per rispondere

 Eppure inserendo la Stringa SQL in Access funziona
Sei sicuro che non dipenda da come apri il Recordset? Non sono un
esperto di ADO, ma se non ricordo male, a seconda dei parametri che
passi la questione cambia. Prova con adLockBatchOptimistic invece che
adLockPessimistic.
Ciao. 

 adLockPessimistic.
Provato... non cambia nulla...
Per�... facendo alcune prove "al volo" ho cambiato la stringa SQL 
provando ad inserire il carattere "%" prima e dopo il valore da cercare,
mi ha dato errore e il programma � andato al trapping degli errori... ho 
continuato l'esecuzione, ho ripremuto il pulsante "scrivi" e mi sono 
fermato sulla stringa SQL che ho rimesso come prima, ma questa volta il 
record l'ha trovato!!!
Com'� possibile?



zac
recordcount funziona solo se usi i cursori lato client
connessione.cursorlocation=aduseclient
c'è differenza poi tra cursori client(locali) e server....cerca
all'interno di questo ng con google trovi mooooolto materiale..è una
faq oramai

 connessione.cursorlocation=aduseclient
In effetti a me recordcount funziona sempre... perch� uso
    connessione.cursorlocation=aduseclient
Ora ho riscontrato lo stesso problema in un altro programma
Passo la seguente stringa SQL:
"SELECT IDVisita, IDCliente, DataEvento, Note FROM VisiteMensili WHERE 
IDCliente = 1 AND DataEvento = 11/01/2009 ;"
E non trova nulla.
Nel dubbio ho provato anche a cambiare la data in 01/11/2009 ma niente.
Per� togliendo "AND DataEvento = 11/01/2009" funziona.
Chiaramente dovr� filtrare a manina le date :-(
Presumo per� che il problema sia dovuto al tipo di dato...
In questo secondo caso, nel DB DataEvento � un Data/ora con una maschera 
di Input: 00/00/0000;0;_
Forse dovrei fare una prova usando un normale campo testo.


 Forse dovrei fare una prova usando un normale campo testo.
Non cambia nulla :-(


 Forse dovrei fare una prova usando un normale campo testo.
Per evitare incasinamenti usa sempre le date in formato ISO: aaaa-mm-gg.
E delimitale sempre con #, in modo che il sistema capisca che si tratta
di date. UNa funzione banale che mi sono fatto che � comdissima in
questi casi:
Public Function DataISO(ByVal Data2Analyze As Date) As String
'   Converte una data in formato ISO (compresi i #)
    DataISO = Format(Data2Analyze, "\#yyyy\-mm\-dd\#")
End Function
Ciao.

 End Function
La notazione ISO la uso ogni tanto.
Non ho mai usato abbinata ai "#"... e infatti provando cos� mi crea 
qualche problema con il programma.
In ogni caso, ho convertito le date nel DB in formato ISO, ma il 
problema non � sparito... continuo ad avere il recordcount =0
In pratica ho questa situazione:
SELECT IDVisita, IDCliente, DataEvento, Note FROM VisiteMensili WHERE 
IDCliente = 1 AND DataEvento = 2009-01-03 ;
Risultato: RecordCount=0
SELECT IDVisita, IDCliente, DataEvento, Note FROM VisiteMensili WHERE 
DataEvento = 2009-01-03 ;
Risultato: RecordCount=0
SELECT IDVisita, IDCliente, DataEvento, Note FROM VisiteMensili WHERE 
IDCliente = 1 ;
Risultato: RecordCount=7
A questo punto penso che il problema sia nel campo DataEvento o nella 
sintassi che sto usando.
Tengo presente che prima, nel DB .MDB, il Campo "DataEvento" era un 
campo di tipo Date ora � un campo Testo


 campo di tipo Date ora � un campo Testo
Ferma! Se usi il campo in formato Testo, la data nel filtro dev'essere
scritta *ESATTAMENTE* come nel campo del DB, e per di pi� racchiusa tra
apici: una cosa del tipo DataEvento = '2009-01-03'
Se invece � di tipo Data la sintassi corretta dovrebbe essere:
DataEvento = #2009-01-03#
L'uso del carattere # identifica il dato come un Data.
 

io credo che tu ti sia auto-incartato!!!
se in un campo ho scritto "pippo" oppure "10/5/2009"
non posso cercare "!Pippo" oppure "10/05/09"..cerco "ALTRE" cose!
inoltre....
il TESTO si inserisce fra APICI
Le date tra #data#
i numeri ...NULLA
+++++++++++++++++++ QUINDI
SELECT IDVisita, IDCliente, DataEvento, Note FROM VisiteMensili WHERE
IDCliente = 1 AND DataEvento = 2009-01-03 ;
Risultato: RecordCount=0
SELECT IDVisita, IDCliente, DataEvento, Note FROM VisiteMensili WHERE
DataEvento = 2009-01-03 ;
Risultato: RecordCount=0
NON VANNO BENE PER IL TESTO!!!
QUESTE SI
SELECT IDVisita, IDCliente, DataEvento, Note FROM VisiteMensili WHERE
IDCliente = 1 AND DataEvento = '2009-01-03'
SELECT IDVisita, IDCliente, DataEvento, Note FROM VisiteMensili WHERE
DataEvento = '2009-01-03'
solo che le date in questo formato...testo....ti precludono ricerche
per data!
se io volessi sapere che visite ho fatto tra il 10 marzo 2009 ed il 20
Aprile 2009???
Non era più comodo usare il BETWEEN  che lente trasformazioni e
ricerche su un testo???

 recordcount funziona solo se usi i cursori lato client
Se non erro funziona anche con adOpenKeyset che mi pare possa essere lato
server.

 L'uso del carattere # identifica il dato come un Data.
Però mi da errore se uso #
Nel DB ho dovuto convertire il campo da data a Testo.
Per gestire il DB uso Access XP
-- 
Daniele Pinna  (leva oops. per rispondere)
Utente Skype: dapinna
Sito Web: 
http://www.dapinna.com
	<-- Nuovo Sito... ora in Joomla
Il Docfa in Pillole:  
http://www.ildocfainpillole.it
-----
Now Powered by Linux KUbuntu 9.04 "Jaunty Jackalope"

 Nel DB ho dovuto convertire il campo da data a Testo.
Chiedo scusa... ho capito male alcune suggerimenti...
ma ora penso di aver capito :-)
Non ho modo ora di provare subito le modifiche...
proverò in fine serata :-)


 NON VANNO BENE PER IL TESTO!!!
OK
