Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Datagrid : Inserimento e modifica records

Sto costruendo una form in VB6 (SP4) e volevo simulare con una datagrid la
funzionalità scheda-sottoscheda presente in Access, con campi master nella
form che "pilotino" i record visualizzati su una datagrid.
Ho creato 2 recordset ADO e via codice li tengo sincronizzati.
Aggiorno la datagrid e tengo nascoste le colonne contenenti i campi da
gestire in automatico (nel caso specifico num fattura e num riga)
La cosa funziona benissimo finchè sono in visualizzazione.
I problemi sorgono in inserimento....
1) Quando inserisco un record passo col tab da un campo all'altro digitando
i valori corretti. Arrivato all'ultimo campo se premo tab invece di passare
ad una nuova riga, come succede con Access, mi passa alla riga precedente.
2) Come se non bastasse, il record non viene nemmeno inserito nel database,
senza darmi nessun messaggio di errore (i campi nascosti li valorizzo da
codice).
3) Inoltre vorrei controllare che i campi siano digitati correttamente prima
di fare l'inserimento, ma non riesco a farlo: ho provato con beforeupdate,
beforecolupdate e rowcolchange. Mi sfugge qualcosa ?
UN GRAZIE A CHIUNQUE MI POSSA AIUTARE!
Ecco il codice che sto utilizzando:
Option Explicit
Dim cn As ADODB.Connection
Dim recFatture As New ADODB.Recordset
Dim recRigheFattura As ADODB.Recordset
Const strProvider = "Microsoft.Jet.OLEDB.4.0"
Const strConnessione = "E:\MORENO\Prove\Fatture.mdb"
Private Sub btnPrec_Click()
' Pulsante per spostarmi alla fattura precedente
    recFatture.MovePrevious
    If recFatture.BOF Then
        recFatture.MoveFirst
    End If
    txtFattura = recFatture!Fattura
    ApriRecordsetRigheFattura
End Sub
Private Sub btnSucc_Click()
' Pulsante per spostarmi alla fattura successiva
    recFatture.MoveNext
    If recFatture.EOF Then
        recFatture.MoveLast
    End If
    txtFattura = recFatture!Fattura
    ApriRecordsetRigheFattura
End Sub
Private Sub DataGrid1_BeforeUpdate(Cancel As Integer)
    With DataGrid1
        If .Columns("Fattura").Text = "" Then
            .Columns("Fattura").Text = recFatture!Fattura
            .Columns("Riga").Text = .Row + 1            'qui so che dovrò
studiare un modo + intelligente!!!
        End If
    End With
End Sub
Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As
Integer)
' questa sub QUASI funziona: se mi sposto su una nuova riga mi da errore!
    With DataGrid1
        If .Columns(LastCol).Text = "" Then
            If .Columns("Articolo").ColIndex = LastCol Then
                MsgBox "INSERIRE ARTICOLO"
                .Col = LastCol
            ElseIf .Columns("Costo").ColIndex = LastCol Then
                MsgBox "INSERIRE COSTO"
                .Col = LastCol
            ElseIf .Columns("Quantita").ColIndex = LastCol Then
                MsgBox "INSERIRE QUANTITA"
                .Col = LastCol
            End If
        End If
    End With
End Sub
Private Sub Form_Load()
    ApriConnessione
    ApriRecordsetFatture
    ApriRecordsetRigheFattura
End Sub
Private Sub ApriConnessione()
On Error GoTo ErroreConnessione
    Set cn = New ADODB.Connection
    With cn
        .Provider = strProvider
        .ConnectionString = strConnessione
        .CommandTimeout = 5
        .CursorLocation = adUseClient
        .Open
    End With
    Exit Sub
ErroreConnessione:
    MsgBox Err.Description
End Sub
Private Sub ApriRecordsetFatture()
On Error GoTo ErroreRecordset
    With recFatture
        .ActiveConnection = cn
        .CursorLocation = adUseClient
        .CursorType = adOpenDynamic
        .LockType = adLockBatchOptimistic
        .Source = "SELECT * FROM Fatture"
        .Open
    End With
    txtFattura.Text = recFatture!Fattura
    Exit Sub
ErroreRecordset:
    MsgBox Err.Description
End Sub
Private Sub ApriRecordsetRigheFattura()
On Error GoTo ErroreRecordset
    Set DataGrid1.DataSource = Nothing
    DataGrid1.ClearFields
    Set recRigheFattura = New ADODB.Recordset
    With recRigheFattura
        .ActiveConnection = cn
        .CursorLocation = adUseClient
        .CursorType = adOpenDynamic
        .LockType = adLockBatchOptimistic
        .Source = "SELECT * FROM RigheFattura WHERE Fattura = " &
recFatture!Fattura
        .Open
    End With
    With DataGrid1
        Set .DataSource = recRigheFattura
        .Columns("Fattura").Visible = False
        .Columns("Riga").Visible = False
    End With
    Exit Sub
ErroreRecordset:
    MsgBox Err.Description
End Sub

 wrote in message
news:8tjffc$esd$1...@fe1.cs.interbusiness.it...
