[gufa] Vista en SQL - RESUELTO ++
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
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
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
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
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
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
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
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
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
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
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