Newsgroup: it.comp.appl.access
Titolo: ODBS e BE in SQL

Ho collegato il mio FE al BE SQLServer tramite ODBC e tutto bene nella
lettura e ricerca dei dati (anche se la funzione index non va). Ora però
voglio aggiungere dati e uso:
 
    Set dbs = CurrentDb
    Set rst = dbs.openRecordset("anagrafica")
    rst.AddNew
 
rst.cf
 = Me.strcodicefiscale
    rst.Update
    rst.Close
    dbs.Close
    Set rst = Nothing
    Set dbs = Nothing
ma al momento di fare rst.upgrade nasce lerrore del tipo:
 
Errore di run-time 3146
ODBC: chiamata non riuscita
 
come posso salvare i dati nella tabella?
 
Grazie, Luca
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
news:a1237bf41e2f8ecde1d...@mygate.mailgate.org...


 ha scritto nel messaggio
news:cNv1a.209861$AA2.8...@news2.tin.it...


 ha scritto nel messaggio
news:a1237bf41e2f8ecde1d...@mygate.mailgate.org...

Ciao Luca
Dai uno sguardo all'help metodo openrecordset, c'è l'esempio su come aprire
una tabella SqlServer collegata via ODBC.
Set Rst = dbs.OpenRecordset("anagrafica", dbOpenDynaset, dbSeeChanges)
Forse è una domanda stupida ma le tue tabella hanno un' identificativo
record univoco e indicizzato ?
Ciao Giorgio.

 ha scritto nel messaggio
news:b264ib$4tq$1...@lacerta.tiscalinet.it...

Certo, indicizzato ed univoco. Ho provato quanto mi hai detto ed ho questo
errore:
Errore di run-time 3001
Argomento non valido;
l'errore si riferisce all'assegnazione appena fatta, cioè la tua. La cosa
che non riesco a capire è che gli esempi dell'help non funzionano. Perchè?
AIUTO!!!


Ciao Luca
Per tagliare la testa al toro ti allego un esempio che crea un nuovo db una
nuova tabella e inserisce alcuni record, gli unici riferimenti necessari
sono DAO 3.6, devi cambiare i parametri della stringa di connessione
[TUOSERVER] e [TUAPWD].
Sub ProvaOdbc()
Dim Sqltext As String        'Stringa di comando
Dim Conn As DAO.Connection   'Connessione ODBC
Dim wrkODBC As Workspace     'WorkSpace ODBC
Dim Rs As Recordset          'Recordset per inserimenti record
Dim Tbf As TableDef          'Tabeldef da creare
Dim i As Integer             'contatore di comodo
'Creo Workspace
Set wrkODBC = CreateWorkspace("", "admin", "", dbUseODBC)
'Apro una connessione con il server collegandomi al Db MASTER
Set Conn = wrkODBC.OpenConnection("", , , "ODBC;DRIVER=SQL
Server;SERVER=[TUOSERVER];DATABASE=master;UID=sa;PWD=[TUAPWD]")
'Creo un database di prova
Sqltext = "CREATE DATABASE DbProva"
Conn.Execute Sqltext
'Mi collego a esso
Set Conn = wrkODBC.OpenConnection("", , , "ODBC;DRIVER=SQL
Server;SERVER=[TUOSERVER];DATABASE=DbProva;UID=sa;PWD=[TUAPWD]")
'Creo una tabella di prova
Sqltext = "CREATE TABLE TbProva (Id_Rec int IDENTITY (1,1),Codice int NOT
NULL DEFAULT 0,Nome nvarchar(50))"
Conn.Execute Sqltext
'Creo l'indice per l'identificativo record
Sqltext = "CREATE UNIQUE INDEX TbProva_Id_Rec ON TbProva (Id_Rec)"
Conn.Execute Sqltext
'Creo un secondo indice per il codice cliente
Sqltext = "CREATE UNIQUE INDEX TbProva_Codice ON TbProva (Codice)"
Conn.Execute Sqltext
'Allego la tabella al mio MDB
Set Tbf = CurrentDb.CreateTableDef("TbProva")
Tbf.Connect = "ODBC;DRIVER=SQL
Server;SERVER=[TUOSERVER];DATABASE=DbProva;UID=sa;PWD=[TUAPWD]"
Tbf.SourceTableName = "TbProva"
CurrentDb.TableDefs.Append Tbf
CurrentDb.TableDefs.Refresh
Set Tbf = Nothing
Set Conn = Nothing
Set wrkODBC = Nothing
'Ci inserisco alcuni record
Set Rs = CurrentDb.OpenRecordset("TbProva", dbOpenDynaset, dbSeeChanges)
For i = 1 To 10
    Rs.AddNew
    Rs!Codice = i
    Rs!Nome = "Nome " & i
    Rs.Update
Next
Rs.Close
Set Rs = Nothing
End Sub
Se non funziona dimmi le versioni di Access, DAO e ADO.
Ciao Giorgio

 > news:b264ib$4tq$1...@lacerta.tiscalinet.it...
Ciao Luca
Dimenticavo..
1) l'opzione dbSeeChanges è valida solo se hai un campo Identity
2) l'update può fallire se un campo con vincolo NOT NULL non viene compilato
Ciao Giorgio.

 ha scritto nel messaggio
news:b27uh1$pi6$1...@lacerta.tiscalinet.it...


Ciao Giorgio; allora:
la prima parte tutto OK (scendi giu)
Dim Sqltext As String        'Stringa di comando
Dim Conn As DAO.Connection   'Connessione ODBC
Dim wrkODBC As Workspace     'WorkSpace ODBC
Dim Rs As Recordset          'Recordset per inserimenti record
Dim Tbf As TableDef          'Tabeldef da creare
Dim i As Integer             'contatore di comodo
'Creo Workspace
Set wrkODBC = CreateWorkspace("", "admin", "", dbUseODBC)
'Apro una connessione con il server collegandomi al Db MASTER
Set Conn = wrkODBC.OpenConnection("", , , "ODBC;DRIVER=SQL
Server;SERVER=luca1;DATABASE=master;UID=;PWD=")
'Creo un database di prova
Sqltext = "CREATE DATABASE DbProva"
Conn.Execute Sqltext
'Mi collego a esso
Set Conn = wrkODBC.OpenConnection("", , , "ODBC;DRIVER=SQL
Server;SERVER=luca1;DATABASE=DbProva;UID=;PWD=")
'Creo una tabella di prova
Sqltext = "CREATE TABLE TbProva (Id_Rec int IDENTITY (1,1),Codice int NOT
NULL DEFAULT 0,Nome nvarchar(50))"
Conn.Execute Sqltext
'Creo l'indice per l'identificativo record
Sqltext = "CREATE UNIQUE INDEX TbProva_Id_Rec ON TbProva (Id_Rec)"
Conn.Execute Sqltext
'Creo un secondo indice per il codice cliente
Sqltext = "CREATE UNIQUE INDEX TbProva_Codice ON TbProva (Codice)"
Conn.Execute Sqltext
ma arrivati qui mi si genera l'errore:
"Errore di run-time 91: Variabile oggetto o variabile del blocco with non
impostata"
come quando io facevo le prove.
'Allego la tabella al mio MDB
Set Tbf = CurrentDb.CreateTableDef("TbProva") <---------------------------
Tbf.Connect = "ODBC;DRIVER=SQL
Server;SERVER=luca1;DATABASE=DbProva;UID=;PWD="
Tbf.SourceTableName = "TbProva"
CurrentDb.TableDefs.Append Tbf
CurrentDb.TableDefs.Refresh
Set Tbf = Nothing
Set Conn = Nothing
Set wrkODBC = Nothing
'Ci inserisco alcuni record
Set Rs = CurrentDb.OpenRecordset("TbProva", dbOpenDynaset, dbSeeChanges)
For i = 1 To 10
    Rs.AddNew
    Rs!Codice = i
    Rs!Nome = "Nome " & i
    Rs.Update
Next
Rs.Close
Set Rs = Nothing
Ho caricato i driver DAO 3.6. Cosa posso fare?
A presto, Luca.

 Ho caricato i driver DAO 3.6. Cosa posso fare?
 >A presto, Luca.
Ciao Luca
Io ho AccessXp tu che versione di Access hai ?
Prova a dichiarare un database
----
Dim Db as database
Set Db=Currentdb
Set Tbf = Db.CreateTableDef("TbProva")
ecc.
----
In ogni caso collega manualmente la tabella e prova ad inserire i record con
il resto del codice, e vediamo se si ripresenta l'errore 3146.
Dim Db as database
Dim Rs as recordset
Set Db=Currentdb
Set Rs = Db.OpenRecordset("TbProva", dbOpenDynaset, dbSeeChanges)
 For i = 1 To 10
     Rs.AddNew
     Rs!Codice = i
     Rs!Nome = "Nome " & i
     Rs.Update
 Next
 Rs.Close
 Set Rs = Nothing
set Db=Nothing
Ciao Giorgio.