Access - NO GRABA REGISTRO

 
Vista:

NO GRABA REGISTRO

Publicado por Gema (1 intervención) el 02/03/2008 12:03:39
Buenos días: Tengo un formulario (con 3 subformularios) y no consigo que grabe el registro en una tabla. (TCobros)
No consigo ver que hago mal. Adjunto los eventos que utilizo para que POR FAVOR me corrijáis.
MUCHAS GRACIAS.

Option Compare Database
Private cnn As ADODB.Connection
Private WithEvents reg As ADODB.Recordset
Dim nChar As Integer
Dim rs As Object
Option Explicit
______________
Private Sub Form_Load()
TimerInterval = 700
Set cnn = Application.CurrentProject.Connection
CGrabar.Enabled = False
End Sub
__________________
Private Sub CGrabar_Click()
On Error Resume Next
If Form_ForCobrosSub.Cobrado = True Or Form_ForCobrosABSub.Cobrado = True Or Form_ForCobrosSupSub.Cobrado = True Then
ComboEmp.SetFocus
Form_Load
Call GrabarRegistro
Call LimpiaCampos
reg.Close: Set reg = Nothing
Else
MsgBox "Este cobro no se puede grabar," & Chr(10) & _
"La casilla de verificación tiene valor FALSO.", vbInformation, "DEBE REVISAR ESTE COBRO:"
Screen.PreviousControl.SetFocus 'El Foco regresa al campo del que salió
End If
End Sub
___________________
Private Sub Form_Close()
On Error Resume Next
If Form_ForCobrosSub.Cobrado = True Or Form_ForCobrosABSub.Cobrado = True Or Form_ForCobrosSupSub.Cobrado = True Then
Call GrabarRegistro
Else
MsgBox "No se ha generado nigún Cobro," & Chr(10) & _
"Creación de Registro Cancelado.", vbInformation, "SALIR DEL FORMULARIO COBROS"
End If
If Not reg Is Nothing Then
reg.Close: Set reg = Nothing 'Cierra el Recordset
cnn.Close: Set cnn = Nothing 'Cierra la Conexión
End If
End Sub
_________________
Private Sub GrabarRegistro()
On Error Resume Next
Set reg = New ADODB.Recordset
reg.Open "SELECT * From TCobros Where IdCobro ='" & _
IdCobro & "'", cnn, adOpenDynamic, adLockOptimistic
If reg.EOF Then reg.AddNew
reg!Id_Empresa = Id_Empresa
reg!IdCobro = IdCobro
reg!Fecha = Fecha
reg!Importe = SSS
reg.Update
ComboEmp.Requery
Me.IdCobro = Nz(DMax("IdCobro", "TCobros"), 0) + 1
End Sub
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:NO GRABA REGISTRO

Publicado por santi (1 intervención) el 02/03/2008 19:34:06
El problema puede estar en que si el campo IdCobro de la tabla TCobros es numérico, no puedes meterlo entre comillas simples en esta linea:

reg.Open "SELECT * From TCobros Where IdCobro ='" & _
IdCobro & "'", cnn, adOpenDynamic, adLockOptimistic

Cambia la linea anterior por esta:

reg.Open "SELECT * From TCobros Where IdCobro =" & _
IdCobro, cnn, adOpenDynamic, adLockOptimistic

Puedes comprobarlo antes de hacer el cambio que te digo, quitandole al procedimiento Private Sub GrabarRegistro, la linea On Error Resume Next y probarlo. Si te sale el error "No coinciden los tipos" entonces el problema es lo que te digo. Es que la linea On Error Resume Next impide que se muestren los posibles errores.

espero te sirva y suerte.
Santi
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

GRACIAS / YA GRABA REGISTRO

Publicado por Gema.Idem (29 intervenciones) el 02/03/2008 20:19:48
Pues si SANTI Ahora graba el registro perfectamente.

Antes el campo IdCobro lo tenía como texto pero al querer incrementar en 1 cada vez que grababa un registro con:

Me.IdCobro = Nz(DMax("IdCobro", "TCobros"), 0) + 1

Solo lo hacía correctamente hasta el nº 9 ya que el orden del campo texto queda así:

1
10
2
3
4
5
6
7
8
9
A partir de aquí siempre me aparecía como resultado el valor 10 ya que el valor de DMax queda en 9.
Por esto lo cambié a formato numérico.

Bueno, el caso es que con esto que me has enseñado funciona correctamente. Graba e incrementa el campo IdCobro en 1 tal y como necesitaba.
MILES DE GRACIAS por tu gran ayuda.
Un gran Saludo: Gema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar