Problemas con datagrid
Tengo un recordset con informacion, pero al asignar al data grid no me aparece nada, me podrian ayudar, estoy utilizando el siguiente codigo para signar los datos del rs al grid: set datagrid1.datasource = rs
Talvez sera mejor con flexgrid, o tendra que ver con el rs el rs lo tengo declarado asi:
rs.open "select...........",cn,adopenstatic,adlockreadonly,-1
Muchas gracias a quine me entienda.
Talvez sera mejor con flexgrid, o tendra que ver con el rs el rs lo tengo declarado asi:
rs.open "select...........",cn,adopenstatic,adlockreadonly,-1
Muchas gracias a quine me entienda.
yo he tratado bastante con el datagrid y es una mierda. lo que debes hacer el poner el open a keyset y te dejara.
suerte
suerte
Yo estoy trabajando con un datagrid,lo que tienes que haces es insertar un control adodc y luego en la pagina de propiedades del datagrid en recordsource poner el nombre dl control adodc.
Luego puedes ir asignándole distintas consultas al control y te aparecerán en la tabla.
Las consultas en SQL se las asignas al control adodc de la forma:
consultaEX = "SELECT * From Documentos WHERE Tipo='EX';"
Controladodc.RecordSource = consultaEX
Controladodc.Refresh
Luego puedes ir asignándole distintas consultas al control y te aparecerán en la tabla.
Las consultas en SQL se las asignas al control adodc de la forma:
consultaEX = "SELECT * From Documentos WHERE Tipo='EX';"
Controladodc.RecordSource = consultaEX
Controladodc.Refresh
integré todo lo que ví en este foro sobre el problema que todos tuvimos ;)... así que, en un formulario con un control Datagrid1, y un Command1, el código del formulario es el siguiente:
Option Explicit
Private Sub Command1_Click()
If db.State = adStateOpen Then
db.Close
End If
db.Open "DRIVER={Microsoft Access Driver (*.mdb)};dbq=" & App.Path & "emp01.mdb", , ""
If rs.State = adStateOpen Then
rs.Close
End If
rs.ActiveConnection = db
rs.CursorType = adOpenStatic
rs.Open "SELECT idmovinv FROM [movinv];"
If rs.RecordCount = 0 Then
rs.Close
Else
Set DataGrid1.DataSource = rs
DataGrid1.ReBind
End If
End Sub
funciona a la perfección.... cuestión de adaptarlo a la base de datos de cada quién.... pero aún tengo un problema (por lo cual caí a este foro)...
PUEDE ALGUIEN DECIRME POR QUÉ CARAJOS AL ABRIR UNA TABLA EN ACCESS (DESDE ACCESS) ABRE RAPIDISIMO???... Y POR QUÉ AL ABRIRLA CON ESTE CODIGO TARDA MAS DE 5 SEGUNDOS?... MIS PRUEBAS LAS HICE SOBRE UNA TABLA CON 307,200 REGISTROS... POR FAS, CUALQUIER AYUDA O ACLARACION, LA AGRADECERÉ ENORME....:D
Option Explicit
Private Sub Command1_Click()
If db.State = adStateOpen Then
db.Close
End If
db.Open "DRIVER={Microsoft Access Driver (*.mdb)};dbq=" & App.Path & "emp01.mdb", , ""
If rs.State = adStateOpen Then
rs.Close
End If
rs.ActiveConnection = db
rs.CursorType = adOpenStatic
rs.Open "SELECT idmovinv FROM [movinv];"
If rs.RecordCount = 0 Then
rs.Close
Else
Set DataGrid1.DataSource = rs
DataGrid1.ReBind
End If
End Sub
funciona a la perfección.... cuestión de adaptarlo a la base de datos de cada quién.... pero aún tengo un problema (por lo cual caí a este foro)...
PUEDE ALGUIEN DECIRME POR QUÉ CARAJOS AL ABRIR UNA TABLA EN ACCESS (DESDE ACCESS) ABRE RAPIDISIMO???... Y POR QUÉ AL ABRIRLA CON ESTE CODIGO TARDA MAS DE 5 SEGUNDOS?... MIS PRUEBAS LAS HICE SOBRE UNA TABLA CON 307,200 REGISTROS... POR FAS, CUALQUIER AYUDA O ACLARACION, LA AGRADECERÉ ENORME....:D
PRUEBA CON ESTO
sql = "SELECT ...... "
Set rs = New Recordset
rs.CursorLocation = adUseClient
rs.CursorType = adOpenDynamic
rs.LockType = adLockBatchOptimistic
rs.Open sql, cn
Set TUDATAGRID.DataSource = rs
sql = "SELECT ...... "
Set rs = New Recordset
rs.CursorLocation = adUseClient
rs.CursorType = adOpenDynamic
rs.LockType = adLockBatchOptimistic
rs.Open sql, cn
Set TUDATAGRID.DataSource = rs
Hola soy de Mexico, me ha servido mucho lo que han escrito aqui, sobre lo del aduserClient fue lo que me arreglo el mismo problema que tienen aqui, sin embargo, me di cuenta que no funciona mi datagrid si le quito el metodo Clone (que sirve para copiar el objeto completo a otro lugar):
' Del Lado del cliente
Tabla.CursorLocation = adUseClient
' Apertura del Recordset
Tabla.Open "Sentencia SQL", Conexion, adOpenDynamic, adLockOptimistic
' Aqui uso el metodo Clone.
Set DataGrid1.DataSource = Tabla.Clone
' Solo si deseas cerrar el recorset (no necesario)
Tabla.Close
Espero que con esto solucionen su problema los que no les funciona el datagrid.
' Del Lado del cliente
Tabla.CursorLocation = adUseClient
' Apertura del Recordset
Tabla.Open "Sentencia SQL", Conexion, adOpenDynamic, adLockOptimistic
' Aqui uso el metodo Clone.
Set DataGrid1.DataSource = Tabla.Clone
' Solo si deseas cerrar el recorset (no necesario)
Tabla.Close
Espero que con esto solucionen su problema los que no les funciona el datagrid.
ya probaste poner antes de rs.open?
rs.CursorLocation = adUserClient???
rs.CursorLocation = adUserClient???
solo tienes que definir el tipo de cursor de tipo cliente:
rs.cursorlocation=adusecliente
rs.cursorlocation=adusecliente
Hola bueno pues lei tu problema y pues hace poco me paso lo mismo , bueno la verdad es que cheque tu codigo y pues si vi que estaba mal .
Bueno este codigo es el que debes poner para poder poner el recultado del recordset a tu datagrid.
dim rec as new adodb recordset
dim cmd as new command
dim conexion as new adodb connection
Bueno aqui en la parte de conexion supongo que ya sabes como va...
Despues de declarar todo eso lo unico que debes hacer es poner
cmd.activeconnection = conexion (dependiendo la que hayas asignado)
cmd.commandtext= "select * from "tabla" "
cmd.execute
set rec = cmd.execute
Do while not rec.eof
set datagrid1.datasource = rec
rec.movenext
loop
Bueno eso es todo espero q te sirva
Hola amigo no se me puedas ayudar etoy desarollando una aplicacion en vb con base de datos sql, ya logramos ejecutar los sp a traves de los formularios, pero no he podido lograr que al ejecutar un sp que me devuelve una consulta en un recordset lo pueda montar una una grid, si em puedes ayudar yo te describo paso a paso lo que estoy haciendo
debes usar el siguiente codigo en el evento load o en cualquier otro lado eso depende si quieres usar un boton para actualizar o cargar tu datagrid
o cuando el formulario se carga
dim Cmdsql as string
If rs.State = adStateOpen Then
rs.Close
End If
Cmdsql = " select *" & _
' el & _ es un indicador de cambio de linea
"from Personal "
rs.ActiveConnection = cn
rs.CursorType = adOpenStatic
rs.Open Cmdsql
If rs.RecordCount = 0 Then
rs.Close
Else
Set DataGrid1.DataSource = rs
End If
o cuando el formulario se carga
dim Cmdsql as string
If rs.State = adStateOpen Then
rs.Close
End If
Cmdsql = " select *" & _
' el & _ es un indicador de cambio de linea
"from Personal "
rs.ActiveConnection = cn
rs.CursorType = adOpenStatic
rs.Open Cmdsql
If rs.RecordCount = 0 Then
rs.Close
Else
Set DataGrid1.DataSource = rs
End If
Que foro tan garra, todos aquí parecen una bola de principiantes que nomas 'intentan' programar
bueno son muchas las respuestas q te dieron la verdad q si puedes asignar desde un recordset, antes de abrir el recordset has lo siguiente para q te muestre la informacion
rsClientes.CursorLocation = adUseClient
rsClientes.Open SSQL, ConPuntos, adOpenForwardOnly, adLockReadOnly
Set dgFiltro.DataSource = rsClientes
ya como lo se abre o el tipo de bloquero es tu onda pero lo bueno es decir q el cursorlocation es del lado del cliente
espero y te sirva jeje
rsClientes.CursorLocation = adUseClient
rsClientes.Open SSQL, ConPuntos, adOpenForwardOnly, adLockReadOnly
Set dgFiltro.DataSource = rsClientes
ya como lo se abre o el tipo de bloquero es tu onda pero lo bueno es decir q el cursorlocation es del lado del cliente
espero y te sirva jeje
saludos,
estaba con el mismo problema y he probado varias de las soluciones k dais. El caso es que no keria usar ni controles data ni data enviroment, keria hacerlo a pelo, usease a codigo. Pues despues de probar y probar, komo me ha funcionado ha sido metiendo la linea de codigo k nuestro ultimo amigo ha dicho...esta es:
rs.CursorLocation=adUseClient
Por lo tanto, kedaria asi
rs.AciveConnection = cnn
rs.CursorLocation = adUseCLient
rs.open "SELECT * FROM tabla"
set Datagrid1.DataSource = rs
señores, con esas 4 lineas funciona, keria dar muuuuuuchisimas gracias, porque ya me tenia loko esto, me veia utilizando un control data, a los kuales detesto.
un saludete, cuidense
estaba con el mismo problema y he probado varias de las soluciones k dais. El caso es que no keria usar ni controles data ni data enviroment, keria hacerlo a pelo, usease a codigo. Pues despues de probar y probar, komo me ha funcionado ha sido metiendo la linea de codigo k nuestro ultimo amigo ha dicho...esta es:
rs.CursorLocation=adUseClient
Por lo tanto, kedaria asi
rs.AciveConnection = cnn
rs.CursorLocation = adUseCLient
rs.open "SELECT * FROM tabla"
set Datagrid1.DataSource = rs
señores, con esas 4 lineas funciona, keria dar muuuuuuchisimas gracias, porque ya me tenia loko esto, me veia utilizando un control data, a los kuales detesto.
un saludete, cuidense
debe ponerle antes.
rs.cursorlocation=adusecliente
luego recien hacer tu codigo normal.
este codigo hace que cree un buffer de memoria para alojar los registros en el datagrig
rs.cursorlocation=adusecliente
luego recien hacer tu codigo normal.
este codigo hace que cree un buffer de memoria para alojar los registros en el datagrig
Creo que no es datasource lo que usted debe de usar. Creo que la propiedad correcta es Recordsource. Pero podría estar equivocado puesto que no uso el dbgrid para nada (lo detesto!).
DBGrid es un control ActiveX que muestra una serie de filas y columnas que representan registros y campos de un objeto Recordset. Cuando asigne a la propiedad DataSource del control DBGrid un control Data, el control DBGrid se llenará automáticamente de datos y se establecerán automáticamente sus encabezados de columna a partir del conjunto de registros del control Data.
Al contrario que la mayoría de los controles enlazados a datos, el control DBGrid le permite ver y modificar varios registros simultáneamente.
FINALMENTE SE UBICA SOBRE EL CONTROL DBGRID Y DE
clic derecho y luego recuperar campos
Al contrario que la mayoría de los controles enlazados a datos, el control DBGrid le permite ver y modificar varios registros simultáneamente.
FINALMENTE SE UBICA SOBRE EL CONTROL DBGRID Y DE
clic derecho y luego recuperar campos
Probe casi todos los concejos que enviaron y no podia hacer funcionar el datagrig con un record set.
Finalmente con este codigo pude motrar los datos:
Dim strSQL As String
Set DB = New ADODB.Connection
DB.Open "Provider=SQLOLEDB;" & _
"User ID=sa;" & _
"Pwd=;" & _
"Initial Catalog=Sistematica;" & _
"Data Source=(local)"
Set RS = New ADODB.Recordset
strSQL = "Zonas"
RS.Open strSQL, _
DB, _
adOpenStatic, _
adLockOptimistic, _
adCmdTable
Set dgZonas.DataSource = RS
Finalmente con este codigo pude motrar los datos:
Dim strSQL As String
Set DB = New ADODB.Connection
DB.Open "Provider=SQLOLEDB;" & _
"User ID=sa;" & _
"Pwd=;" & _
"Initial Catalog=Sistematica;" & _
"Data Source=(local)"
Set RS = New ADODB.Recordset
strSQL = "Zonas"
RS.Open strSQL, _
DB, _
adOpenStatic, _
adLockOptimistic, _
adCmdTable
Set dgZonas.DataSource = RS
dataSource está bien para definir el origen del datagrid, lo que está mal es el tipo de objeto con el que lo estabas intentando definir. El correcto es un control adodc o una referencia a un dataenvironment. No un recordset
hola a todos
he leido lo que han escrito y creo que esta bien solo les falta actualizar el datagrid
datagrid1.rebind
espero les sirva adios
he leido lo que han escrito y creo que esta bien solo les falta actualizar el datagrid
datagrid1.rebind
espero les sirva adios
primero defines tu recordset
'defino recordSet
Set adoHorarios = New Recordset
despues
'lleno el recordSet
adoHorarios.Open "Select distinct Inicio from horarios", cnGloria, adOpenDynami, adLockOptimistic
despues
'8 Enlazo el datasource del control de horarios
Set Me.DataGridhorarios.DataSource = adochorarios
si no me equivoco el problema en lo tuyo es que no relacionas el recordset o lo igualas con el datagrid
espero y te pueda ayudar este pequeño ejemplo
saludos
gloria
'defino recordSet
Set adoHorarios = New Recordset
despues
'lleno el recordSet
adoHorarios.Open "Select distinct Inicio from horarios", cnGloria, adOpenDynami, adLockOptimistic
despues
'8 Enlazo el datasource del control de horarios
Set Me.DataGridhorarios.DataSource = adochorarios
si no me equivoco el problema en lo tuyo es que no relacionas el recordset o lo igualas con el datagrid
espero y te pueda ayudar este pequeño ejemplo
saludos
gloria
