consulta sobre recordset y grid

21/07/2003 - 23:35 por Carlos Mauricio Cevallos | Informe spam
alguien me podria ayudar a resolver el siguiente problema:

StrSql = "DELETE from m_usuarios"
StrSql = StrSql & " Where cod_usuario= '" &
frmManUsuarios.dtgUsuarios.Columns(0) & "' "
Set rcsUsuarios = New ADODB.Recordset
rcsUsuarios.Open StrSql, acnProduccion, adOpenDynamic,
adLockOptimistic, adCmdText


StrSql = "select * from m_usuarios"
Set rcsUsuarios = New ADODB.Recordset
rcsUsuarios.Open StrSql, acnProduccion, adOpenDynamic,
adLockOptimistic, adCmdText

'''' en esta linea me da el error "el conjunto de filas no
admite marcadores"
Set dtgUsuarios.DataSource = rcsUsuarios

elimino el registro y luego al querer asignarle un recordset al datagrid me
da error.

Preguntas similare

Leer las respuestas

#1 Sashka
22/07/2003 - 01:06 | Informe spam
Es que no estás eliminando nada.. si tienes una sentencia que empieza
por DELETE... lo que tienes es que ejecutarla en lugar de abrir un
recordset.

StrSql = "DELETE from m_usuarios"
StrSql = StrSql & " Where cod_usuario= '" &
frmManUsuarios.dtgUsuarios.Columns(0) & "' "
acnProduccion.execute strSQL


Sashka

"Carlos Mauricio Cevallos" escribió en el
mensaje news:
alguien me podria ayudar a resolver el siguiente problema:

StrSql = "DELETE from m_usuarios"
StrSql = StrSql & " Where cod_usuario= '" &
frmManUsuarios.dtgUsuarios.Columns(0) & "' "
Set rcsUsuarios = New ADODB.Recordset
rcsUsuarios.Open StrSql, acnProduccion, adOpenDynamic,
adLockOptimistic, adCmdText


StrSql = "select * from m_usuarios"
Set rcsUsuarios = New ADODB.Recordset
rcsUsuarios.Open StrSql, acnProduccion, adOpenDynamic,
adLockOptimistic, adCmdText

'''' en esta linea me da el error "el conjunto de filas no
admite marcadores"
Set dtgUsuarios.DataSource = rcsUsuarios

elimino el registro y luego al querer asignarle un recordset al datagrid


me
da error.




Respuesta Responder a este mensaje
#2 Softjaen
22/07/2003 - 01:26 | Informe spam
"Carlos Mauricio Cevallos" escribió:

alguien me podria ayudar a resolver el siguiente problema:

'''' en esta linea me da el error "el conjunto de filas no
admite marcadores"
Set dtgUsuarios.DataSource = rcsUsuarios

elimino el registro y luego al querer asignarle un recordset
al datagrid me da error.




Hola, Carlos:

Al utilizar un DataGrid para mostrar los resultados del conjunto de filas
(Recordset), necesitas utilizar cursores del lado cliente, por tanto, en el
objeto «Connection», y antes de abrir la conexión, establece la propiedad
«CursorLocation» a «adUseClient»:

acnProduccion.CursorLocation = adUseClient

Un saludo.

Enrique Martínez
[MS MVP - VB]
Respuesta Responder a este mensaje
#3 Victor Koch
22/07/2003 - 15:56 | Informe spam
Acá hay dos errores, no podes abrir un recordset con sentencias DELETE ya
que el DELETE no devuelve recordset, tendrías que hacer:

StrSql = "DELETE from m_usuarios"
StrSql = StrSql & " Where cod_usuario= '" &
frmManUsuarios.dtgUsuarios.Columns(0) & "' "
acnProduccion.Execute StrSql, , adCmdText

El segundo error se soluciona asi

StrSql = "select * from m_usuarios"
Set rcsUsuarios = New ADODB.Recordset
rcsUsuarios.CursorLocation = adUseClient
rcsUsuarios.Open StrSql, acnProduccion, adOpenDynamic,
adLockOptimistic, adCmdText
Set dtgUsuarios.DataSource = rcsUsuarios

Un saludo, Víctor Koch.


"Carlos Mauricio Cevallos" escribió en el
mensaje news:
alguien me podria ayudar a resolver el siguiente problema:

StrSql = "DELETE from m_usuarios"
StrSql = StrSql & " Where cod_usuario= '" &
frmManUsuarios.dtgUsuarios.Columns(0) & "' "
Set rcsUsuarios = New ADODB.Recordset
rcsUsuarios.Open StrSql, acnProduccion, adOpenDynamic,
adLockOptimistic, adCmdText


StrSql = "select * from m_usuarios"
Set rcsUsuarios = New ADODB.Recordset
rcsUsuarios.Open StrSql, acnProduccion, adOpenDynamic,
adLockOptimistic, adCmdText

'''' en esta linea me da el error "el conjunto de filas no
admite marcadores"
Set dtgUsuarios.DataSource = rcsUsuarios

elimino el registro y luego al querer asignarle un recordset al datagrid


me
da error.




Respuesta Responder a este mensaje
#4 Softjaen
23/07/2003 - 06:39 | Informe spam
"Victor Koch" escribió:

Acá hay dos errores, no podes abrir un recordset con sentencias DELETE ya
que el DELETE no devuelve recordset, tendrías que hacer:

StrSql = "DELETE from m_usuarios"
StrSql = StrSql & " Where cod_usuario= '" &
frmManUsuarios.dtgUsuarios.Columns(0) & "' "
acnProduccion.Execute StrSql, , adCmdText




Hola, Victor:

Más que abrir un objeto «Recordset», que obviamente y como bien dices, no le
va a devolver ningún registro, con dicho código lo que está haciendo Carlos
Mauricio es ejecutar una consulta SQL de eliminación. En lugar de utilizar
el método «Execute» del objeto «Connection», utiliza el método «Open» del
objeto «Recordset» para ejecutar la instrucción SQL «Delete»:

StrSql = "DELETE from m_usuarios"
StrSql = StrSql & " Where cod_usuario= '" & _
frmManUsuarios.dtgUsuarios.Columns(0) & " '"

Set rcsUsuarios = New ADODB.Recordset

' No se abre el Recordset. Solamente se
' ejecuta la consulta de eliminación,
rcsUsuarios.Open StrSql, acnProduccion, adOpenDynamic, _
adLockOptimistic, adCmdText

Al estar utilizando la propiedad «Columns» del control «DataGrid», me
imagino que previamente tendrá éste control enlazado a un control de datos
de ADO, o a otro variable objeto tipo «ADODB.Recordset», porque de lo
contrario obtendrá el error 7005 (Conjunto de filas no disponible) cuando
intente "abrir" el objeto «Recordset», ya que con dicha consulta SQL se
eliminará el registro de la tabla «m_usuarios» cuyo «cod_usuario»
corresponda con el valor de la primera columna del «DataGrid», que me
imagino será siempre el primer registro de la tabla.

Como con dicha sentencia no se abre el objeto «Recordset», éste lo abre
después con una consulta SQL de selección:

StrSql = "select * from m_usuarios"

Set rcsUsuarios = New ADODB.Recordset

rcsUsuarios.Open StrSql, acnProduccion, adOpenDynamic, _
adLockOptimistic, adCmdText

El segundo error se soluciona asi

StrSql = "select * from m_usuarios"
Set rcsUsuarios = New ADODB.Recordset
rcsUsuarios.CursorLocation = adUseClient
rcsUsuarios.Open StrSql, acnProduccion, adOpenDynamic,
adLockOptimistic, adCmdText
Set dtgUsuarios.DataSource = rcsUsuarios




Tal y como Carlos Mauricio tiene escrito el código, la propiedad
«CursorLocation» deberá de especificarla en el objeto «Connection», porque
si la especifica en el objeto «Recordset», continuará recibiendo el error
número 7004: El conjunto de filas no admite marcadores.

Un saludo.

Enrique Martínez
[MS MVP - VB]
Respuesta Responder a este mensaje
#5 Victor Koch
23/07/2003 - 14:47 | Informe spam
Bueno, empezaron las discusiones, jeje, con respecto al segundo error, el
CursorLocation del objeto connection será utilizado siempre y cuando no se
especifique implícitamente la asignación a esta propiedad del recordset, yo
tengo, en mis aplicaciones, objetos connection con cursores del lado del
server y abro recordset con cursores del lado del cliente o server sobre el
mismo objeto connection, de hecho para abrir un recordset uso el siguiente
código, el cual me da mas control o me permite mas independencia de las
propiedades del objeto connection.

Dim TB As adodb.recordset
Set TB = New ADODB.Recordset
With TB
.ActiveConnection = Cnn
.CursorLocation = adUseClient o adUseServer
.CursorType = adOpenStatic o adOpenDynamic o adOpenKeyset
.LockType = adLockOptimistic o adLockReadOnly
.Open SQL, , , , adCmdText
End With

Esto que te envío es un ejemplo, yo uso mas propiedades que ahora no vienen
al caso, por supuesto que en este ejemplo hay cosas que se contradicen, por
ejemplo abrir un recordset con adOpenStatic no podría asignarce
adLockOptimistic, es solo un ejemplo de algunas combinaciones posibles.
Fijate el orden de asignación a las propiedades, esto también tiene su
lógica.
Particularmente yo no uso recordset actualizables, los recordset que abro
son solo de lectura.

Un saludo, Víctor Koch.


"Softjaen" @yahoo.es> escribió en el mensaje
news:

"Victor Koch" escribió:

> Acá hay dos errores, no podes abrir un recordset con sentencias DELETE


ya
> que el DELETE no devuelve recordset, tendrías que hacer:
>
> StrSql = "DELETE from m_usuarios"
> StrSql = StrSql & " Where cod_usuario= '" &
> frmManUsuarios.dtgUsuarios.Columns(0) & "' "
> acnProduccion.Execute StrSql, , adCmdText
>

Hola, Victor:

Más que abrir un objeto «Recordset», que obviamente y como bien dices, no


le
va a devolver ningún registro, con dicho código lo que está haciendo


Carlos
Mauricio es ejecutar una consulta SQL de eliminación. En lugar de utilizar
el método «Execute» del objeto «Connection», utiliza el método «Open» del
objeto «Recordset» para ejecutar la instrucción SQL «Delete»:

StrSql = "DELETE from m_usuarios"
StrSql = StrSql & " Where cod_usuario= '" & _
frmManUsuarios.dtgUsuarios.Columns(0) & " '"

Set rcsUsuarios = New ADODB.Recordset

' No se abre el Recordset. Solamente se
' ejecuta la consulta de eliminación,
rcsUsuarios.Open StrSql, acnProduccion, adOpenDynamic, _
adLockOptimistic, adCmdText

Al estar utilizando la propiedad «Columns» del control «DataGrid», me
imagino que previamente tendrá éste control enlazado a un control de datos
de ADO, o a otro variable objeto tipo «ADODB.Recordset», porque de lo
contrario obtendrá el error 7005 (Conjunto de filas no disponible) cuando
intente "abrir" el objeto «Recordset», ya que con dicha consulta SQL se
eliminará el registro de la tabla «m_usuarios» cuyo «cod_usuario»
corresponda con el valor de la primera columna del «DataGrid», que me
imagino será siempre el primer registro de la tabla.

Como con dicha sentencia no se abre el objeto «Recordset», éste lo abre
después con una consulta SQL de selección:

StrSql = "select * from m_usuarios"

Set rcsUsuarios = New ADODB.Recordset

rcsUsuarios.Open StrSql, acnProduccion, adOpenDynamic, _
adLockOptimistic, adCmdText

> El segundo error se soluciona asi
>
> StrSql = "select * from m_usuarios"
> Set rcsUsuarios = New ADODB.Recordset
> rcsUsuarios.CursorLocation = adUseClient
> rcsUsuarios.Open StrSql, acnProduccion, adOpenDynamic,
> adLockOptimistic, adCmdText
> Set dtgUsuarios.DataSource = rcsUsuarios
>

Tal y como Carlos Mauricio tiene escrito el código, la propiedad
«CursorLocation» deberá de especificarla en el objeto «Connection», porque
si la especifica en el objeto «Recordset», continuará recibiendo el error
número 7004: El conjunto de filas no admite marcadores.

Un saludo.

Enrique Martínez
[MS MVP - VB]






Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida