Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Ayuda con datagrid

Estas en el tema de Ayuda con datagrid en el foro de Visual Basic clásico en Foros del Web. necesito cargar en una grilla los datos que tengo en una tabla, para conectarme utilizo la siguiente conexion. Dim cnn As New ADODB.Connection Dim rec ...
  #1 (permalink)  
Antiguo 19/02/2006, 13:14
 
Fecha de Ingreso: febrero-2006
Mensajes: 8
Antigüedad: 18 años, 2 meses
Puntos: 0
Ayuda con datagrid

necesito cargar en una grilla los datos que tengo en una tabla, para conectarme utilizo la siguiente conexion.

Dim cnn As New ADODB.Connection
Dim rec As New ADODB.Recordset
cnn.Open "Provider=SQLOLEDB;" & _
"Data Source=(local);" & _
"Initial Catalog=mermas;", "sa", ""
rec.Open "select * from PRODUCTOS", cnn, _
adOpenKeyset, adLockOptimistic

alguien podria echarme una manito.
  #2 (permalink)  
Antiguo 19/02/2006, 22:05
Avatar de jc_moty  
Fecha de Ingreso: septiembre-2005
Ubicación: Usulután, El Salvador
Mensajes: 477
Antigüedad: 18 años, 7 meses
Puntos: 1
Bueno, segun mi experiencia, no podes conectar una DataGrid a un objeto connection o recordset, sino que la DataGrid la conectas a un Adodc (ADO Data Control), y en las propiedades de este objeto estableces la cadena de conexion y el RecordSource, y la DataGrid la conectas al Adodc mediante la propiedad DataSource, algo asi:
Código:
Adodc1.ConnectionString = "Provider=SQLOLEDB;" & "Data Source=(local);" & "Initial Catalog=mermas;", "sa", ""
Adodc1.RecordSource = "SELECT * FROM productos"
Set DataGrid1.DataSource = Adodc1
Espero te sirva
Saludos
  #3 (permalink)  
Antiguo 20/02/2006, 05:45
 
Fecha de Ingreso: febrero-2006
Mensajes: 8
Antigüedad: 18 años, 2 meses
Puntos: 0
Yo se que se puede hacer con un Recordset desconectado, encontre este ejemplo realizado con una base de datos en access, pero mi problema es que no puedo realizar el mismo procedimiento con una bd en sql server.

dejo el codigo de ejemplo
Código:
Option Explicit

' Declaración de variables objeto a nivel del formulario
Private mCnn As ADODB.Connection
Private mRst As ADODB.Recordset

Private Sub Command1_Click()
    ' Conectamos el Recordset para proceder a la
    ' actualización
    Set mRst.ActiveConnection = mCnn

    ' Actualizamos el conjunto de datos
    mRst.UpdateBatch

    ' Desconectamos de nuevo el objeto Recordset
    Set mRst.ActiveConnection = Nothing

End Sub

Private Sub Command2_Click()
    If MsgBox("¿Desea eliminar la tabla temporal?", _
        vbInformation + vbYesNo) = vbYes Then
        '
        ' Eliminamos la tabla ...
        mCnn.Execute "DROP TABLE Tabla1"

        ' Descargamos el formulario
        Unload Me
    End If

End Sub

Private Sub Form_Load()

    On Error GoTo ErrFormLoad

    ' Configuramos los distintos controles del formulario
    Command1.Caption = "Actualizar"
    Command2.Caption = "Eliminar tabla temporal"

    With DataGrid1
        .AllowAddNew = True
        .AllowDelete = True
    End With

    ' Creamos un nuevo objeto Connection
    Set mCnn = New ADODB.Connection

    ' Abrimos la conexión
    With mCnn
        .Provider = "Microsoft.Jet.OLEDB.4.0"
        .ConnectionString = "Data Source = C:\Mis documentos\Neptuno.mdb"
        .Open
    End With

    ' Creamos la tabla de prueba, copiando la estructura
    ' de la tabla Clientes
    mCnn.Execute "SELECT * INTO Tabla1 FROM Clientes WHERE 1=0"

    ' Creamos un nuevo objeto Recordset
    Set mRst = New ADODB.Recordset

    ' Configuramos y abrimos el Recordset
    With mRst
        .CursorLocation = adUseClient
        .CursorType = adOpenStatic
        .LockType = adLockBatchOptimistic
        .Open "Tabla1", mCnn, , , adCmdTable
    End With

    ' Enlazamos el control DataGrid con el objeto Recordset
    Set DataGrid1.DataSource = mRst

    ' Desconectamos el objeto Recordset
    Set mRst.ActiveConnection = Nothing

    Exit Sub

ErrFormLoad:
    If Err.Number = -2147217900 Then
        If MsgBox("La tabla ya existe. ¿Desea eliminarla?", _
            vbInformation + vbYesNo) = vbYes Then
            '
            ' Eliminamos la tabla ...
            mCnn.Execute "DROP TABLE Tabla1"
            ' ... y la volvemos a crear
            Resume
        End If
    End If

    Resume Next
End Sub

Private Sub Form_Unload(Cancel As Integer)

    mRst.Close
    mCnn.Close
    Set mRst = Nothing
    Set mCnn = Nothing

End Sub
  #4 (permalink)  
Antiguo 20/02/2006, 08:32
Avatar de jrp01  
Fecha de Ingreso: mayo-2004
Ubicación: México
Mensajes: 2.702
Antigüedad: 20 años
Puntos: 0
en que parte asignas el recordset al datagrid?
Set DataGrid1.DataSource = rec
  #5 (permalink)  
Antiguo 22/02/2006, 06:42
 
Fecha de Ingreso: febrero-2006
Mensajes: 8
Antigüedad: 18 años, 2 meses
Puntos: 0
Cita:
Iniciado por jrp01
en que parte asignas el recordset al datagrid?
Set DataGrid1.DataSource = rec

sip, lo asigno tal cual tu dices, pero me arroja un error al momento de hacerlo
  #6 (permalink)  
Antiguo 22/02/2006, 08:29
Avatar de jrp01  
Fecha de Ingreso: mayo-2004
Ubicación: México
Mensajes: 2.702
Antigüedad: 20 años
Puntos: 0
En que parte del programa te marca el error? al asigar el recordset al datagrid?
  #7 (permalink)  
Antiguo 22/02/2006, 12:13
 
Fecha de Ingreso: febrero-2006
Mensajes: 8
Antigüedad: 18 años, 2 meses
Puntos: 0
Cita:
Iniciado por jrp01
En que parte del programa te marca el error? al asigar el recordset al datagrid?
Asi es, al momento de asignarlo al datagrid, ademas me muestra un mensaje en que dice que el rowset no es bookmarkable
  #8 (permalink)  
Antiguo 22/02/2006, 12:34
Avatar de jrp01  
Fecha de Ingreso: mayo-2004
Ubicación: México
Mensajes: 2.702
Antigüedad: 20 años
Puntos: 0
A ver intenta cambiar las proiedades del record set con estas:
Código:
rec.CursorType = adOpenStatic
rec.LockType = adLockBatchOptimistic
En lugar de las que tienes
  #9 (permalink)  
Antiguo 22/02/2006, 12:39
 
Fecha de Ingreso: febrero-2006
Mensajes: 8
Antigüedad: 18 años, 2 meses
Puntos: 0
pego el codigo para ver mejor lo que estoy haciendo
Código:
Option Explicit

Private cnn As ADODB.Connection
Private rst As ADODB.Recordset

Private Sub cmdAbrir_Click()
Dim tField As ADODB.Field
'
' Por si ya estaba abierta...
Set cnn = Nothing
Set rst = Nothing
'
' Crear los objetos
Set cnn = New ADODB.Connection
Set rst = New ADODB.Recordset
'
' abrir la base usando las credenciales de Windows

 cnn.Open "Provider=SQLOLEDB;" & _
             "Data Source=(local);" & _
       "Initial Catalog=mermas;", "sa", ""
           
           
'
' abrir el recordset indicando la tabla a la que queremos acceder
rst.Open "SELECT id_prod FROM PRODUCTOS", cnn, adOpenDynamic, adLockOptimistic
'
' Asignar los nombres de los campos al data
Set DataGrid1.DataSource = rst
'
' Cerrar el recordset y la conexión
rst.Close
cnn.Close
'
End Sub
  #10 (permalink)  
Antiguo 22/02/2006, 12:42
Avatar de jrp01  
Fecha de Ingreso: mayo-2004
Ubicación: México
Mensajes: 2.702
Antigüedad: 20 años
Puntos: 0
Cambia esto
Código:
rst.Open "SELECT id_prod FROM PRODUCTOS", cnn, adOpenDynamic, adLockOptimistic
Por esto:
Código:
rst.Open "SELECT id_prod FROM PRODUCTOS", cnn, adOpenStatic, adLockBatchOptimistic
  #11 (permalink)  
Antiguo 22/02/2006, 13:29
 
Fecha de Ingreso: febrero-2006
Mensajes: 8
Antigüedad: 18 años, 2 meses
Puntos: 0
encontre una solucion a mi problema, y fue cargar en el form_load lo sgte
la duda que tengo, es como hago para que la grilla se actualize despues que guarde los nuevos registros.

gracias por orientarme, me sirvio para ver donde estaba mi error

[code]
Option Explicit

' ----------------------------------------------------------
' Declaro el objeto MiConexion como una variable de módulo.
' Cuando se instancie será la conexión con la base de datos.
' ----------------------------------------------------------
Dim MiConexión As ADODB.Connection

' ----------------------------------------------------------
' Al cargarse el Formulario hago el trabajo.
' (Aquí, a lo sumo, solo debería establecerse la conexión con la base de datos,
' y las demás cosas se deberían hacer en otro lado,
' pero este es solo un ejemplo sencillo)
' ----------------------------------------------------------
Private Sub Form_Load()
' ----------------------------------------------------------
' Instancio la conexión y me conecto con la base de datos
' ----------------------------------------------------------
Set MiConexión = New ADODB.Connection

With MiConexión
' Cursor en Cliente para poder usar un DataGrid
.CursorLocation = adUseClient
' Abro la conexión con la base de datos usando un DSN
.Open "Provider=SQLOLEDB;" & _
"Data Source=(local);" & _
"Initial Catalog=mermas;", "sa", ""

End With
' ----------------------------------------------------------
' Especifico qué información quiero de la base de datos
' ----------------------------------------------------------
Dim SQL As String

SQL = "SELECT id_prod, nom_prod" & vbCrLf & _
"From PRODUCTOS" & vbCrLf
' ----------------------------------------------------------
' Cargo el recordset con la información proveniente de la base de datos
' ----------------------------------------------------------
Dim rs As ADODB.Recordset

Set rs = MiConexión.Execute(SQL)
' ----------------------------------------------------------
' Muestro la información en el DataGrid
' ----------------------------------------------------------
Set DataGrid1.DataSource = rs
End Sub


[code/]
  #12 (permalink)  
Antiguo 23/02/2006, 11:19
 
Fecha de Ingreso: febrero-2006
Mensajes: 1
Antigüedad: 18 años, 2 meses
Puntos: 0
De acuerdo Enlazar A Datagrid

Cita:
Iniciado por netgame
necesito cargar en una grilla los datos que tengo en una tabla, para conectarme utilizo la siguiente conexion.

Dim cnn As New ADODB.Connection
Dim rec As New ADODB.Recordset
cnn.Open "Provider=SQLOLEDB;" & _
"Data Source=(local);" & _
"Initial Catalog=mermas;", "sa", ""
rec.Open "select * from PRODUCTOS", cnn, _
adOpenKeyset, adLockOptimistic

alguien podria echarme una manito.
OJALA TE SIRVA ESTE CODIGO...

Dim cnn as New ADODB.Connection
Dim rs as New ADODB.Recordset

Private Sub Form_Load()
' Linea de connexión a la BD

strSQL ="Select *from Productos"
rs.cursorLocation=AdUseClient
rs.Open strSQL,cnn, AdOpenStatic, AdLockReadOnly
set Datagrid1.Datasource=rs
End Sub

Ejecuta el Form
Suerte...
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 13:59.