• Viernes 19 de Abril de 2024, 09:11

Autor Tema:  Addnew En Dao  (Leído 2593 veces)

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Addnew En Dao
« en: Viernes 17 de Febrero de 2006, 19:20 »
0
Hola chicos de SoloCodigo, como estan? hace rato no me paso por que hay mucho camello; tengo una duda:

Estoy trabajando sobre una DB de Access con DAO (no con ADO por que no lo manejo todavia), y al usar el método AddNew, no todas las veces me guarda el registro, por que sera, aqui les muestro el código

Código: Text
  1. Private Sub cmdSave_Click()
  2.  On Error Resume Next
  3.  Dim dbVisitas As Database
  4.  Dim rsVisitas As Recordset
  5.  Set dbVisitas = OpenDatabase(App.Path & "\bd1.mdb")
  6.  Set rsVisitas = dbVisitas.OpenRecordset("VISITA", dbOpenDynaset)
  7. ' If txtMes.Text <> "" Or txtTipo.Text <> "" Or txtAuditor.Text <> "" Or txtMostrador.Text <> "" Or _
  8. '    txtZona.Text <> "" Or txtPDV.Text <> "" Or txtExcep.Text <> "" Or txtCompro.Text <> "" Then
  9. '    Set rsVisitas = dbOpenDB.OpenRecordset("VISITA", dbOpenTable)
  10.     With rsVisitas
  11.                     .AddNew
  12.                     !NUM_MES = txtMes
  13.                     !FECHA = dtpDate
  14.                     !TIPO = txtTipo
  15.                     !AUDITOR = txtAuditor
  16.                     !COD_ZONA = txtMostrador & " " & txtZona
  17.                     If chkExep.Value = 0 Then
  18.                         Call MsgBox("NO HAY EXCEPCIONES", vbCritical, "Advertencia")
  19.                     Else
  20.                         !EXCEPCIONES = chkExep.Value
  21.                         !COD_EXEPCION = txtExcep
  22.                         !VLR_AJUSTE = txtVrAjuste
  23.                     End If
  24.                     !PDV = txtPDV
  25.                     !ENCARGADO = txtPDV
  26.                     !COMPROMISO = txtCompro
  27.                     .Update
  28.                     .Bookmark = .LastModified
  29.     End With
  30.     With rsVisitas
  31.             Debug.Print "Registro nuevo: " & !NUM_MES & " " & !FECHA & " " & !AUDITOR _
  32.              & " " & !PDV & " " & !COD_ZONA & " " & !ENCARGADO & " " & !COD_EXEPCION _
  33.               & " " & !VLR_AJUSTE & " " & !EXCEPCIONES & " " & !ENCARGADO & " " & !TIPO
  34.     End With
  35.  
  36.     Call CleanText
  37. ' Else
  38. '    Call MsgBox("Favor Introducir Datos", vbCritical, "Advertencia")
  39. '    cmbMeses.SetFocus
  40. ' End If
  41.  rsVisitas.Close
  42.  dbVisitas.Close
  43.  Call VisibleFalse
  44. End Sub
  45.  
Gracias Chao.
El pasado son solo recuerdos, el futuro son solo sueños

Sagutxo

  • Miembro MUY activo
  • ***
  • Mensajes: 320
    • Ver Perfil
Re: Addnew En Dao
« Respuesta #1 en: Viernes 17 de Febrero de 2006, 20:21 »
0
SAlu2.

   Seria posible que te diera algun tipo de error al grabar el registro que no muestra por el Resume Next?, osea, errores como campos obligatorios que no tienen datos.

Mas que una respuesta es una pregunta jejeje, bueno ahí queda.

 :whistling:  :smartass:  :comp:
Mi mujer tiene un físico bárbaro!!!. Einstein.

neorent

  • Miembro MUY activo
  • ***
  • Mensajes: 249
    • Ver Perfil
    • http://www.laestokada.cl
Re: Addnew En Dao
« Respuesta #2 en: Viernes 17 de Febrero de 2006, 22:09 »
0
Cita de: "RadicalEd"
Hola chicos de SoloCodigo, como estan? hace rato no me paso por que hay mucho camello; tengo una duda:

Estoy trabajando sobre una DB de Access con DAO (no con ADO por que no lo manejo todavia), y al usar el método AddNew, no todas las veces me guarda el registro, por que sera, aqui les muestro el código

Código: Text
  1. Private Sub cmdSave_Click()
  2.  On Error Resume Next
  3.  Dim dbVisitas As Database
  4.  Dim rsVisitas As Recordset
  5.  Set dbVisitas = OpenDatabase(App.Path & "\bd1.mdb")
  6.  Set rsVisitas = dbVisitas.OpenRecordset("VISITA", dbOpenDynaset)
  7. ' If txtMes.Text <> "" Or txtTipo.Text <> "" Or txtAuditor.Text <> "" Or txtMostrador.Text <> "" Or _
  8. '    txtZona.Text <> "" Or txtPDV.Text <> "" Or txtExcep.Text <> "" Or txtCompro.Text <> "" Then
  9. '    Set rsVisitas = dbOpenDB.OpenRecordset("VISITA", dbOpenTable)
  10.     With rsVisitas
  11.                     .AddNew
  12.                     !NUM_MES = txtMes
  13.                     !FECHA = dtpDate
  14.                     !TIPO = txtTipo
  15.                     !AUDITOR = txtAuditor
  16.                     !COD_ZONA = txtMostrador & " " & txtZona
  17.                     If chkExep.Value = 0 Then
  18.                         Call MsgBox("NO HAY EXCEPCIONES", vbCritical, "Advertencia")
  19.                     Else
  20.                         !EXCEPCIONES = chkExep.Value
  21.                         !COD_EXEPCION = txtExcep
  22.                         !VLR_AJUSTE = txtVrAjuste
  23.                     End If
  24.                     !PDV = txtPDV
  25.                     !ENCARGADO = txtPDV
  26.                     !COMPROMISO = txtCompro
  27.                     .Update
  28.                     .Bookmark = .LastModified
  29.     End With
  30.     With rsVisitas
  31.             Debug.Print "Registro nuevo: " & !NUM_MES & " " & !FECHA & " " & !AUDITOR _
  32.              & " " & !PDV & " " & !COD_ZONA & " " & !ENCARGADO & " " & !COD_EXEPCION _
  33.               & " " & !VLR_AJUSTE & " " & !EXCEPCIONES & " " & !ENCARGADO & " " & !TIPO
  34.     End With
  35.  
  36.     Call CleanText
  37. ' Else
  38. '    Call MsgBox("Favor Introducir Datos", vbCritical, "Advertencia")
  39. '    cmbMeses.SetFocus
  40. ' End If
  41.  rsVisitas.Close
  42.  dbVisitas.Close
  43.  Call VisibleFalse
  44. End Sub
  45.  
Gracias Chao.
saludos:
pero te envia algun error al tratar de grabar el registro o simplemente pasa de largo y no te dice nada?
se que utilizas dao y yo uso ado pero yo tengo una aplicacion con una base de acces 97 la y grabo y edito ademas puedo eliminar si quieres te puedo enviar algun metodo por ejemplo yo uso este modo para abrir las bases y trabjar las tablas.

[CODE]

Dim a As Database
Dim b As Recordset

Private Sub Form_Load()
Set a = OpenDatabase("\\Obiwan\soporte\bd1.mdb")
Set b = a.OpenRecordset("tabla_tecnicos")
If b.RecordCount = 0 Then
    MsgBox "No Existen Registros", vbInformation, "Por Favor Ingrese"
Else
    b.MoveFirst
End If
End Sub
'/asi las abro y asi grabo mira

sub grabar()
b.addnew
b("registro")&""  = text1.text '/ el &"" es por si te dan un registro en blanco y asi no te marca error al grabar puede ser espero que te sirva
b.update
end sub

si te puedo ayudar en algo mas solo dilo adios
Un Tigre Nunka Kambia Sus Rayas

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Addnew En Dao
« Respuesta #3 en: Sábado 18 de Febrero de 2006, 19:45 »
0
Pos no habia pensado en lo de quitarle el Resume Next, aunque no me muestra un error, lo que hace es pasarme de largo el registro, cuando no graba en el debug (esta parte del código):
Código: Text
  1.  
  2. Debug.Print "Registro nuevo: " & !NUM_MES & " " & !FECHA & " " & !AUDITOR _
  3. & " " & !PDV & " " & !COD_ZONA & " " & !ENCARGADO & " " & !COD_EXEPCION _
  4. & " " & !VLR_AJUSTE & " " & !EXCEPCIONES & " " & !ENCARGADO & " " & !TIPO
  5.  
Me aparece es:
Registro nuevo: False

Gracias por ayudarme
Chao
El pasado son solo recuerdos, el futuro son solo sueños

Sagutxo

  • Miembro MUY activo
  • ***
  • Mensajes: 320
    • Ver Perfil
Re: Addnew En Dao
« Respuesta #4 en: Sábado 18 de Febrero de 2006, 20:48 »
0
Salu2, Sin ánimos de ofender el código de otra persona :(, Hay algo que me tiene intrigado en tu Cod.


Te dispones a guardar los datos
.AddNew
   !NUM_MES = txtMes
                   !FECHA = dtpDate
                   !TIPO = txtTipo
                   !AUDITOR = txtAuditor
                   !COD_ZONA = txtMostrador & " " & txtZona
AKI COMPRUEBAS UN CAMPO y existe la posibilidad de error crítico según tu mensaje, pienso que estaría mejor arriba el checkeo de ese campo.
                   If chkExep.Value = 0 Then
                       Call MsgBox("NO HAY EXCEPCIONES", vbCritical, "Advertencia")
                   Else
                       !EXCEPCIONES = chkExep.Value
                       !COD_EXEPCION = txtExcep
                       !VLR_AJUSTE = txtVrAjuste
                   End If
sigue grabando tanto si es true como si es false
                   !PDV = txtPDV
                   !ENCARGADO = txtPDV
                   !COMPROMISO = txtCompro
                   .Update
                   .Bookmark = .LastModified

al principio haces = abres la DB y la tabla y despues compruebas si los campos tienen datos.

   Si te molestan estos comentarios perdóname lo hago con la mejor intención aunke dado tu gran numero de mensajes respondidos me temo que solo estás haciendo pruebas :).
-------------------------------
Me ha ocurrido a la hora de pasar un valor true a una Db de acces97 en la que he tenido que pasarle el valor (-1) directamente ya que si no lo graba mal, aunke dudo que esto haría que no se grabara el registro. Es que no veo nada mas que sea raro.
 :smartass:  :whistling:  :comp:
Mi mujer tiene un físico bárbaro!!!. Einstein.

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Addnew En Dao
« Respuesta #5 en: Domingo 19 de Febrero de 2006, 04:40 »
0
Cita de: "Sagutxo"
Salu2, Sin ánimos de ofender el código de otra persona :(, Hay algo que me tiene intrigado en tu Cod.


Te dispones a guardar los datos
.AddNew
   !NUM_MES = txtMes
                   !FECHA = dtpDate
                   !TIPO = txtTipo
                   !AUDITOR = txtAuditor
                   !COD_ZONA = txtMostrador & " " & txtZona
AKI COMPRUEBAS UN CAMPO y existe la posibilidad de error crítico según tu mensaje, pienso que estaría mejor arriba el checkeo de ese campo.
                   If chkExep.Value = 0 Then
                       Call MsgBox("NO HAY EXCEPCIONES", vbCritical, "Advertencia")
                   Else
                       !EXCEPCIONES = chkExep.Value
                       !COD_EXEPCION = txtExcep
                       !VLR_AJUSTE = txtVrAjuste
                   End If
sigue grabando tanto si es true como si es false
                   !PDV = txtPDV
                   !ENCARGADO = txtPDV
                   !COMPROMISO = txtCompro
                   .Update
                   .Bookmark = .LastModified

al principio haces = abres la DB y la tabla y despues compruebas si los campos tienen datos.

   Si te molestan estos comentarios perdóname lo hago con la mejor intención aunke dado tu gran numero de mensajes respondidos me temo que solo estás haciendo pruebas :).
-------------------------------
Me ha ocurrido a la hora de pasar un valor true a una Db de acces97 en la que he tenido que pasarle el valor (-1) directamente ya que si no lo graba mal, aunke dudo que esto haría que no se grabara el registro. Es que no veo nada mas que sea raro.
 :smartass:  :whistling:  :comp:
Hola sagutxo, gracias por responder, la vaina con la comprobación de ese campo es que solamente se guardan esos datos si el check esta a 1, de lo contrario los datos no se guardan, pero el resto si.

Me dices que se estan grabando sea o no sea, pero yo he visto en el debug que no los graba, osea, no los guarda en el registro.

Sigo igual :(  :(  :(  :(

Gracias Chao.
El pasado son solo recuerdos, el futuro son solo sueños

Sagutxo

  • Miembro MUY activo
  • ***
  • Mensajes: 320
    • Ver Perfil
Re: Addnew En Dao
« Respuesta #6 en: Domingo 19 de Febrero de 2006, 10:52 »
0
Salu2. pos ahora si que no veo ningún campo que te pudiera dar un error mas que el de fecha, y eso suponiendo que sea un campo de fecha en la DB. aunkeque como bien te dijeron antes los campos de texto si no compruebas que están vacios es recomendable grabarlos como = "" & CampoTxt, para evitar el posible campo NoNull. Si te parece y tienes un registro en el que sabes que falla siempre estaría encantado de ponerlo en mi PC e intentar buscar la curiosidad entre los 2.

venga agur. :smartass:  :whistling:  :comp:
Mi mujer tiene un físico bárbaro!!!. Einstein.

9tnix

  • Miembro MUY activo
  • ***
  • Mensajes: 165
  • Nacionalidad: pe
    • Ver Perfil
Re: Addnew En Dao
« Respuesta #7 en: Domingo 19 de Febrero de 2006, 14:28 »
0
Hola RadicalEd

Código: Text
  1.  
  2. Set rsVisitas = dbVisitas.OpenRecordset("VISITA", dbOpenDynaset)
  3. ' If txtMes.Text <> "" Or txtTipo.Text <> "" Or txtAuditor.Text <> "" Or txtMostrador.Text <> "" Or _
  4. '    txtZona.Text <> "" Or txtPDV.Text <> "" Or txtExcep.Text <> "" Or txtCompro.Text <> "" Then
  5. '    Set rsVisitas = dbOpenDB.OpenRecordset("VISITA", dbOpenTable)
  6.  
  7.  

Me pregunto porque abres dos veces el recordset rsVisitas ?
Bueno tengo entendido que cuando lo abres como dynaset se pueden modificar los datos y hacer otras cosas mas, prueba abriendolo como dynaset y no abras 2 veces la misma tabla solo deja el que abre como dynaset.

Yo estoy fuera de DAO hace mucho desde 1999 ahora uso ADO y ADO.Net pero dejame ver algo de mis programas y recordar que puede estar sucediendo alli.

Att zeekel
TP-Systems
our knowledge is our power!

cpmario

  • Miembro HIPER activo
  • ****
  • Mensajes: 629
    • Ver Perfil
    • http://www.cpimario.com
Re: Addnew En Dao
« Respuesta #8 en: Domingo 19 de Febrero de 2006, 18:01 »
0
Revisé y modifiqué el código, te lo expongo para que lo revises
Código: Text
  1.  
  2. Private Sub cmdSave_Click()
  3.     On Error GoTo ErrorcmdSave
  4.     Dim dbVisitas As Database
  5.     Dim rsVisitas As Recordset
  6.     Set dbVisitas = OpenDatabase(App.Path & "\bd1.mdb")
  7.     Set rsVisitas = dbVisitas.OpenRecordset("VISITA", dbOpenDynaset)
  8.     With rsVisitas
  9.            Debug.Print "Registro nuevo: " & !NUM_MES & " " & !Fecha & " " & !AUDITOR _
  10.             & " " & !PDV & " " & !COD_ZONA & " " & !ENCARGADO & " " & !COD_EXEPCION _
  11.              & " " & !VLR_AJUSTE & " " & !EXCEPCIONES & " " & !ENCARGADO & " " & !TIPO
  12.     End With
  13.    
  14.     With rsVisitas
  15.         .AddNew
  16.         !NUM_MES = txtMes
  17.         !Fecha = dtpDate
  18.         !TIPO = txtTipo
  19.         !AUDITOR = txtAuditor
  20.         !COD_ZONA = txtMostrador & " " & txtZona
  21.         If chkExep.Value = 0 Then
  22.             Call MsgBox("NO HAY EXCEPCIONES", vbCritical, "Advertencia")
  23.         Else
  24.             !EXCEPCIONES = chkExep.Value
  25.             !COD_EXEPCION = txtExcep
  26.             !VLR_AJUSTE = txtVrAjuste
  27.         End If
  28.         !PDV = txtPDV
  29.         !ENCARGADO = txtPDV
  30.         !COMPROMISO = txtCompro
  31.         .Update
  32.         .Bookmark = .LastModified
  33.     End With
  34.     Call CleanText
  35.     rsVisitas.Close
  36.     dbVisitas.Close
  37.     Call VisibleFalse
  38. Exit Sub
  39. ErrorcmdSave:
  40.     MsgBox Err.Description, vbCritical, App.Title
  41. End Sub
  42.  
  43.  

Como ya te indicaban en comentarios anteriores, no coloques 'On error resume next' ya que esta es la causa que no se grabe un registro con errores, y tampoco te darás cuenta cual es el error.
Por otro lado debes tomar en cuenta que un CheckBox no sirve para manejar campos de Falso/Verdadero, ya que los valores que maneja son 0,1 y 2 y el campo de base de datos dbBoolean maneja 0 y -1

Espero esta información te sea útil.
 :comp:

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Addnew En Dao
« Respuesta #9 en: Domingo 19 de Febrero de 2006, 21:37 »
0
Cita de: "zeekel"
Hola RadicalEd

Código: Text
  1.  
  2. Set rsVisitas = dbVisitas.OpenRecordset("VISITA", dbOpenDynaset)
  3. ' If txtMes.Text <> "" Or txtTipo.Text <> "" Or txtAuditor.Text <> "" Or txtMostrador.Text <> "" Or _
  4. '    txtZona.Text <> "" Or txtPDV.Text <> "" Or txtExcep.Text <> "" Or txtCompro.Text <> "" Then
  5. '    Set rsVisitas = dbOpenDB.OpenRecordset("VISITA", dbOpenTable)
  6.  
  7.  

Me pregunto porque abres dos veces el recordset rsVisitas ?
Bueno tengo entendido que cuando lo abres como dynaset se pueden modificar los datos y hacer otras cosas mas, prueba abriendolo como dynaset y no abras 2 veces la misma tabla solo deja el que abre como dynaset.

Yo estoy fuera de DAO hace mucho desde 1999 ahora uso ADO y ADO.Net pero dejame ver algo de mis programas y recordar que puede estar sucediendo alli.

Att zeekel
Como puedes ver esa parte del código no se esta usando:
'Set rsVisitas = dbOpenDB.OpenRecordset("VISITA", dbOpenTable)

Gracias por la información cpmario, realmente no sabia lo del Checkbox, ahora modifico el código y miro a ver,

Gracias a todos.
Chao
El pasado son solo recuerdos, el futuro son solo sueños

9tnix

  • Miembro MUY activo
  • ***
  • Mensajes: 165
  • Nacionalidad: pe
    • Ver Perfil
Re: Addnew En Dao
« Respuesta #10 en: Lunes 20 de Febrero de 2006, 04:35 »
0
Hola chicos

En primer lugar quiero burlarme de mi estupidez jajajaja :D es que llevo varias horas delante de la makina  :comp: y no me fije ke estaba en comentario la linea
Código: Text
  1. '    Set rsVisitas = dbOpenDB.OpenRecordset("VISITA", dbOpenTable)
  2.  
en fin pero lo del check que dijo cpmario esta en lo cierto sobre los valores del check y lo del campo Boolean.

Reitero que cpmario estaba en lo correcto

Repase lo de DAO y si aun necesitas ayuda RadicalEd cuenta conmigo para servirte de ayuda.

Att zeekel

PD:  :D jajajaja no me fije, disculparan el cuerpo no es de fierro y errar es humano
TP-Systems
our knowledge is our power!