Newsgroup: it.comp.lang.visual-basic
Titolo: SQL2005 express - update

Ho una tabella sql collegata tramite odbc in un database access, e tramite 
una query tento di aggiornare un campo stringa che contiene un numero di 
telefono.
dim nTel as string
nTel= InputBox.....
update tabella set telefono = '"& nTel & "' where ID =100
funziona, ma se il telefono è un fisso, e quindi comincia con zero questo 
viene tagliato.
030123 viene salvato come 30123;
se provo a passare 030123pippo viene salvata correttamente;
se provo a passare Cstr(nTel) viene ancora tagliato lo zero iniziale;
Ho risolto passando la variabile con la trim:
update tabella set telefono = '"& trim(nTel) & "' where ID =100
Ma non capisco perche debba essere necesaria una trim, trattandosi di una 
stringa in un campo stringa.
Sembra che qualcosa, vedendo vedendo una variabile che comincia con zero 
cerca di convertirla in numero prima di salvarla.
SE è cosi, chi è che mi fa lo scherxetto, il database o il driver odbc? Ci 
ho messo un poco prima di venirne a capo.
Grazie, ciao
-- 
Greg 

salve,

sicuramente viene eseguita una conversione implicita.. viene passata un 
comando dinamico ed il parser, non so a che livello, effettua probabilmente 
la conversione implicita dal dominio degli interi ad una stringa.. usando il 
provider SQLOLEDB con VB6, ad esempio,  non mi succede... e neanche con 
SqlClient di .Net
SET NOCOUNT ON;
USE tempdb;
GO
CREATE TABLE dbo.t (
 Id int NOT NULL PRIMARY KEY,
 Tel varchar(20)
 );
GO
INSERT INTO dbo.t VALUES ( 1, '123' );
-- probabilmente avviene questo
INSERT INTO dbo.t VALUES ( 2, 0023 );
GO
/* VB Code
--------------------
Private Sub Form_Load()
    Dim con As New ADODB.Connection
    With con
           .ConnectionString = "Provider=sqloledb;Data 
Source=.\SQLExpress;Initial Catalog=tempdb;Integrated Security=SSPI;"
           .CursorLocation = adUseServer
           .mode = adModeReadWrite
           .Open
    End With
    Dim newTel As String
    newTel = "001234"
    Dim oCmd As New ADODB.Command
    With oCmd
        .ActiveConnection = con
        .CommandTimeout = 15
        .CommandText = "UPDATE dbo.t SET [Tel] = '" & newTel & "' WHERE Id = 
1;"
        .CommandType = adCmdText
    End With
    On Local Error Resume Next
    Set oTest = oCmd.Execute
    Set oCmd = Nothing
    con.Close
End Sub
--------------------
*/
GO
SELECT * FROM dbo.t;
GO
DROP TABLE dbo.t;
al di la' di polemiche che non voglio accendere, anche questo e' un ottimo 
motivo per usare parametri espliciti al posto di codice dinamico :)
saluti
-- 
Andrea Montanari (Microsoft MVP - SQL Server)
http://www.asql.biz
DbaMgr2k ver 0.21.1 - DbaMgr ver 0.65.1 and further SQL Tools
http://www.hotelsole.com
 - 
http://www.hotelsolericcione.de
--------- remove DMO to reply 

 saluti
Oh, magari fossi in grado di polemizzare con te :)
Dimenticavo, uso dao manipolare il db ed inviare i comendi sql.
Comuque quel problema l'ho risolto con la trim, ma mi succede un'altra cosa 
cosa, sempre con Update su tabella.
Se l'update di prima voglio farlo su 3 record ha effetti solo sul primo 
record:
update tabella set telefono = '"& trim(nTel) & "' where ID =100 or ID = 101 
or ID = 102
aggiorna solo il primo record; come mai?
anche se lancio 3 query una dietro l'altra, mi aggiorna solo il primo, cosi
update tabella set telefono = '"& trim(nTel) & "' where ID =100
update tabella set telefono = '"& trim(nTel) & "' where ID =101
update tabella set telefono = '"& trim(nTel) & "' where ID =102
ciao
greg

 or ID = 102
E se fai:
WHERE ID IN (100, 101, 102) ?
Nicola

 Nicola
Uhmm..   lunedi provo, grazie della dritta :)
-- 
Greg 

 ha scritto nel messaggio 
news:4b9a7aa1$0$1112$4faf...@reader4.news.tin.it...

Errore odbc:
Chiamata non riuscita
Sono sempre piu perplesso
greg