Foros del Web » Programación para mayores de 30 ;) » .NET »

Problemas con un DS Update y el Datagrid

Estas en el tema de Problemas con un DS Update y el Datagrid en el foro de .NET en Foros del Web. Hola. Tengo una base de datos que posee una columna de fecha cuyo valor predeterminado en la base de datos access es AHORA() de manera ...
  #1 (permalink)  
Antiguo 29/06/2005, 00:56
 
Fecha de Ingreso: junio-2002
Mensajes: 212
Antigüedad: 21 años, 10 meses
Puntos: 0
Problemas con un DS Update y el Datagrid

Hola.
Tengo una base de datos que posee una columna de fecha cuyo valor predeterminado en la base de datos access es AHORA() de manera tal que complete o no ese campo el valor va a ser la fecha y hora actual.
Mi aplicacion abre la base de datos y pone los valores dentro de un datagrid a traves de un dataset.
El tema que tengo es que cuando completo los campos, si dejo ese en NULL (vacio) no se autocompleta por mas que tenga como valor predeterminado en la base el AHORA().
El ID autonumerico se autocompleta, pero la fecha no.
Alguna sugerencia?
Abrazo
__________________
Simuladores y Examenes Cisco, Herramientas de Red Online - Tecnologia y Redes
  #2 (permalink)  
Antiguo 29/06/2005, 01:14
 
Fecha de Ingreso: octubre-2004
Mensajes: 878
Antigüedad: 19 años, 6 meses
Puntos: 1
Que tipo de BD utilizas?
  #3 (permalink)  
Antiguo 29/06/2005, 01:32
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Wakewakeup utiliza access (haber si leemos un poqito más), jeje,

Tienes el campo como requerido???Si no es así, ponlo, y ya te debería poner el valor predeterminado
  #4 (permalink)  
Antiguo 29/06/2005, 09:28
 
Fecha de Ingreso: junio-2002
Mensajes: 212
Antigüedad: 21 años, 10 meses
Puntos: 0
Gracias por las respuestas
No, si lo pongo requerido me da un error porque el campo es requerido.
Asi como esta, si agrego un dato directamente en el access o a traves de adodb la fecha se agrega automaticamente...
Alguna sugerencia? :S
Abrazo
__________________
Simuladores y Examenes Cisco, Herramientas de Red Online - Tecnologia y Redes
  #5 (permalink)  
Antiguo 29/06/2005, 09:35
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Lo que puedes hacer es cuando implementes el esquema del dataset (cuando lo cargues) decirle también que ese campo es requerido o puedes ponerle valor por defecto también, así no habrá diferencias. entiendes???

p.ej

ds.Tables("prueba").Columns("fecha").AllowDBNull=F alse
o
ds.Tables("prueba").Columns("fecha").DefaultValue = Now.Date

Quizá asi te sirva, no???
  #6 (permalink)  
Antiguo 29/06/2005, 11:37
 
Fecha de Ingreso: junio-2002
Mensajes: 212
Antigüedad: 21 años, 10 meses
Puntos: 0
Hola Jose, gracias por el dato, te explico mas o menos lo que estoy haciendo...
Yo en realidad abro cualquier base de datos, el tema es que no se que columna es la de la fecha, puede haber cualqueir campo, coincide en este caso que uno es un campo de fecha.
Te pongo el codigo que estoy manejando para que te des una idea:

Código:
  Dim ds As New DataSet
    Dim ol As New OleDb.OleDbDataAdapter
    Dim cn As New ADODB.Connection
    Dim rs2 As New ADODB.Recordset
    Private Sub Datos_Ver_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.Top = (frm1.Height / 2) + frm1.Top - (Me.Height / 2)
        Me.Left = (frm1.Width / 2) + frm1.Left - (Me.Width / 2)
        cn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & nombrebase & ";Persist Security Info=False")  ' note 5323 is the name of dbase 
        rs2.Open(tablanombre, cn, ADODB.CursorTypeEnum.adOpenDynamic, ADODB.LockTypeEnum.adLockOptimistic)
        ds.Tables.Add(tablanombre)
        ol.Fill(ds.Tables(tablanombre), rs2)
        ds.DataSetName = cn.ConnectionString
        Me.MSGrid.DataSource = ds.Tables(tablanombre)
        cn.Close()
    End Sub

    Private Sub ButtonXP1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonXP1.Click
        Me.Close()
    End Sub


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Try
            '' On Error GoTo errores
            Dim SQLString As String, connstring As String
            connstring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & nombrebase & ";Persist Security Info=False"
            SQLString = "Select * From " & tablanombre
            Dim DBDataAdapter As New OleDb.OleDbDataAdapter(SQLString, connstring)
            Dim DBUpdateCommand As New OleDb.OleDbCommandBuilder(DBDataAdapter)
            DBDataAdapter.Update(ds, tablanombre)
            Me.Close()
            Exit Sub
errores:
        Catch Ex As Exception
            MsgBox(Ex.Message)
        End Try
    End Sub
Con este codigo abro y modifico cualquier tabla independientemente de los campos, la macana que si tenes uno cuyo campo es el de fecha o un campo con un valor por defecto al comenzar a agregar un nuevo dato el datagrid completa todas las columnas con valores nulos, no respeta la estructura de valores predeterminados en la base.
Hay alguna forma de que el datagrid respete los valores tipo como lo hace directamente el access sobre la base de datos?
Gracias!!
__________________
Simuladores y Examenes Cisco, Herramientas de Red Online - Tecnologia y Redes
  #7 (permalink)  
Antiguo 29/06/2005, 12:27
Avatar de kova  
Fecha de Ingreso: marzo-2003
Mensajes: 79
Antigüedad: 21 años, 1 mes
Puntos: 0
me parece bien
  #8 (permalink)  
Antiguo 29/06/2005, 12:29
 
Fecha de Ingreso: junio-2002
Mensajes: 212
Antigüedad: 21 años, 10 meses
Puntos: 0
Si, el codigo es correcto, el tema es que cuando selecciono para crear una nueva fila la grilla se llena de valores null, no identifica los valores por defecto de los campos de la base.
Hay alguna forma de hacerlo o me resigno? :(
Abrazo
__________________
Simuladores y Examenes Cisco, Herramientas de Red Online - Tecnologia y Redes
  #9 (permalink)  
Antiguo 29/06/2005, 12:30
Avatar de kova  
Fecha de Ingreso: marzo-2003
Mensajes: 79
Antigüedad: 21 años, 1 mes
Puntos: 0
debes resignarte
__________________
Integrados, entre tanta desintegración
  #10 (permalink)  
Antiguo 30/06/2005, 04:30
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Bueno, podrías intentar recorrer el datatable antes de insertarlo en el dataset, y poner una condicion que si el campo es de tipo fecha, que ponga el defaultvalue, pero no se yo si te dejará cambiar las propiedades de la columna cuando ya tenga datos. Pruebalo si quieres y nos cuentas.
  #11 (permalink)  
Antiguo 30/06/2005, 09:48
 
Fecha de Ingreso: junio-2002
Mensajes: 212
Antigüedad: 21 años, 10 meses
Puntos: 0
Hola Jose.
Lo he hecho:
For Each r As DataRow In ds.Tables(0).Rows
''MsgBox(mfecha)
If IsDBNull(r(mfecha)) Then r(mfecha) = Date.Now
Next
El tema es que a veces, cuando borro una fila me tira error en el dataset update, me dice que:
NO SE PUEDE TENER ACCESO A LA INFORMACION ELIMINADA DE UNA FILA

No se porque, de alguna manera esta verificando la fila que borre :S
:S
Tenes idea si se puede arreglar eso?
abrazo
__________________
Simuladores y Examenes Cisco, Herramientas de Red Online - Tecnologia y Redes
  #12 (permalink)  
Antiguo 30/06/2005, 09:58
 
Fecha de Ingreso: octubre-2004
Mensajes: 878
Antigüedad: 19 años, 6 meses
Puntos: 1
http://www.forosdelweb.com/f29/error-dataset-update-312366/
  #13 (permalink)  
Antiguo 30/06/2005, 10:22
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
No me refería a eso exactamente, me refería a esto:
Código PHP:
Dim ds As New DataSet
    Dim ol 
As New OleDb.OleDbDataAdapter
    Dim cn 
As New ADODB.Connection
    Dim rs2 
As New ADODB.Recordset
    
Private Sub Datos_Ver_Load(ByVal sender As System.ObjectByVal e As System.EventArgsHandles MyBase.Load
        Me
.Top = (frm1.Height 2) + frm1.Top - (Me.Height 2)
        
Me.Left = (frm1.Width 2) + frm1.Left - (Me.Width 2)
        
cn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" nombrebase ";Persist Security Info=False")  ' note 5323 is the name of dbase 
        rs2.Open(tablanombre, cn, ADODB.CursorTypeEnum.adOpenDynamic, ADODB.LockTypeEnum.adLockOptimistic)

'
Aquí buscamos los tipos de las columnas:

dim i as integer 0
while tablanombre.Columns.Count
if tablanombre.Columns(i).DataType System.Type.GetType("System.DateTime"then
tablanombre
.Columns(i).DefaultValuenow()
end if
i+=1
end 
while 
        
ds.Tables.Add(tablanombre)
        
ol.Fill(ds.Tables(tablanombre), rs2)
        
ds.DataSetName cn.ConnectionString
        Me
.MSGrid.DataSource ds.Tables(tablanombre)
        
cn.Close()
    
End Sub 
Lo que pasa es que no se si te dejará hacer eso, al tener el datatable ya datos.

¿Entiendes lo que te quiero decir???
  #14 (permalink)  
Antiguo 02/07/2005, 14:20
 
Fecha de Ingreso: junio-2002
Mensajes: 212
Antigüedad: 21 años, 10 meses
Puntos: 0
Si, funciona... de hecho lo uso, el tema es que me verificaba incluso los datos borrados en el momento... pero ya lo he arreglado...
Muchas gracias!
__________________
Simuladores y Examenes Cisco, Herramientas de Red Online - Tecnologia y Redes
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:48.