Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Visual Basic clásico (http://www.forosdelweb.com/f69/)
-   -   Ayuda con datagrid (http://www.forosdelweb.com/f69/ayuda-con-datagrid-372332/)

netgame 19/02/2006 13:14

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.

jc_moty 19/02/2006 22:05

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 :si:
Saludos :adios:

netgame 20/02/2006 05:45

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


jrp01 20/02/2006 08:32

en que parte asignas el recordset al datagrid?
Set DataGrid1.DataSource = rec

netgame 22/02/2006 06:42

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

jrp01 22/02/2006 08:29

En que parte del programa te marca el error? al asigar el recordset al datagrid?

netgame 22/02/2006 12:13

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

jrp01 22/02/2006 12:34

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

netgame 22/02/2006 12:39

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


jrp01 22/02/2006 12:42

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

netgame 22/02/2006 13:29

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/]

Roy666 23/02/2006 11:19

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...


La zona horaria es GMT -6. Ahora son las 09:24.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.