Autor Tema: problema con fecha al guardar en bd de access  (Leído 8689 veces)

0 Usuarios y 1 Visitante están viendo este tema.

fernandos85al@hotmail.com

  • Kilobyte
  • **
  • Mensajes: 71
  • Reputación: +3/-3
    • Ver Perfil
problema con fecha al guardar en bd de access
« en: Agosto 19, 2012, 01:32:41 am »
Hola gente! estoy haciendo una aplicación que debe guardar un registro de usuarios, cuando ingresan al sistema por ejemplo, algo asi...

código fuente

Código: [Seleccionar]

Dim Cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim SQL As String
Dim sPath As String


Private Sub Command1_Click()
sPath = App.Path & "\" & "Peaje.mdb"


Set Cnn = New ADODB.Connection
Cnn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
sPath & _
";Persist Security Info=False; Jet OLEDB:Database Password = "
Cnn.Open


Set rs = New ADODB.Recordset
SQL = "Insert into Tabla1 (Fecha) values" & "(" & _
Label1.Caption & ")"

rs.Open SQL, Cnn, adOpenStatic, adLockOptimistic
End Sub

Private Sub Form_Load()
Label1.Caption = Date
End Sub




como controles pongo un label y un command1


hasta acá todo va bien, al parecer, el problema se me presenta cuando verifico en la base de datos creada en access me guarda otra fecha totalmente distinta a la que me muestra el label, que es elque deberia aparecer en la tabla de access..


por ejemplo: si en el label aparece 10/08/2012, en la tabla en el campo fecha me guarda: 31/10/1899.


busque por todos los rincones, el error, pero no logro verlo...


la fecha y hora del sistema están actualizadas.. que hago mal?


agradezco infinitamente por leer!!!

no se si me explico...????

saludos a todos!

seba123neo

  • Terabyte
  • *****
  • Mensajes: 763
  • Reputación: +88/-5
    • Ver Perfil
Re:problema con fecha al guardar en bd de access
« Respuesta #1 en: Agosto 19, 2012, 01:54:03 am »
ese valor es el de access cuando la fecha es incorrecta o creo que es el valor por defecto cuando la fecha es 0. igualmente ahi esta mal, ya que usas un recordset para hacer un INSERT, y esos comandos (INSERT, UPDATE, DELETE) se ejecutan con ADODB.Command, igualmente hace un Debug.Print de la variable SQL para ver que esta pasando, hay que ver en la base de access como tenes definido ese campo.

saludos.

Jeronimo

  • Gigabyte
  • ****
  • Mensajes: 402
  • Reputación: +33/-2
    • Ver Perfil
Re:problema con fecha al guardar en bd de access
« Respuesta #2 en: Agosto 19, 2012, 12:49:12 pm »
Hablo de lo poco que me acuerdo de Access.
Además de verificar cómo está definido el campo "fecha", ¿el valor no debe ir entre comas simples?

fernandos85al@hotmail.com

  • Kilobyte
  • **
  • Mensajes: 71
  • Reputación: +3/-3
    • Ver Perfil
Re:problema con fecha al guardar en bd de access
« Respuesta #3 en: Agosto 19, 2012, 04:00:17 pm »
Hola gente!!! gracias por las respuestas tan rápidas! jerónimo, tenias razón,  la fecha va entre comillas simples, ya solucione el problema. así me quedo el código.


Código: [Seleccionar]

Dim Cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim SQL As String
Dim sPath As String


Private Sub Command1_Click()
Dim fecha As Date
sPath = App.Path & "\" & "Peaje.mdb"

fecha = Format(Date, "dd/mm/yyyy")


Set Cnn = New ADODB.Connection
Cnn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
sPath & _
";Persist Security Info=False; Jet OLEDB:Database Password = "
Cnn.Open


Set rs = New ADODB.Recordset
SQL = "INSERT INTO usuarios (Fecha) values('" & fecha & "')"




rs.Open SQL, Cnn, adOpenStatic, adLockOptimistic



End Sub





mil gracias a todos!!
saludos cordiales.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:problema con fecha al guardar en bd de access
« Respuesta #4 en: Agosto 19, 2012, 09:27:23 pm »
Fernando, se que ya esta resuelto el problema, pero te sugiero que mejor hagas las transacciones (Insert, Update, Delete) con Execute y no con Open.
Osea quedaria asi:
Código: (VB) [Seleccionar]
Dim Cnn    As ADODB.Connection
Dim SQL    As String
Dim sPath  As String

Private Sub Command1_Click()
Dim fecha  As String   '<-- Mejor si lo mandas como string asi el campo de tu tabla sea Date
sPath = App.Path & "\" & "Peaje.mdb"
fecha = Format(Date, "YYYY/MM/DD")  '<-- Formateado de esta forma es infalible

Set Cnn = New ADODB.Connection
Cnn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
sPath & _
";Persist Security Info=False; Jet OLEDB:Database Password = "
Cnn.Open



SQL = "INSERT INTO usuarios (Fecha) values('" & fecha & "')"
Cnn.Execute SQL, adCmdText  '<-- Listo, no necesitas declarar rs ni abrirlo.
End Sub

Y mejor aun si la conexión estuviera en un modulo y no en un botón.

Saludos
« última modificación: Agosto 19, 2012, 09:38:54 pm por YAcosta »
Me encuentras en YAcosta.com

fernandos85al@hotmail.com

  • Kilobyte
  • **
  • Mensajes: 71
  • Reputación: +3/-3
    • Ver Perfil
Re:problema con fecha al guardar en bd de access
« Respuesta #5 en: Agosto 19, 2012, 09:40:19 pm »
Hola Yvan,  gracias por la respuesta y a seba también, a todos!!!


voy a poner en practica sus sugerencias, así me evito dolores de cabeza con el código:


pd muy bueno el comercial de quentas, con Hitler promosionandolo!


saludos cordiales, y muchas gracias!

Jeronimo

  • Gigabyte
  • ****
  • Mensajes: 402
  • Reputación: +33/-2
    • Ver Perfil
Re:problema con fecha al guardar en bd de access
« Respuesta #6 en: Agosto 20, 2012, 02:13:11 am »
Yván: he visto que muchos de ustedes lo hacen con "execute" y no con "open", tal como sugerís acá. Yo siempre lo hago con "open" (ya no uso Access, sino MySQL). ¿Por qué conviene hacerlo con "execute"? Pido perdón si la pregunta es muy básica, pero la verdad es que aprendí haciendo y no tengo casi teoría.
Muchas gracias.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:problema con fecha al guardar en bd de access
« Respuesta #7 en: Agosto 20, 2012, 02:57:51 am »
El Open lo uso exclusivamente para leer, y el Execute para alterar la base de datos y la razón de esto despues de que hace algunos años tuve también tu inquietud es por lo siguiente:
1.- Usando Execute, lo que haces es atacar directamente la Base de Datos y vendría a ser más veloz que usar un RS (aunque no se nota con poca data y pocas tablas).

2.- Si se usa .Open con el rs, lo que haces es utilizar un intermediario entre la o las tablas para actualizar, es decir un RecordSet que carga a traves de una consulta n cantidad de registros para poder afectar posteriormente la tabla, si se actualiza el RS tiene que replicar a la Tabla, un motivo para si usar el Open seria por ejemplo si estas usando SP con parámetros de retorno.

Adicional a esto y como nota aparte no esta demás mencionar que... y ya que estas con MySQL resulta mas adecuado y recomendable también usar Execute (cuando alteras la BD) junto con los métodos BeginTransaction y CommitTransaction siendo de uso obligatorio si tu BD es atacada desde varios terminales para salvaguardas la coherencia de los datos.

Saludos
« última modificación: Agosto 20, 2012, 03:05:41 am por YAcosta »
Me encuentras en YAcosta.com

Jeronimo

  • Gigabyte
  • ****
  • Mensajes: 402
  • Reputación: +33/-2
    • Ver Perfil
Re:problema con fecha al guardar en bd de access
« Respuesta #8 en: Agosto 20, 2012, 09:36:49 am »
Siempre trabajo con transacciones, porque en general los sistemas que hago son para utilizarse en redes; de manera que con eso, como decís, prevengo situaciones de incoherencia en los datos.
Lo otro no lo sabía, es muy interesante. Y por lo que explicás, imagino que si se alteran muchos registros, con "execute" se hace más rápidamente que con "open".
Muchas gracias por tu tiempo y tu explicación.