Newsgroup: it.comp.appl.access
Titolo: [REPOST] Stored Procedure in scrittura

Ho scritto del codice per eseguire 2 query a cui passo un parametro.. 
tuttavia ho un problema, ogni qual volta tento di scrivere dati in un
campo mi viene restituito un msg di errore in cui è scritto che
l'azione non è supportata dal provider...
c'è soluzione?
Vi riporto il codice
    Dim conn As ADODB.Connection
    Dim cmd1 As ADODB.Command
    Dim cmd2 As ADODB.Command
    Dim s_ordini As ADODB.Recordset
    Dim capi As ADODB.Recordset
    Dim prm1 As ADODB.Parameter
    Dim prm2 As ADODB.Parameter
 
    Set conn = CurrentProject.Connection
 
    Set cmd1 = New ADODB.Command
    cmd1.ActiveConnection = conn
    cmd1.CommandText = "Query_sotto_ordini_parametrica"
    cmd1.CommandType = adCmdStoredProc
 
    Set cmd2 = New ADODB.Command
    cmd2.ActiveConnection = conn
    cmd2.CommandText = "Query_elenco_capi_parametrica"
    cmd2.CommandType = adCmdStoredProc
 
    Set prm1 = New ADODB.Parameter
    prm1.Name = "Ordine"
    prm1.Value = Me.Id_ordine
    prm1.Type = adInteger
    prm1.Direction = adParamInput
 
    Set prm2 = New ADODB.Parameter
    prm2.Name = "Ordine"
    prm2.Value = Me.Id_ordine
    prm2.Type = adInteger
    prm2.Direction = adParamInput
 
    cmd1.Parameters.Append prm1
    cmd2.Parameters.Append prm2
 
    Set s_ordini = cmd1.Execute
    Set capi = cmd2.Execute
Se a questo punto scrivo capi!prezzo=0 mi da l'errore.
--
Icq: 32405502
Se le persone che parlano male di me, sapessero quello che dico io di loro, parlerebbero peggio.
Jim Morrison
Clicca sul link per contattarmi direttamente da icq
http://msg.mirabilis.com/scripts/contact.dll?msgto=32405502

 Vi riporto il codice
presupposto
non ho grande esperienza con ado
ho provato ad eseguire delle query memorizzate a cui passavo un parametro ma
ho ottenuto il tuo risultato,  sembrerebbe che access (Cn.Provider =
"Microsoft.Jet.OLEDB.4.0") non permetta di modificarle (veramente strano non
vorrei dire un c.. ma credo che con dao sia possibile)
una possibile soluzione è quella di eseguire la query come stringa sql in
tal caso è possibile modificare ed aggiungere record
ado come predefinito non permette modifiche dopo
    Set s_ordini = New ADODB.Recordset
devi aggiungere
    s_ordini.LockType = adLockOptimistic
    s_ordini.CursorType = adOpenKeyset
l'altra soluzione e di eseguire la query memorizzata per visualizzare e poi
modifica direttamente la query (non è molto elegante)
di seguito ti posto il codice
    Set Cn = New ADODB.Connection
    Cn.Provider = "Microsoft.Jet.OLEDB.4.0"
    Cn.ConnectionString = "C:\Documenti\Ottavio\prova.mdb"
    Cn.Open
    Dim cmd1 As ADODB.Command
    Dim s_ordini As ADODB.Recordset
    Set s_ordini = New ADODB.Recordset
    Dim prm1 As ADODB.Parameter
    Set cmd1 = New ADODB.Command
    cmd1.ActiveConnection = Cn
    cmd1.CommandText = "GirSetPa"
    cmd1.CommandType = adCmdStoredProc
    Set prm1 = New ADODB.Parameter
    prm1.Name = "GioSetPa"
    prm1.Value = 3  '   Me.Id_ordine
    prm1.Type = adInteger
    prm1.Direction = adParamInput
    cmd1.Parameters.Append prm1
    Set s_ordini = cmd1.Execute
'   *** DOVREBBE AGGIUNGERE RECORD
'    mi ricollego tramite stringa sql
'    volendo puoi usare questra e non la query memorizzata cancella parte
del codice precedente
Dim strSQL
strSQL = "select * " & "from CostLav " & "where CoLaGioSet = 3"
'    3 è una sorta di parametro
s_ordini.Close
s_ordini.Source = strSQL
'    permette di scrivere
 s_ordini.LockType = adLockOptimistic
 s_ordini.CursorType = adOpenKeyset
s_ordini.Open
s_ordini.AddNew
s_ordini.Fields(0) = 27
s_ordini.Fields(1) = "nuovo"
s_ordini.Fields(2) = 3
s_ordini.Update
s_ordini.Close
su scaricamento della maschera chiudo la connesione:
Cn.Close
Set Cn = Nothing
e solitamente la apro su caricamento
ciao
ps
se riesci a variare la query memorizzata fammi sapere
dovrebbe esserci qualcosa come recordset disconnesso ????

s_ordini.Open
ho fatto come tu dici, con la stringa sql. Effettivamente funziona,
però è sorto un'altro problema (credo si possa risolvere facilmente,
ma date le mie scarse nozioni in materia...) Quando elimino la parte
precedente del codice, lascio praticamente solo queste 3 righe:
Dim conn As ADODB.Connection
Set conn = CurrentProject.Connection
Dim rst As ADODB.Recordset
Set rst = New ADODB.Recordset
però quando l'esecuzione arriva a S_ordini.open mi da:
L'applicazione ha richiesto l'esecuzione di un'operazione su un
oggetto contenente un riferimento ad un'oggetto connection chiuso o
non valido.....perché? kosa kambia rispetto alla situazione precedente
in cui era rimasto il codice di prima?


 wrote in message
nqqvnt8fbvhhpikas...@4ax.com...

devi attivare la connessione
    s_ordini.ActiveConnection = Cn    '    questo attiva la connesione
    Set Cn = New ADODB.Connection
    Cn.Provider = "Microsoft.Jet.OLEDB.4.0"
    Cn.ConnectionString = "C:\Documenti\Ottavio\prova.mdb"
    Cn.Open
    Dim s_ordini As ADODB.Recordset
    Set s_ordini = New ADODB.Recordset
    s_ordini.ActiveConnection = Cn    '    questo attiva la connesione
'   *** DOVREBBE AGGIUNGERE RECORD
Dim strSQL
strSQL = "select * " & "from CostLav " & "where CoLaGioSet = 3"
s_ordini.Source = strSQL
    s_ordini.LockType = adLockOptimistic
    s_ordini.CursorType = adOpenKeyset
s_ordini.Open
s_ordini.AddNew
s_ordini.Fields(0) = 31
s_ordini.Fields(1) = "nuovo"
s_ordini.Fields(2) = 3
s_ordini.Update
s_ordini.Close
ciao

 e Piero si incontrarono nella radura di
Sherwood (it.comp.appl.access), dicendo:
Funziona!
Non so come ringraziarti... 
cmq ho mandato il codice che apriva il recordset in sola lettura ad un
mio amico... se riescono a darmi una soluzione ti faccio sapere.
Tanto per informare, ho provato anche ad aprire la query con .open
"exec [nometabella] [parametro1], [parametro2]"
anche in questo caso, riesce solo a leggere...
Saluti
Gilmour
