Newsgroup: it.comp.lang.visual-basic
Titolo: [VB6] Problemi recordset.Update e tasti funzione

WinXP + VB6 + SP6
Ho un form così costituito:
Toolbar con classici comandi: Nuovo, salva, elimina, etc.
Le TextBox sono collegate tramite DataSource e DataField ad un recordset ado
che punta ad una tabella Access.
Private Sub Form_Load()
'''''''''Connessione al database
    Dim db As Connection
    Set db = New Connection
    db.CursorLocation = adUseClient
    db.Open "DSN=Database di Microsoft Access;DBQ=" & NomeDirectory &
NomeFile & ";DefaultDir=" & mdiAlessio.NomeDirectory & ";DriverId=281;FIL=MS
Access;FILEDSN=C:\Programmi\File comuni\ODBC\Data Sources\Database di
Microsoft Access (not
sharable).dsn;MaxBufferSize=2048;PageTimeout=5;PWD=pass;UID=usr;"
    Set adoPrimaryRS = New Recordset
    adoPrimaryRS.Open "select * from CLIENTI ORDER BY CodiceCliente", db,
adOpenStatic, adLockOptimistic
    'Associa le caselle di testo al fornitore di dati
    For Each TextBox In Me.txtFields
        Set TextBox.DataSource = adoPrimaryRS
    Next
end sub
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
    If Button.Index = 5 Then
        adoprimaryrs.update
    End If
end sub
e fin qui tutto bene ... funziona! Il problema sorge con i tasti funzione
(F1 - F2 - etc)
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    Select Case KeyCode
    Case vbKeyEscape
        Unload Me
    Case vbKeyF1
        Adoprimaryrs.update
        End If
end sub
il compilatore processa il codice, non genera errori ma se modifico un recor
non salva i dati che modifico.
Perchè funziona se clicco sulla toolbar ma non funziona se premo F1???
Grazie mille

 Perchè funziona se clicco sulla toolbar ma non funziona se premo F1???
Da debug ti ci passa nel keydown?
Hai attivato nella form KeyPreview = True?
-- 
DBMS Firebird
VB6 + Ado

 Hai attivato nella form KeyPreview = True?
Si mi ci passa, e passa anche il comando update senza errori, ma non salva.
KeyPreview è attivo.
Monkey

 KeyPreview č attivo.
Dopo l'update per caso esci?
Provato a mettere un doEvents (mi pare stranissimo)
Comunque io gestirei INSERT/Update via codice, non avresti questi problemi


 Comunque io gestirei INSERT/Update via codice, non avresti questi problemi
in che modo? update campo per campo?
Monkey 

 in che modo? update campo per campo?
Ho notato:
|     Dim db As Connection
|     Set db = New Connection
|     Set adoPrimaryRS = New Recordset
Prova ad usare (ma non credo cambi nulla, solo per migliore leggibilità)
As ADODB.Connection e ADODB.Recordset
Per il resto al salvataggio ti costruisci la stringa tipo
Dim sSQL as string
sSQL= "UPDATE nometabella SET " & _
	"CAMPO1='" & txtcampo(0).text & "'," & _
	"CAMPO2='" & txtcampo(1).text & "'," & _
	" WHERE IDTABELLA=" & tuoID
db.Execute sSQL
Ti consiglio di fare una funzione a cui passi il testo e te lo pulisce es:
	"CAMPO1='" & sClean(txtcampo(0).text) & "'," & _
Public Function sClean (sTestoDaPulire as string) as String
	sclean=replace((sTestoDaPulire,"'","''")
	(o altre cose)
end function
Se nella proprietà tag delle text box ti salvi il nome del campo,
Insert/update/ caricamento le fai tutte con un ciclo for (e se aggiungi un
campo non devi andare a modificare da 10 parti diverse).


 -- 
Fatto ma lo stesso non salva.
Riesco a salvare solo con l'istruzione
adoprimaryrs.update NomedelCampo, Valore
Ovviamente ho creato un ciclo che ripete l'operaz. per tutte le textbox ma 
credo che questo approccio rallenti troppo la procedura.
Cosa fare? Qualche altro consiglio? 

 Cosa fare? Qualche altro consiglio?
Prova con un db pulito se puoi fare la prova.


 Prova con un db pulito se puoi fare la prova.
Fatto ma nulla. Il problema lo risolvo solo con "recordset.update field, 
valore" campo per campo.
Ma cio che non riesco a capire è perchè funziona se richiamato dalla 
toolbar, mentre non funziona se richiamato dal tasto F1.
Misteri del VB.
Se vuoi ti posto i sorgenti.
Saluti
Monkey 

 Se vuoi ti posto i sorgenti.
Posta, magari anche qualcun altro si renderà conto (non ho molta
dimestichezza di recordset usati in quel modo e access).
