[gufa] Vista en SQL - RESUELTO ++

2007-03-23 Por tema José Paez
Hola Rodrigo

Si vas a trabajar con CursorAdapter, sugiero que crees una libreria de acceso a 
datos:
Ej: 
AccesoDatos.vcx

Dentro de la misma, crea una subclase de CursorAdapter.  
Ej: _CA

Aqui configuras todas las propiedades que consideres que vas a utilizar en 
todos los accesos a datos:

StringConnect= driver={sql 
server};server=MiServer;database=MiBaseDatos;uid=MiUsuario;pwd=MiContraseña
BufferMode   = 3
FetchAsNeed  = .F.
DataSourceType   = ODBC
MapBinary= .T.
MapVarChar   = .T.
Prepared = .T.
RefreshTimeStamp = .F.
WhereType= 3
BreakOnError = .T.
SendUpdate   = .T.

Si usas TimeStamp

RefreshTimeStamp = .T.
WhereType= 4  
InsertCmdRefreshCmd = SELECT @@IDENTITY, @@DBTS
InsertCmdRefreshFieldList   = MiCampoIdentity, MiCampoTimestamp
TimeStampFieldList  = MiCampoTimestamp
UpdateCmdRefreshCmd = SELECT @@DBTS
UpdateCmdRefreshFieldList   = MiCampoTimestamp

Incorpora el fragmento de codigo que envie en un mail anterior a esta clase.

Luego cada vez que necesites acceder a datos crea una subclase basada en _CA 
y solo configura con el generador las propiedades:

Alias
CursorSchema
KeyFieldList
SelectCmd
Tables
UpdatableFieldList
UpdatableNameList

Dentro de tu formulario o Informe agrega tu clase cursoradapter.

Bueno, actualmente trabajo con este acceso a datos a tablas en SQL Server que 
tienen unos 3 millones de registros y...  Funciona !!! ;-)

Saludos

José Paez
Córdoba - Argentina

PD: Esto que investigue y que actualmente lo utilizo en grandes sistemas, se lo 
agradezco a nuestro gran amigo Antonio Castaño quien me dio la idea de 
Objetos de Datos Reusables

  - Original Message - 
  From: R. Rodrigo 
  To: gufa List Member 
  Sent: Thursday, March 22, 2007 8:04 PM
  Subject: [gufa] Vista en SQL - RESUELTO


Gracias oscar por tu respuesta, pero te comento, lo que estoy haciendo 
es en un form y mediante el ENTORNO DATOS/GENERADOR, creo un cursoradapter, 
defino todos los parametros, pero el problema es que al ejecutar, siempre me 
trae todos los datos, y si la table de la base SQL tiene muchos registros 
(180.000) tarda mucho en cargarlos cuando despues yo solo voy a usar un solo 
registro.

Estro anterior es lo que  quiero hacer, es decir que al acceder a SQL 
solo traiga el registro que yo le indico, no que traiga todos y despues yo 
selecciono el que quiero.


Un saludo

---Mensaje original---

De: oscar.zarate
Fecha: 22/03/2007 23:58:16
Para: gufa List Member
Asunto: [gufa] Vista en SQL - RESUELTO

Rodrigo,

Si yo no me equivoco, lo que queres hacer es una vista parametrizada
(como se hacia hace ... 10 anios Antonio? :-)
La idea es la siguiente:

El codigo de tu vista es:
SELECT Table1.a, Table1.b;
  FROM ;
 data1!table1;
  WHERE  Table1.a = ( ?lcPar )

Donde lcPar es el parametro. Si abris la vista, te aparece un cuadro de
dialogo (que feo que escribo) pidiendote el valor del parametro, pero si
le asignas a lcPar un valor antes de abrirla, no te abre ese Input.

Entonces, en tu codigo:
haces ... en el Load: Use View1 NODATA (no trae ningun dato)
Cuando lo necesitas: haces lcPar = 123 o lo que sea y REQUERY(View1)


Eso se hacia hace mucho ... ahora seria mejor que uses un CursorAdapter,
pero ...

Espero no haber ... hecho pipi afuero del tarro :-)


SaludOZ
  |\_/|
  (.. )
  - /


-Original Message-
From: R. Rodrigo [EMAIL PROTECTED]
To: gufa List Member  gufa@mug.org.ar
Date: Thu, 22 Mar 2007 16:23:46 +0100 (Hora estándar romance)
Subject: [gufa] Vista en SQL - RESUELTO

 Gracias a todos por contestar mi consulta.



 Ya lo solucione tomando un poco de lo que cada uno me dijeron. No se 
si
 sera
 la forma más ortodoxa, pero funciona al cien por cien y el tiempo de
 respuesta es insignificante.



 Lo comento a continución por si le sirve a alguien.



 1 - En el servidor SQL he creado una tabla a la que llamo VARIABLES
 donde
 defino los campo que me interesan, en mi caso solo necesito 5 
variables
 (var1,vae2,etc.)

 En esta tabla que solo tiene un registro, guardo mediante el form de
 la
 aplicación la variable de los registros que me quiero traer
 (lote,dni,codigo
 etc.)



 2 - En el servidor SQL creo la siguiente vista:



 CREATE VIEW dbo.zz_stocks_lotes_cabecera

 AS

 SELECT dbo.lotes_cabecera.*

 FROM   dbo.lotes_cabecera  inner join variables on
 lote_interno=var1



 Donde seleccione los registros que cumplen la condición
 lote_interno=var1
 (var1 es

[gufa] Vista en SQL

2007-03-23 Por tema Claudio Alberto López
Que tal José. 
Alguna vez intenté implementar una solución idéntica a la tuya para filtrar mi 
clase personalizada de CA, pero nunca conseguí el resultado esperado trabajando 
sobre el parámetro cSelectCmd del evento BeforeCursorFill. Lo solucione 
agregando una propiedad a mi CA donde guardo el valor de la propiedad SelectCmd 
para después agregarle el where a la misma y llamar al CursorFill.
Ahora que vi tu respuesta, intenté probar tu ejemplo y ohh casualidad, tampoco 
me funciona!!! No filtra, no ordena, no agrupa, nada de nada. El mismo 
inconveniente que tuve anteriormente.
Tenés alguna idea sobre que puede estar pasando??

Claudio López

- Original Message - 
  From: José Paez 
  To: gufa List Member 
  Sent: Thursday, March 22, 2007 12:28 PM
  Subject: [gufa] Vista en SQL



  Hola Rodrigo

  Te paso este fragmento de código para que veas como trabajo con mi subclase 
basada en CursorAdapter,
  Espero que te sea de utilidad.

  Saludos

  José Paez
  Córdoba - Argentina


  [1] Al mismo le agregue tres propiedades 

  CriterioFiltro
  CriterioAgrupamiento
  CriterioOrdenamiento

  [2] Modifique el procedimiento BeforeCursorFill

  PROCEDURE BeforeCursorFill
  LPARAMETERS luseCursorSchema, lNoDataOnLoad, cSelectCmd

  If not Empty( this.CriterioFiltro ) then
  cSelectCmd = cSelectCmd +  WHERE  + this.CriterioFiltro
  EndIf

  If not Empty( this.CriterioAgrupamiento ) then
  cSelectCmd = cSelectCmd +  GROUP BY  + this.CriterioAgrupamiento
  EndIf

  If not Empty( this.CriterioOrdenamiento) then
  cSelectCmd = cSelectCmd +  ORDER BY  + this.CriterioOrdenamiento
  endif
  ENDPROC


  [3] Segun sea el caso, cuando no deseo traer datos le configuro la propiedad

  NoData = T.


  [4] Para obtener datos y ordernarlos lo hago de esta manera en mi 
procedimiento:

  Local;
   llRetVal  As Boolean,;
   loErrHandler As Exception

  llRetVal = F.

  Local;
   lnPeriodo  As Integer

  lnPeriodo = 2006

  Try
   With Thisform.DataEnvironment.Ventas 
.Nodata = F.
.CriterioFiltro= Periodo = ?lnPeriodo
.CriterioOrdenamiento  = Fecha, Clientes

llRetVal = CursorFill()

.CriterioFiltro= 
.CriterioOrdenamiento  = 
   Endwith

  Catch To loErrHandler
   This.Return_Error( loErrHandler ) -- Este es mi manejador de 
excepciones
  Endtry

  Return llRetVal










- Original Message - 
From: R. Rodrigo 
To: gufa List Member 
Sent: Thursday, March 22, 2007 10:58 AM
Subject: [gufa] Vista en SQL


  Gracias por contestar, pero te comento, el problema es el siguiente:

  En el entorno de datos, y mediante el generedor, he creado un 
conexión a SQL, defino los parametros, y puedo acceder a los datos SQL como si 
de una tabla se tratase sin ningun problema.

  El problema es que al iniciar el form, el cursoradapter se trae todos 
los datos y relentiza bastante si son muchos, a conitnuación selecciona el lote 
del producto y a partir de aqui todo va bien, ya no se hace lento.

  Si en el generador le marco que INICALMENTE NO CARGUE DATOS, que 
sería lo logico, y luego seleccionar el lote que nos interesa, entonces no 
consigo traer ningun datos.

  Ahora bien, si el SELECT anterior que lo alojo en sel SQ y selecciono 
por constante el lote del producto, la respuesta es instantanea, pero solo me 
sirve para ese producto.

  Es por esto que buscaba la forma de en el SERVIDOR SQL, aloja un 
select que la condicion WHERE fuera contra un avariable de memoria, y en la 
aplicación según le indique el valor a esta variable fuera trayendo los datos 
correspondientes.

  Espero haberme explicado un poco más

  Gracias

  Un saludo
  R. Rodrigo


  ---Mensaje original---

  De: Omar Bellio
  Fecha: 22/03/2007 13:44:43
  Para: gufa List Member
  Asunto: [gufa] Vista en SQL

  No, yo lo que hago es filtrar el select cuando uso la vista

  Select * (es mejor poner los campos, aunque sean todos) from 
zz_stocks_lotes_producto where Lote_Interno = '060612011'



--
  De: gufa@mug.org.ar [mailto:[EMAIL PROTECTED] En nombre de R. Rodrigo
  Enviado el: Thursday, March 22, 2007 7:36 AM
  Para: gufa List Member
  Asunto: [gufa] Vista en SQL


Amigos, alguien puede decirme lo siguiente:

En una vista en SQL de lado del servidor :

CREATE VIEW dbo.zz_stocks_lotes_producto
AS
SELECT dbo.lotes_producto.*
FROM   dbo.lotes_producto 
Where  dbo.lotes_producto.Lote_Interno='060612011'


Seleccionamos los registros que cumplan la condicion de la 
constante lotes_producto.Lote_Interno='060612011'

Pero lo

[gufa] Vista en SQL

2007-03-22 Por tema Omar Bellio
No, yo lo que hago es filtrar el select cuando uso la vista
 
Select * (es mejor poner los campos, aunque sean todos) from
zz_stocks_lotes_producto where Lote_Interno = '060612011'

   _  

De: gufa@mug.org.ar [mailto:[EMAIL PROTECTED] En nombre de R. Rodrigo
Enviado el: Thursday, March 22, 2007 7:36 AM
Para: gufa List Member
Asunto: [gufa] Vista en SQL



Amigos, alguien puede decirme lo siguiente:
 
En una vista en SQL de lado del servidor :
 
CREATE VIEW dbo.zz_stocks_lotes_producto
AS
SELECT dbo.lotes_producto.*
FROM   dbo.lotes_producto 
Where  dbo.lotes_producto.Lote_Interno='060612011'

 
Seleccionamos los registros que cumplan la condicion de la constante
lotes_producto.Lote_Interno='060612011'
 
Pero lo que busco, si se puede, es cambiar esta constante por una varible
para poder cambiar el criterio de selección dentro del formulario según el
valor que se introduzca.
 
Es esto posible ?
 
Gracias y un saludo
 
R. Rodrigo




--
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.5.446 / Virus Database: 268.18.16/729 - Release Date: 21/03/2007
7:52 AM



-- 
No virus found in this outgoing message.
Checked by AVG Free Edition.
Version: 7.5.446 / Virus Database: 268.18.16/729 - Release Date: 21/03/2007
7:52 AM
 


[gufa] Vista en SQL

2007-03-22 Por tema R. Rodrigo
Gracias por contestar, pero te comento, el problema es el siguiente:
 
En el entorno de datos, y mediante el generedor, he creado un conexión a SQL
 defino los parametros, y puedo acceder a los datos SQL como si de una tabla
se tratase sin ningun problema.
 
El problema es que al iniciar el form, el cursoradapter se trae todos los
datos y relentiza bastante si son muchos, a conitnuación selecciona el lote
del producto y a partir de aqui todo va bien, ya no se hace lento.
 
Si en el generador le marco que INICALMENTE NO CARGUE DATOS, que sería lo
logico, y luego seleccionar el lote que nos interesa, entonces no consigo
traer ningun datos.
 
Ahora bien, si el SELECT anterior que lo alojo en sel SQ y selecciono por
constante el lote del producto, la respuesta es instantanea, pero solo me
sirve para ese producto.
 
Es por esto que buscaba la forma de en el SERVIDOR SQL, aloja un select que
la condicion WHERE fuera contra un avariable de memoria, y en la aplicación
según le indique el valor a esta variable fuera trayendo los datos
correspondientes.
 
Espero haberme explicado un poco más
 
Gracias
 
Un saludo
R. Rodrigo
 
 
---Mensaje original---
 
De: Omar Bellio
Fecha: 22/03/2007 13:44:43
Para: gufa List Member
Asunto: [gufa] Vista en SQL
 
No, yo lo que hago es filtrar el select cuando uso la vista
 
Select * (es mejor poner los campos, aunque sean todos) from
zz_stocks_lotes_producto where Lote_Interno = '060612011'




De: gufa@mug.org.ar [mailto:[EMAIL PROTECTED] En nombre de R. Rodrigo
Enviado el: Thursday, March 22, 2007 7:36 AM
Para: gufa List Member
Asunto: [gufa] Vista en SQL


Amigos, alguien puede decirme lo siguiente:
 
En una vista en SQL de lado del servidor :
 
CREATE VIEW dbo.zz_stocks_lotes_producto
AS
SELECT dbo.lotes_producto.*
FROM   dbo.lotes_producto 
Where  dbo.lotes_producto.Lote_Interno='060612011'

 
Seleccionamos los registros que cumplan la condicion de la constante
lotes_producto.Lote_Interno='060612011'
 
Pero lo que busco, si se puede, es cambiar esta constante por una varible
para poder cambiar el criterio de selección dentro del formulario según el
valor que se introduzca.
 
Es esto posible ?
 
Gracias y un saludo
 
R. Rodrigo




--
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.5.446 / Virus Database: 268.18.16/729 - Release Date: 21/03/2007
7:52 AM



__ Información de NOD32, revisión 2135 (20070322) __

Este mensaje ha sido analizado con NOD32 antivirus system
http://www.nod32.com

 

[gufa] Vista en SQL

2007-03-22 Por tema Christian Gutman
Hola Rodrigo, no te compliques la vida

No seria mejor abstraerte de eso ¿?

Ejemplo

Tu Vista

 

CREATE VIEW dbo.zz_stocks_lotes_producto
AS
SELECT dbo.lotes_producto.*
FROM   dbo.lotes_producto 



 

En el form

 

DataAccess,Use(“zz_stocks_lotes_producto” )

DataAccess,GetByWhere(“lotes_producto.Lote_Interno='060612011'”)

 

 

 

 

Se entiende maso ¿?



[gufa] Vista en SQL

2007-03-22 Por tema Hernán Baranda
Como estas. Voy a meter la cuchara por las dudas de que lo que voy a decir 
tenga algo que ver con lo tuyo.
A mi me pasaba que queria hacer un requery(), o por supuesto el comando que el 
cursoradapter tenia para esto, y no me funcionaba.
Lo que tuve que hacer fue matar el cursor   
USE IN MiCursor
y mandar de vuelta el cursorfill()
Aparentemente mientras el cursor existe no te lo permite refrescar. Que 
sospecho que debe ser similar a lo que te pasa a vos.
No lo probé pero tambien sospecho que si desatachas el cursor del cursoradapter 
tambien vas atener el mismo efecto.
Algo asi como

oMiCursorAdapter.CursorDetach
oMiCursorAdapter.Cursorfill

que por supuesto es mucho mas elegante que

USE IN MiCursor
oMiCursorAdapter.Cursorfill

Suerte
Hernan





  - Original Message - 
  From: R. Rodrigo 
  To: gufa List Member 
  Sent: Thursday, March 22, 2007 10:58 AM
  Subject: [gufa] Vista en SQL


Gracias por contestar, pero te comento, el problema es el siguiente:

En el entorno de datos, y mediante el generedor, he creado un conexión 
a SQL, defino los parametros, y puedo acceder a los datos SQL como si de una 
tabla se tratase sin ningun problema.

El problema es que al iniciar el form, el cursoradapter se trae todos 
los datos y relentiza bastante si son muchos, a conitnuación selecciona el lote 
del producto y a partir de aqui todo va bien, ya no se hace lento.

Si en el generador le marco que INICALMENTE NO CARGUE DATOS, que sería 
lo logico, y luego seleccionar el lote que nos interesa, entonces no consigo 
traer ningun datos.

Ahora bien, si el SELECT anterior que lo alojo en sel SQ y selecciono 
por constante el lote del producto, la respuesta es instantanea, pero solo me 
sirve para ese producto.

Es por esto que buscaba la forma de en el SERVIDOR SQL, aloja un select 
que la condicion WHERE fuera contra un avariable de memoria, y en la aplicación 
según le indique el valor a esta variable fuera trayendo los datos 
correspondientes.

Espero haberme explicado un poco más

Gracias

Un saludo
R. Rodrigo


---Mensaje original---

De: Omar Bellio
Fecha: 22/03/2007 13:44:43
Para: gufa List Member
Asunto: [gufa] Vista en SQL

No, yo lo que hago es filtrar el select cuando uso la vista

Select * (es mejor poner los campos, aunque sean todos) from 
zz_stocks_lotes_producto where Lote_Interno = '060612011'




De: gufa@mug.org.ar [mailto:[EMAIL PROTECTED] En nombre de R. Rodrigo
Enviado el: Thursday, March 22, 2007 7:36 AM
Para: gufa List Member
Asunto: [gufa] Vista en SQL


  Amigos, alguien puede decirme lo siguiente:

  En una vista en SQL de lado del servidor :

  CREATE VIEW dbo.zz_stocks_lotes_producto
  AS
  SELECT dbo.lotes_producto.*
  FROM   dbo.lotes_producto 
  Where  dbo.lotes_producto.Lote_Interno='060612011'


  Seleccionamos los registros que cumplan la condicion de la 
constante lotes_producto.Lote_Interno='060612011'

  Pero lo que busco, si se puede, es cambiar esta constante por una 
varible para poder cambiar el criterio de selección dentro del formulario según 
el valor que se introduzca.

  Es esto posible ?

  Gracias y un saludo

  R. Rodrigo 
 
 


--
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.5.446 / Virus Database: 268.18.16/729 - Release Date: 
21/03/2007 7:52 AM




__ Información de NOD32, revisión 2135 (20070322) __

Este mensaje ha sido analizado con NOD32 antivirus system
http://www.nod32.com

   
   
   


[gufa] Vista en SQL

2007-03-22 Por tema Sergio Suarez


Hola, se me ocurre que si el cursor no es actualizable lo podes crear a traves de una consulta usando sqlexec(), si queres la solucion por el lado del servidor creo que te seria mejor armar una store procedere que le pases el parametro en el servidor y que estate devuelva el cursor.
Saludos.



On Jue Mar 22 10:58 , 'R. Rodrigo' [EMAIL PROTECTED] sent:











Gracias por contestar, pero te comento, el problema es el siguiente:

En el entorno de datos, ymediante el generedor, he creado un conexión a SQL, defino los parametros, y puedo acceder a los datos SQL como si de unatabla se tratase sin ningun problema.

El problema es que al iniciar el form, el cursoradapter se trae todos los datos y relentiza bastante si son muchos, a conitnuación selecciona el lote del producto y a partir de aqui todo va bien, ya no se hace lento.

Si en el generador le marco que INICALMENTE NO CARGUE DATOS, que sería lo logico, y luego seleccionar el lote que nos interesa, entonces no consigo traer ningun datos.

Ahora bien, si el SELECT anterior que lo alojo en sel SQ y selecciono por constante el lote del producto, la respuesta es instantanea, pero solo me sirve para ese producto.

Es por esto que buscaba la forma de en el SERVIDOR SQL, aloja un select que la condicion WHERE fuera contra un avariable de memoria, y en la aplicación según le indique el valor a esta variable fuera trayendo los datos correspondientes.

Espero haberme explicado un poco más

Gracias

Un saludo
R. Rodrigo


---Mensaje original---


De: Omar Bellio
Fecha: 22/03/2007 13:44:43
Para: gufa List Member
Asunto: [gufa] Vista en SQL


No, yo lo que hago es filtrar el select cuando uso la vista

Select * (es mejor poner los campos, aunque sean todos) from zz_stocks_lotes_producto where Lote_Interno = '060612011'



De: gufa@mug.org.ar [mailto:[EMAIL PROTECTED] En nombre de R. Rodrigo
Enviado el: Thursday, March 22, 2007 7:36 AM
Para: gufa List Member
Asunto: [gufa] Vista en SQL







Amigos, alguien puede decirme lo siguiente:

En una vista en SQLde lado del servidor:

CREATE VIEW dbo.zz_stocks_lotes_producto
AS
SELECT dbo.lotes_producto.*
FROM dbo.lotes_producto 
Where dbo.lotes_producto.Lote_Interno='060612011'


Seleccionamos los registros que cumplan la condicion de la constante lotes_producto.Lote_Interno='060612011'

Pero lo que busco, si se puede, es cambiar esta constante por una varible para poder cambiar el criterio de selección dentro del formulario según el valor que se introduzca.

Es esto posible ?

Gracias y un saludo

R. Rodrigo









--
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.5.446 / Virus Database: 268.18.16/729 - Release Date: 21/03/2007 7:52 AM


__ Información de NOD32, revisión 2135 (20070322) __

Este mensaje ha sido analizado con NOD32 antivirus system
http://www.nod32.com











Visita www.tutopia.com 
y comienza a navegar ms rpido en Internet. Tutopia es Internet 
para todos. 




[gufa] Vista en SQL

2007-03-22 Por tema Fabricio \(GUFA\)
Si el cursor lo traes con una instrucción SQLEXEC (TuConexión, 
InstrucciónSelect, TuCursor)

cuando armas la InstrucciónSelect la armás con el parámetro.
Ej:
m.Lote_Interno= ThisForm.Lote_Interno.Valuesuponiendo que en el form hay 
un control que permite elegir el lote que desea visualizar

InstrucciónSelect= SELECT dbo.lotes_producto.* FROM dbo.lotes_producto WHERE 
dbo.lotes_producto.Lote_Interno= + m.Lote_Interno

previo a haber transformado a la variable m.Lote_Interno a un valor de tipo 
texto para que se pueda concatenar.

=SQLEXEC (TuConexión, InstrucciónSelect, TuCursor)

Saludos
Fabricio A. Bridera
[EMAIL PROTECTED]
  - Original Message - 
  From: R. Rodrigo 
  To: gufa List Member 
  Sent: Thursday, March 22, 2007 10:58 AM
  Subject: [gufa] Vista en SQL


Gracias por contestar, pero te comento, el problema es el siguiente:

En el entorno de datos, y mediante el generedor, he creado un conexión 
a SQL, defino los parametros, y puedo acceder a los datos SQL como si de una 
tabla se tratase sin ningun problema.

El problema es que al iniciar el form, el cursoradapter se trae todos 
los datos y relentiza bastante si son muchos, a conitnuación selecciona el lote 
del producto y a partir de aqui todo va bien, ya no se hace lento.

Si en el generador le marco que INICALMENTE NO CARGUE DATOS, que sería 
lo logico, y luego seleccionar el lote que nos interesa, entonces no consigo 
traer ningun datos.

Ahora bien, si el SELECT anterior que lo alojo en sel SQ y selecciono 
por constante el lote del producto, la respuesta es instantanea, pero solo me 
sirve para ese producto.

Es por esto que buscaba la forma de en el SERVIDOR SQL, aloja un select 
que la condicion WHERE fuera contra un avariable de memoria, y en la aplicación 
según le indique el valor a esta variable fuera trayendo los datos 
correspondientes.

Espero haberme explicado un poco más

Gracias

Un saludo
R. Rodrigo


---Mensaje original---

De: Omar Bellio
Fecha: 22/03/2007 13:44:43
Para: gufa List Member
Asunto: [gufa] Vista en SQL

No, yo lo que hago es filtrar el select cuando uso la vista

Select * (es mejor poner los campos, aunque sean todos) from 
zz_stocks_lotes_producto where Lote_Interno = '060612011'




De: gufa@mug.org.ar [mailto:[EMAIL PROTECTED] En nombre de R. Rodrigo
Enviado el: Thursday, March 22, 2007 7:36 AM
Para: gufa List Member
Asunto: [gufa] Vista en SQL


  Amigos, alguien puede decirme lo siguiente:

  En una vista en SQL de lado del servidor :

  CREATE VIEW dbo.zz_stocks_lotes_producto
  AS
  SELECT dbo.lotes_producto.*
  FROM   dbo.lotes_producto 
  Where  dbo.lotes_producto.Lote_Interno='060612011'


  Seleccionamos los registros que cumplan la condicion de la 
constante lotes_producto.Lote_Interno='060612011'

  Pero lo que busco, si se puede, es cambiar esta constante por una 
varible para poder cambiar el criterio de selección dentro del formulario según 
el valor que se introduzca.

  Es esto posible ?

  Gracias y un saludo

  R. Rodrigo 
 
 


--
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.5.446 / Virus Database: 268.18.16/729 - Release Date: 
21/03/2007 7:52 AM




__ Información de NOD32, revisión 2135 (20070322) __

Este mensaje ha sido analizado con NOD32 antivirus system
http://www.nod32.com

   
   
   


[gufa] Vista en SQL

2007-03-22 Por tema José Paez

Hola Rodrigo

Te paso este fragmento de código para que veas como trabajo con mi subclase 
basada en CursorAdapter,
Espero que te sea de utilidad.

Saludos

José Paez
Córdoba - Argentina


[1] Al mismo le agregue tres propiedades 

CriterioFiltro
CriterioAgrupamiento
CriterioOrdenamiento

[2] Modifique el procedimiento BeforeCursorFill

PROCEDURE BeforeCursorFill
LPARAMETERS luseCursorSchema, lNoDataOnLoad, cSelectCmd

If not Empty( this.CriterioFiltro ) then
cSelectCmd = cSelectCmd +  WHERE  + this.CriterioFiltro
EndIf

If not Empty( this.CriterioAgrupamiento ) then
cSelectCmd = cSelectCmd +  GROUP BY  + this.CriterioAgrupamiento
EndIf

If not Empty( this.CriterioOrdenamiento) then
cSelectCmd = cSelectCmd +  ORDER BY  + this.CriterioOrdenamiento
endif
ENDPROC


[3] Segun sea el caso, cuando no deseo traer datos le configuro la propiedad

NoData = .T.


[4] Para obtener datos y ordernarlos lo hago de esta manera en mi procedimiento:

Local;
 llRetVal  As Boolean,;
 loErrHandler As Exception

llRetVal = .F.

Local;
 lnPeriodo  As Integer

lnPeriodo = 2006

Try
 With Thisform.DataEnvironment.Ventas 
  .Nodata = .F.
  .CriterioFiltro= Periodo = ?lnPeriodo
  .CriterioOrdenamiento  = Fecha, Clientes

  llRetVal = .CursorFill()

  .CriterioFiltro= 
  .CriterioOrdenamiento  = 
 Endwith

Catch To loErrHandler
 This.Return_Error( loErrHandler ) -- Este es mi manejador de 
excepciones
Endtry

Return llRetVal










  - Original Message - 
  From: R. Rodrigo 
  To: gufa List Member 
  Sent: Thursday, March 22, 2007 10:58 AM
  Subject: [gufa] Vista en SQL


Gracias por contestar, pero te comento, el problema es el siguiente:

En el entorno de datos, y mediante el generedor, he creado un conexión 
a SQL, defino los parametros, y puedo acceder a los datos SQL como si de una 
tabla se tratase sin ningun problema.

El problema es que al iniciar el form, el cursoradapter se trae todos 
los datos y relentiza bastante si son muchos, a conitnuación selecciona el lote 
del producto y a partir de aqui todo va bien, ya no se hace lento.

Si en el generador le marco que INICALMENTE NO CARGUE DATOS, que sería 
lo logico, y luego seleccionar el lote que nos interesa, entonces no consigo 
traer ningun datos.

Ahora bien, si el SELECT anterior que lo alojo en sel SQ y selecciono 
por constante el lote del producto, la respuesta es instantanea, pero solo me 
sirve para ese producto.

Es por esto que buscaba la forma de en el SERVIDOR SQL, aloja un select 
que la condicion WHERE fuera contra un avariable de memoria, y en la aplicación 
según le indique el valor a esta variable fuera trayendo los datos 
correspondientes.

Espero haberme explicado un poco más

Gracias

Un saludo
R. Rodrigo


---Mensaje original---

De: Omar Bellio
Fecha: 22/03/2007 13:44:43
Para: gufa List Member
Asunto: [gufa] Vista en SQL

No, yo lo que hago es filtrar el select cuando uso la vista

Select * (es mejor poner los campos, aunque sean todos) from 
zz_stocks_lotes_producto where Lote_Interno = '060612011'




De: gufa@mug.org.ar [mailto:[EMAIL PROTECTED] En nombre de R. Rodrigo
Enviado el: Thursday, March 22, 2007 7:36 AM
Para: gufa List Member
Asunto: [gufa] Vista en SQL


  Amigos, alguien puede decirme lo siguiente:

  En una vista en SQL de lado del servidor :

  CREATE VIEW dbo.zz_stocks_lotes_producto
  AS
  SELECT dbo.lotes_producto.*
  FROM   dbo.lotes_producto 
  Where  dbo.lotes_producto.Lote_Interno='060612011'


  Seleccionamos los registros que cumplan la condicion de la 
constante lotes_producto.Lote_Interno='060612011'

  Pero lo que busco, si se puede, es cambiar esta constante por una 
varible para poder cambiar el criterio de selección dentro del formulario según 
el valor que se introduzca.

  Es esto posible ?

  Gracias y un saludo

  R. Rodrigo 
 
 


--
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.5.446 / Virus Database: 268.18.16/729 - Release Date: 
21/03/2007 7:52 AM




__ Información de NOD32, revisión 2135 (20070322) __

Este mensaje ha sido analizado con NOD32 antivirus system
http://www.nod32.com

   
   
   


[gufa] Vista en SQL - RESUELTO

2007-03-22 Por tema oscar.zarate
Rodrigo,

Si yo no me equivoco, lo que queres hacer es una vista parametrizada 
(como se hacia hace ... 10 anios Antonio? :-)
La idea es la siguiente:

El codigo de tu vista es:
SELECT Table1.a, Table1.b;
 FROM ;
 data1!table1;
 WHERE  Table1.a = ( ?lcPar )

Donde lcPar es el parametro. Si abris la vista, te aparece un cuadro de 
dialogo (que feo que escribo) pidiendote el valor del parametro, pero si 
le asignas a lcPar un valor antes de abrirla, no te abre ese Input.

Entonces, en tu codigo:
haces ... en el Load: Use View1 NODATA (no trae ningun dato)
Cuando lo necesitas: haces lcPar = 123 o lo que sea y REQUERY(View1)


Eso se hacia hace mucho ... ahora seria mejor que uses un CursorAdapter, 
pero ...

Espero no haber ... hecho pipi afuero del tarro :-)


SaludOZ
 |\_/|
 (.. )
  - /


-Original Message-
From: R. Rodrigo [EMAIL PROTECTED]
To: gufa List Member  gufa@mug.org.ar
Date: Thu, 22 Mar 2007 16:23:46 +0100 (Hora estándar romance)
Subject: [gufa] Vista en SQL - RESUELTO

 Gracias a todos por contestar mi consulta.

  

 Ya lo solucione tomando un poco de lo que cada uno me dijeron. No se si
 sera
 la forma más ortodoxa, pero funciona al cien por cien y el tiempo de
 respuesta es insignificante.

  

 Lo comento a continución por si le sirve a alguien.

  

 1 - En el servidor SQL he creado una tabla a la que llamo VARIABLES
 donde
 defino los campo que me interesan, en mi caso solo necesito 5 variables
 (var1,vae2,etc.)

 En esta tabla que solo tiene un registro, guardo mediante el form de 
 la
 aplicación la variable de los registros que me quiero traer
 (lote,dni,codigo
 etc.)

  

 2 - En el servidor SQL creo la siguiente vista:

  

 CREATE VIEW dbo.zz_stocks_lotes_cabecera

 AS

 SELECT dbo.lotes_cabecera.*

 FROM   dbo.lotes_cabecera  inner join variables on
 lote_interno=var1

  

 Donde seleccione los registros que cumplen la condición
 lote_interno=var1 
 (var1 es el campo de la tabla variables.)

  

  

 3 - En el form, cuando cambio el valor intoducido para numero de lote,
 lo
 que hago es :

 

 SELECT variables

 Replace var1 WITH this.Value   (nuevo valor introducido al lote)

 REQUERY()

 *

 SELECT lotes_cabecera

 REQUERY() 

 GO top

  

 Trae perfectamente los registros que corresponde al lote pedido y sin
 ningun
 retardo.

  

  

  

 Espero mi solución le sirva a alguien más

  

 Un saludo

  

  

  

 ---Mensaje original---

  

 De: Sergio Suarez

 Fecha: 22/03/2007 15:49:47

 Para: gufa List Member

 Asunto: [gufa] Vista en SQL

  

 Hola, se me ocurre que si el cursor no es actualizable lo podes crear a
 traves de una consulta usando sqlexec(), si queres la solucion por el
 lado
 del servidor creo que te seria mejor armar una store procedere que le
 pases
 el parametro  en el servidor y que esta te devuelva el cursor.

 Saludos.

 

 

 

 On Jue Mar 22 10:58 , 'R. Rodrigo' [EMAIL PROTECTED] sent:

 

 

 Gracias por contestar, pero te comento, el problema es el siguiente:

  

 En el entorno de datos, y mediante el generedor, he creado un conexión
 a SQL
  defino los parametros, y puedo acceder a los datos SQL como si de una
 tabla
 se tratase sin ningun problema.

  

 El problema es que al iniciar el form, el cursoradapter se trae todos
 los
 datos y relentiza bastante si son muchos, a conitnuación selecciona el
 lote
 del producto y a partir de aqui todo va bien, ya no se hace lento.

  

 Si en el generador le marco que INICALMENTE NO CARGUE DATOS, que sería
 lo
 logico, y luego seleccionar el lote que nos interesa, entonces no
 consigo
 traer ningun datos.

  

 Ahora bien, si el SELECT anterior que lo alojo en sel SQ y selecciono
 por
 constante el lote del producto, la respuesta es instantanea, pero solo
 me
 sirve para ese producto.

  

 Es por esto que buscaba la forma de en el SERVIDOR SQL, aloja un select
 que
 la condicion WHERE fuera contra un avariable de memoria, y en la
 aplicación
 según le indique el valor a esta variable fuera trayendo los datos
 correspondientes.

  

 Espero haberme explicado un poco más

  

 Gracias

  

 Un saludo

 R. Rodrigo

  

  

 ---Mensaje original---

  

 De: Omar Bellio

 Fecha: 22/03/2007 13:44:43

 Para: gufa List Member

 Asunto: [gufa] Vista en SQL

  

 No, yo lo que hago es filtrar el select cuando uso la vista

  

 Select * (es mejor poner los campos, aunque sean todos) from
 zz_stocks_lotes_producto where Lote_Interno = '060612011'

 

 

 

 

 De: gufa@mug.org.ar [mailto:[EMAIL PROTECTED] En nombre de R. Rodrigo

 Enviado el: Thursday, March 22, 2007 7:36 AM

 Para: gufa List Member

 Asunto: [gufa] Vista en SQL

 

 

 Amigos, alguien puede decirme lo siguiente:

  

 En una vista en SQL de lado del servidor :

  

 CREATE VIEW dbo.zz_stocks_lotes_producto

 AS

 SELECT dbo.lotes_producto.*

 FROM   dbo.lotes_producto 

 Where  dbo.lotes_producto.Lote_Interno='060612011'

 

  

 Seleccionamos los registros que cumplan la condicion de la constante

[gufa] Vista en SQL - RESUELTO

2007-03-22 Por tema R. Rodrigo
Gracias oscar por tu respuesta, pero te comento, lo que estoy haciendo es en
un form y mediante el ENTORNO DATOS/GENERADOR, creo un cursoradapter, defino
todos los parametros, pero el problema es que al ejecutar, siempre me trae
todos los datos, y si la table de la base SQL tiene muchos registros (180
000) tarda mucho en cargarlos cuando despues yo solo voy a usar un solo
registro.
 
Estro anterior es lo que  quiero hacer, es decir que al acceder a SQL solo
traiga el registro que yo le indico, no que traiga todos y despues yo
selecciono el que quiero.
 
 
Un saludo
 
---Mensaje original---
 
De: oscar.zarate
Fecha: 22/03/2007 23:58:16
Para: gufa List Member
Asunto: [gufa] Vista en SQL - RESUELTO
 
Rodrigo,
 
Si yo no me equivoco, lo que queres hacer es una vista parametrizada
(como se hacia hace ... 10 anios Antonio? :-)
La idea es la siguiente:
 
El codigo de tu vista es:
SELECT Table1.a, Table1.b;
  FROM ;
 data1!table1;
  WHERE  Table1.a = ( ?lcPar )
 
Donde lcPar es el parametro. Si abris la vista, te aparece un cuadro de
dialogo (que feo que escribo) pidiendote el valor del parametro, pero si
le asignas a lcPar un valor antes de abrirla, no te abre ese Input.
 
Entonces, en tu codigo:
haces ... en el Load: Use View1 NODATA (no trae ningun dato)
Cuando lo necesitas: haces lcPar = 123 o lo que sea y REQUERY(View1)
 
 
Eso se hacia hace mucho ... ahora seria mejor que uses un CursorAdapter,
pero ...
 
Espero no haber ... hecho pipi afuero del tarro :-)
 
 
SaludOZ
  |\_/|
  (.. )
  - /
 
 
-Original Message-
From: R. Rodrigo [EMAIL PROTECTED]
To: gufa List Member  gufa@mug.org.ar
Date: Thu, 22 Mar 2007 16:23:46 +0100 (Hora estándar romance)
Subject: [gufa] Vista en SQL - RESUELTO
 
 Gracias a todos por contestar mi consulta.
 

 
 Ya lo solucione tomando un poco de lo que cada uno me dijeron. No se si
 sera
 la forma más ortodoxa, pero funciona al cien por cien y el tiempo de
 respuesta es insignificante.
 

 
 Lo comento a continución por si le sirve a alguien.
 

 
 1 - En el servidor SQL he creado una tabla a la que llamo VARIABLES
 donde
 defino los campo que me interesan, en mi caso solo necesito 5 variables
 (var1,vae2,etc.)
 
 En esta tabla que solo tiene un registro, guardo mediante el form de
 la
 aplicación la variable de los registros que me quiero traer
 (lote,dni,codigo
 etc.)
 

 
 2 - En el servidor SQL creo la siguiente vista:
 

 
 CREATE VIEW dbo.zz_stocks_lotes_cabecera
 
 AS
 
 SELECT dbo.lotes_cabecera.*
 
 FROM   dbo.lotes_cabecera  inner join variables on
 lote_interno=var1
 

 
 Donde seleccione los registros que cumplen la condición
 lote_interno=var1
 (var1 es el campo de la tabla variables.)
 

 

 
 3 - En el form, cuando cambio el valor intoducido para numero de lote,
 lo
 que hago es :
 

 
 SELECT variables
 
 Replace var1 WITH this.Value   (nuevo valor introducido al lote)
 
 REQUERY()
 
 *
 
 SELECT lotes_cabecera
 
 REQUERY()
 
 GO top
 

 
 Trae perfectamente los registros que corresponde al lote pedido y sin
 ningun
 retardo.
 

 

 

 
 Espero mi solución le sirva a alguien más
 

 
 Un saludo
 

 

 

 
 ---Mensaje original---
 

 
 De: Sergio Suarez
 
 Fecha: 22/03/2007 15:49:47
 
 Para: gufa List Member
 
 Asunto: [gufa] Vista en SQL
 

 
 Hola, se me ocurre que si el cursor no es actualizable lo podes crear a
 traves de una consulta usando sqlexec(), si queres la solucion por el
 lado
 del servidor creo que te seria mejor armar una store procedere que le
 pases
 el parametro  en el servidor y que esta te devuelva el cursor.
 
 Saludos.
 

 

 

 
 On Jue Mar 22 10:58 , 'R. Rodrigo' [EMAIL PROTECTED] sent:
 

 

 
 Gracias por contestar, pero te comento, el problema es el siguiente:
 

 
 En el entorno de datos, y mediante el generedor, he creado un conexión
 a SQL
  defino los parametros, y puedo acceder a los datos SQL como si de una
 tabla
 se tratase sin ningun problema.
 

 
 El problema es que al iniciar el form, el cursoradapter se trae todos
 los
 datos y relentiza bastante si son muchos, a conitnuación selecciona el
 lote
 del producto y a partir de aqui todo va bien, ya no se hace lento.
 

 
 Si en el generador le marco que INICALMENTE NO CARGUE DATOS, que sería
 lo
 logico, y luego seleccionar el lote que nos interesa, entonces no
 consigo
 traer ningun datos.
 

 
 Ahora bien, si el SELECT anterior que lo alojo en sel SQ y selecciono
 por
 constante el lote del producto, la respuesta es instantanea, pero solo
 me
 sirve para ese producto.
 

 
 Es por esto que buscaba la forma de en el SERVIDOR SQL, aloja un select
 que
 la condicion WHERE fuera contra un avariable de memoria, y en la
 aplicación
 según le indique el valor a esta variable fuera trayendo los datos
 correspondientes.
 

 
 Espero haberme explicado un poco más
 

 
 Gracias
 

 
 Un saludo
 
 R. Rodrigo
 

 

 
 ---Mensaje original---
 

 
 De: Omar Bellio
 
 Fecha: 22/03/2007 13:44:43
 
 Para: gufa List Member
 
 Asunto: [gufa] Vista en SQL