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 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
        > 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

        >

        >

        >

        >

        >

        >



        __________ Información de NOD32, revisión 2137 (20070322) __________

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

       
               
       

Responder a