Problema con CursorType en vista

01/11/2003 - 02:14 por Gregorio López Rojo | Informe spam
Hola a todos. Resulta que tengo una vista en una base de datos SQL 2000 la
cual utilizo para mostrar registros en un grid, TDBGrid específicamente, los
datos en el grid son editables, y para que este control pueda enlazarse a
los datos se requiere que el tipo de cursor del recordset sea KeySet. Esto
funciona perfectamente con muchos usuarios de la aplicación (cada quien con
diferente base de datos, pero con la misma estructura), excepto con
uno donde la ejecución de la vista regresa un recordset de tipo Dynamic con
lo que no se muestran los registros en el grid.

Este es el código de la vista:

SELECT
ElemFactExpUS.*,
Medidas.UMedida AS UMedida,
Paises.PaisCodigo AS PaisCodigo,
TiposMatExp.TipoMatExp AS TipoMatExp,
Empaques.Empaque AS Empaque,
Partes.PesoEmpaque AS PesoEmpaqueParte,
Empaques.Peso AS PesoPorEmpaque,
ElemFactExpUS.TotalPiezas * ElemFactExpUS.MPNonDut AS TotMPNonDut,
ElemFactExpUS.TotalPiezas * ElemFactExpUS.EmpNonDut AS TotEmpNonDut,
ElemFactExpUS.TotalPiezas * ElemFactExpUS.VADutiable AS TotVADutiable,
ElemFactExpUS.TotalPiezas * ElemFactExpUS.MPDutiable AS TotMPDutiable,
ElemFactExpUS.TotalPiezas * ElemFactExpUS.EmpDutiable AS TotEmpDutiable,
ElemFactExpUS.TotalPiezas * ElemFactExpUS.MPNonDut +
ElemFactExpUS.TotalPiezas * ElemFactExpUS.EmpNonDut AS TotNonDut,
ElemFactExpUS.TotalPiezas * ElemFactExpUS.MPDutiable +
ElemFactExpUS.TotalPiezas * ElemFactExpUS.EmpDutiable +
ElemFactExpUS.TotalPiezas
* ElemFactExpUS.VADutiable + ElemFactExpUS.TotalPiezas *
ElemFactExpUS.MODutiable AS TotDutiable,
ElemFactExpUS.TotalPiezas * ElemFactExpUS.MPNonDut +
ElemFactExpUS.TotalPiezas * ElemFactExpUS.EmpNonDut +
ElemFactExpUS.TotalPiezas
* ElemFactExpUS.MPDutiable + ElemFactExpUS.TotalPiezas *
ElemFactExpUS.EmpDutiable + ElemFactExpUS.TotalPiezas *
ElemFactExpUS.VADutiable
+ ElemFactExpUS.TotalPiezas * ElemFactExpUS.MODutiable AS TotCosto,
ElemFactExpUS.TotalPiezas * ElemFactExpUS.MODutiable AS TotMODutiable,
Aranceles.Fraccion AS ArancelUS,
Aranceles_1.Fraccion AS ArancelMx,
Aranceles_2.Fraccion AS ArancelAlt,
Partes.ipEmpaque AS ipEmpaqueParte,
Subtipos.DescEsp AS Subtipo,
ElemFactExpUS.TotalPiezas * ElemFactExpUS.FactConv AS TotalPiezas2
FROM
Partes INNER JOIN
Subtipos ON Partes.idSubtipo = Subtipos.idSubtipo INNER JOIN
ElemFactExpUS LEFT OUTER JOIN
Empaques ON ElemFactExpUS.ipEmpaque = Empaques.idEmpaque LEFT OUTER
JOIN TiposMatExp ON ElemFactExpUS.ipTipoMatExp TiposMatExp.idTipoMatExp LEFT OUTER JOIN Aranceles ON
ElemFactExpUS.ipArancelUS = Aranceles.idArancel LEFT
OUTER JOIN Aranceles Aranceles_1 ON ElemFactExpUS.ipArancelMX Aranceles_1.idArancel INNER JOIN
Medidas ON ElemFactExpUS.idMedida = Medidas.idMedidas INNER JOIN
Paises ON ElemFactExpUS.idPais = Paises.idPais LEFT OUTER JOIN
Aranceles Aranceles_2 ON ElemFactExpUS.idArancelAlt Aranceles_2.idArancel ON Partes.idPartes = ElemFactExpUS.ipPartes

Alguien sabe porque razón el cursor del recordset se establece a Dynamic aún
cuando se solicite que sea Keyset?

Saludos y gracias anticipadas por las respuestas.

Preguntas similare

Leer las respuestas

#1 Javier Loria
01/11/2003 - 10:22 | Informe spam
Hola Gregorio:
No soy un experto en cursores, pero si es tipo KEYSET se asume que
existe una llave unica que identifica las filas, no veo como SQL pueda
identificar los Identificadores de esta consulta y por ende asumo que el
cliente le hace "UPGRADE" al nivel siguiente de cursor. Solo una "teoria".
Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
Gregorio López Rojo escribio:
Hola a todos. Resulta que tengo una vista en una base de datos SQL
2000 la cual utilizo para mostrar registros en un grid, TDBGrid
específicamente, los datos en el grid son editables, y para que este
control pueda enlazarse a los datos se requiere que el tipo de cursor
del recordset sea KeySet. Esto funciona perfectamente con muchos
usuarios de la aplicación (cada quien con diferente base de datos,
pero con la misma estructura), excepto con
uno donde la ejecución de la vista regresa un recordset de tipo
Dynamic con lo que no se muestran los registros en el grid.

Este es el código de la vista:

SELECT
ElemFactExpUS.*,
Medidas.UMedida AS UMedida,
Paises.PaisCodigo AS PaisCodigo,
TiposMatExp.TipoMatExp AS TipoMatExp,
Empaques.Empaque AS Empaque,
Partes.PesoEmpaque AS PesoEmpaqueParte,
Empaques.Peso AS PesoPorEmpaque,
ElemFactExpUS.TotalPiezas * ElemFactExpUS.MPNonDut AS TotMPNonDut,
ElemFactExpUS.TotalPiezas * ElemFactExpUS.EmpNonDut AS
TotEmpNonDut, ElemFactExpUS.TotalPiezas * ElemFactExpUS.VADutiable
AS TotVADutiable, ElemFactExpUS.TotalPiezas *
ElemFactExpUS.MPDutiable AS TotMPDutiable,
ElemFactExpUS.TotalPiezas * ElemFactExpUS.EmpDutiable AS
TotEmpDutiable, ElemFactExpUS.TotalPiezas * ElemFactExpUS.MPNonDut
+ ElemFactExpUS.TotalPiezas * ElemFactExpUS.EmpNonDut AS
TotNonDut, ElemFactExpUS.TotalPiezas * ElemFactExpUS.MPDutiable +
ElemFactExpUS.TotalPiezas * ElemFactExpUS.EmpDutiable +
ElemFactExpUS.TotalPiezas * ElemFactExpUS.VADutiable +
ElemFactExpUS.TotalPiezas * ElemFactExpUS.MODutiable AS
TotDutiable, ElemFactExpUS.TotalPiezas * ElemFactExpUS.MPNonDut +
ElemFactExpUS.TotalPiezas * ElemFactExpUS.EmpNonDut +
ElemFactExpUS.TotalPiezas
* ElemFactExpUS.MPDutiable + ElemFactExpUS.TotalPiezas *
ElemFactExpUS.EmpDutiable + ElemFactExpUS.TotalPiezas *
ElemFactExpUS.VADutiable
+ ElemFactExpUS.TotalPiezas * ElemFactExpUS.MODutiable AS
TotCosto, ElemFactExpUS.TotalPiezas * ElemFactExpUS.MODutiable AS
TotMODutiable, Aranceles.Fraccion AS ArancelUS,
Aranceles_1.Fraccion AS ArancelMx,
Aranceles_2.Fraccion AS ArancelAlt,
Partes.ipEmpaque AS ipEmpaqueParte,
Subtipos.DescEsp AS Subtipo,
ElemFactExpUS.TotalPiezas * ElemFactExpUS.FactConv AS TotalPiezas2
FROM
Partes INNER JOIN
Subtipos ON Partes.idSubtipo = Subtipos.idSubtipo INNER JOIN
ElemFactExpUS LEFT OUTER JOIN
Empaques ON ElemFactExpUS.ipEmpaque = Empaques.idEmpaque LEFT
OUTER JOIN TiposMatExp ON ElemFactExpUS.ipTipoMatExp > TiposMatExp.idTipoMatExp LEFT OUTER JOIN Aranceles ON
ElemFactExpUS.ipArancelUS = Aranceles.idArancel LEFT
OUTER JOIN Aranceles Aranceles_1 ON ElemFactExpUS.ipArancelMX > Aranceles_1.idArancel INNER JOIN
Medidas ON ElemFactExpUS.idMedida = Medidas.idMedidas INNER JOIN
Paises ON ElemFactExpUS.idPais = Paises.idPais LEFT OUTER JOIN
Aranceles Aranceles_2 ON ElemFactExpUS.idArancelAlt > Aranceles_2.idArancel ON Partes.idPartes > ElemFactExpUS.ipPartes

Alguien sabe porque razón el cursor del recordset se establece a
Dynamic aún cuando se solicite que sea Keyset?

Saludos y gracias anticipadas por las respuestas.
Respuesta Responder a este mensaje
#2 Gregorio López Rojo
01/11/2003 - 11:12 | Informe spam
Hola Javier, efectivamente, en la tabla principal de la vista, por alguna
razón el campo que debía ser la llave primaria no estaba como tal, al
definirlo se arregló el problema, muchas gracias por la orientación.

Saludos.

"Javier Loria" wrote in message
news:
Hola Gregorio:
No soy un experto en cursores, pero si es tipo KEYSET se asume que
existe una llave unica que identifica las filas, no veo como SQL pueda
identificar los Identificadores de esta consulta y por ende asumo que el
cliente le hace "UPGRADE" al nivel siguiente de cursor. Solo una "teoria".
Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
Gregorio López Rojo escribio:
> Hola a todos. Resulta que tengo una vista en una base de datos SQL
> 2000 la cual utilizo para mostrar registros en un grid, TDBGrid
> específicamente, los datos en el grid son editables, y para que este
> control pueda enlazarse a los datos se requiere que el tipo de cursor
> del recordset sea KeySet. Esto funciona perfectamente con muchos
> usuarios de la aplicación (cada quien con diferente base de datos,
> pero con la misma estructura), excepto con
> uno donde la ejecución de la vista regresa un recordset de tipo
> Dynamic con lo que no se muestran los registros en el grid.
>
> Este es el código de la vista:
>
> SELECT
> ElemFactExpUS.*,
> Medidas.UMedida AS UMedida,
> Paises.PaisCodigo AS PaisCodigo,
> TiposMatExp.TipoMatExp AS TipoMatExp,
> Empaques.Empaque AS Empaque,
> Partes.PesoEmpaque AS PesoEmpaqueParte,
> Empaques.Peso AS PesoPorEmpaque,
> ElemFactExpUS.TotalPiezas * ElemFactExpUS.MPNonDut AS TotMPNonDut,
> ElemFactExpUS.TotalPiezas * ElemFactExpUS.EmpNonDut AS
> TotEmpNonDut, ElemFactExpUS.TotalPiezas * ElemFactExpUS.VADutiable
> AS TotVADutiable, ElemFactExpUS.TotalPiezas *
> ElemFactExpUS.MPDutiable AS TotMPDutiable,
> ElemFactExpUS.TotalPiezas * ElemFactExpUS.EmpDutiable AS
> TotEmpDutiable, ElemFactExpUS.TotalPiezas * ElemFactExpUS.MPNonDut
> + ElemFactExpUS.TotalPiezas * ElemFactExpUS.EmpNonDut AS
> TotNonDut, ElemFactExpUS.TotalPiezas * ElemFactExpUS.MPDutiable +
> ElemFactExpUS.TotalPiezas * ElemFactExpUS.EmpDutiable +
> ElemFactExpUS.TotalPiezas * ElemFactExpUS.VADutiable +
> ElemFactExpUS.TotalPiezas * ElemFactExpUS.MODutiable AS
> TotDutiable, ElemFactExpUS.TotalPiezas * ElemFactExpUS.MPNonDut +
> ElemFactExpUS.TotalPiezas * ElemFactExpUS.EmpNonDut +
> ElemFactExpUS.TotalPiezas
> * ElemFactExpUS.MPDutiable + ElemFactExpUS.TotalPiezas *
> ElemFactExpUS.EmpDutiable + ElemFactExpUS.TotalPiezas *
> ElemFactExpUS.VADutiable
> + ElemFactExpUS.TotalPiezas * ElemFactExpUS.MODutiable AS
> TotCosto, ElemFactExpUS.TotalPiezas * ElemFactExpUS.MODutiable AS
> TotMODutiable, Aranceles.Fraccion AS ArancelUS,
> Aranceles_1.Fraccion AS ArancelMx,
> Aranceles_2.Fraccion AS ArancelAlt,
> Partes.ipEmpaque AS ipEmpaqueParte,
> Subtipos.DescEsp AS Subtipo,
> ElemFactExpUS.TotalPiezas * ElemFactExpUS.FactConv AS TotalPiezas2
> FROM
> Partes INNER JOIN
> Subtipos ON Partes.idSubtipo = Subtipos.idSubtipo INNER JOIN
> ElemFactExpUS LEFT OUTER JOIN
> Empaques ON ElemFactExpUS.ipEmpaque = Empaques.idEmpaque LEFT
> OUTER JOIN TiposMatExp ON ElemFactExpUS.ipTipoMatExp > > TiposMatExp.idTipoMatExp LEFT OUTER JOIN Aranceles ON
> ElemFactExpUS.ipArancelUS = Aranceles.idArancel LEFT
> OUTER JOIN Aranceles Aranceles_1 ON ElemFactExpUS.ipArancelMX > > Aranceles_1.idArancel INNER JOIN
> Medidas ON ElemFactExpUS.idMedida = Medidas.idMedidas INNER JOIN
> Paises ON ElemFactExpUS.idPais = Paises.idPais LEFT OUTER JOIN
> Aranceles Aranceles_2 ON ElemFactExpUS.idArancelAlt > > Aranceles_2.idArancel ON Partes.idPartes > > ElemFactExpUS.ipPartes
>
> Alguien sabe porque razón el cursor del recordset se establece a
> Dynamic aún cuando se solicite que sea Keyset?
>
> Saludos y gracias anticipadas por las respuestas.


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida