"Me hirve la cabeza!" (denotará mi edad?? Bue, en Volver también se ve)
Sensacional, maestro! Investigar en internechi es fantástico pero a veces uno 
se dispersa, ejemplos, artículos y todo asusta, pero todo esto que uds. me 
ofrecieron tan detalladamente es ir al grano.
Sólo tengo una duda respecto a los índices, que después de probarlo te aviso 
(por mis seeks los campos numéricos los termino transformando en character, 
para buscar factura 1 item 1 no puedo buscar numero+item pues me trae el numero 
11, por ejemplo) voy a verlo con el where 

Muchísimas Gracias
Sigo!
Estela
PD: no me pierdo el curso de VFP9 así completo el círculo y cambio todo

----- Mensaje original ----
De: David Brunstein <[EMAIL PROTECTED]>
Para: GUFA List Member <[email protected]>
Enviado: viernes 25 de abril de 2008, 3:40:44
Asunto: [GUFA] Re: Re: [GUFA] Re: Re: [GUFA] Re: SQL o qué?

Hola Estela,

Con respecto a la seleccion del motor, depende mucho de tus necesidades y tu 
vision de futuro. Lo que dice Ale tiene mucha razon, el opto por un motor que 
corre en Windows y Linux y que es gratis y funciona bien: PostgreSQL.

Al empezar a usar SQL en tu aplicacion vas a poder conectarte con cualquier 
motor... si elegis SQL Server siempre vas a tener un server Windows. Otros 
motores que tienen version en Windows y en Linux son:
1. MySQL 5 - free.
2. IBM DB2 - pago.
3. IBM Informix - pago.
4. Oracle - pago.
5. Sybase - pago.

Como Ale, yo tambien uso el administrador EMS Manager, en mi caso, lo uso para 
conectarme con MySQL (que instalada la version en Windows y en Linux Suse).

Si queres empezar con SQL Express porque es gratis, esta ok. pero pensa que si 
no usas SEEK / REPLACE / APPEND BLANK / SCAN - ENDSCAN - SKIP y demas 
instrucciones de acceso a DBF en tu aplicacion, vas a poder cambiar de motor en 
forma sensilla. Basicamente TODAS las instrucciones SQL son estandard en todos 
los motores. Algunas tienen alguna clausula especifica del motor para optimizar 
el laburo del motor y cosas asi... la diferencia entre una y otra es el 
StringConnection, que te sugiero que lo metas en un INI file o algo asi. O sea, 
lo metas en el codigo de la aplicacion. No lo hardcodees.

Unos tips para optimizar la base de datos:
1. NORMALIZA la base de datos. Y luego desnormalizala un cacho. O sea tene 
alguno acumulador, un total, previamente calculado, para no tener que sumar 
hasta el ultimo registro del detalle para justamente componer ese total.

2. Crea una clave primaria con un BIGINT (o el tipo de dato que sea del motor 
de datos) que sea autonumerica. Esa sera la clave primaria y que tenga un 
indice unico. Repeti esto con todas las tablas del sistema.

3. Trabajar desconectado, como dice Rafa, implica:
3.A CONECTAR - EJECUTAR SQL-SELECT - DESCONECTAR - retornar filas encontradas.
3.B CONECTAR - EJECUTAR SQL-INSERT INTO - DESCONECTAR - retornar el codigo de 
error del query.
3.C CONECTAR - EJECUTAR SQL-UPDATE - DESCONECTAR - retornar el codigo de error 
del query.
3.D CONECTAR - EJECUTAR SQL-DELETE  - DESCONECTAR - retornar el codigo de error 
del query.



Despues esta la division en capas. Te sugiero fuertemente crear una "capa de 
acceso a datos". Como se hace esto? bueno, creando clases especificas que te 
sirven para acceder a la base de datos. Es el unico lugar en la aplicacion 
donde se usan instrucciones SQL. Te parecera loco, pero es asi... 
Llendo al ejemplo de clientes... supongamos que tenes una clase Clientes (con 
los atributos y metodos propios de la clase clientes), bueno tendiras que tener 
otra clase que se podria llamar ClientesPersistencia (o algo asi) donde tenes 
los metodos: Insertar, Borrar, Actualizar y Recuperar que son basicamente las 
instrucciones SQL para poder acceder a los datos.

La clase Clientes tambien tiene los metodos Insertar, Borrar, Actualizar y 
Recuperar pero los invoca los metodos de ClientesPersistencia para que esta 
clase haga el laburo de persistencia. En este ejemplo, la unica clase que sabe 
SQL y que conoce la tabla CLIENTES (en la base de datos) es la clase 
ClientesPersistencia. La clase Clientes no sabe ni donde ni como se persiste la 
clase misma.

Quizas te encuentres con el tema que Recuperar necesite un WHERE y un ORDER BY 
para filtrar y ordenar los datos. Bueno, podes crear otros metodos o hacer un 
overload de Recuperar con otros argumentos. Y otras soluciones, pero SIEMPRE 
dentro de la clase ClientesPersistencia.

Una vez que hagas todo esto con tus TABLAS maestras (clientes, proveedores, 
articulos, etc etc), que persisten clases de entidades... vas a empezar con lo 
mas complejo que es la persistencia de las TABLAS  de movimientos (facturas, 
recibos, remitos, etc), cuya persistencia es mas complicada.

Como ves, esto va muuuuucho mas alla que tu pregunta inicial: como hago para 
evaluar cuanto me lleva reemplazar los SCAN - ENDSCAN por SQL-SELECT? Los 
APPEND BLANK - REPLACE por SQL-INSERT, etc etc

Saludos,
Davo.




2008/4/24 Estela Lázaro <[EMAIL PROTECTED]>:

Hola Davo,
estuve leyendo los mails de gufa en 
http://www.mail-archive.com/[email protected](espectacular) y me ayudan 
muchísimo, voy entendiendo el concepto, veo que el sql express es free y que 
muchos lo usan (voy a bajarlo para las primeras pruebas), muchos recomiendan no 
usar el MySql, no sé todavía cómo dejar libre por si más adelante necesito 
acceder a otro motor para no encontrarme como ahora atada con los use, algo 
como decir "dame los datos" "tomá guardalos" independientemente de cómo, me 
gustó lo de cursor adapter de Rafael, es bárbaro lo que decís de trabajar 
desconectado CONEXION - 
INSERT INTO - DESCONEXION (con SQLDISCONNECTdirecto?); es como cambiar la 
cabeza, vi mails donde muchos están afectados como yo por este tema. Aún no veo 
claro el tema de las capas, ya voy a profundizar. Me significará también ir al 
VFP9, cambios importantes de base, mis benditos group by.
 
Estoy llena de por ejemplo iif(seek("codigo","tabla"),tabla.nombre,space(20))  
para llenar campos o para mostrar, uds qué hacen? un sele nombre where ? Por 
ahí en la misma tabla tengo los vendedores, asesores, consultores a los que 
tengo que ir a encontrar, se entiende? 
 
Muchísimas gracias a todos y sigo estudiando.
Saludos
Estela




----- Mensaje original ----
De: David Brunstein <[EMAIL PROTECTED]>
Para: GUFA List Member <[email protected]>
Enviado: jueves 24 de abril de 2008, 12:55:42
Asunto: [GUFA] Re: Re: [GUFA] Re: SQL o qué?

Hola Estela,


Vayamos por partes, como decia el gran maestro ingles, Jack:

>> Me dará mucho trabajo el SQL? cómo podré estimar costos por tiempo y 
>> dedicación? Anticipándome que desde el vamos tengo que 
>> sacar seek y demás yerbas.
Bueno... la condicion del seek va a ir en la clausula WHERE... y depsues tenes 
que ver que haces en el loop WHILE.. quizas haces un INSERT, UPDATE, DELETE... 
en general todo el loop lo vas a reemplazar por una instruccion SQL.
Sugerencia, empeza a buscar en el codigo todos los SEEK que tenes... despues 
hace algunos reemplezos... inclui analisis del cambio en el codigo, el cambio 
en el codigo y el testing en tu evaluacion... el analisis y el testing es lo 
que mas tiempo te va a llevar. Fijate el tiempo de inicio, y el tiempo final. 
Hace unos 10 casos y podes tomar un promedio.
Luego es una simple multiplicacion.

>> Ya que puedo elegir, cuál uso? 
Bueno, yo optaria por Microsoft SQL Server, porque es un motor de la misma 
empresa que la IDE que estas usando... pero tenes muchas opciones...

Saludos,
Davo.




2008/4/24 Estela Lázaro <[EMAIL PROTECTED]>:

Hola Davo, el tema es que hasta ahora mi motor es VFP y si es en una red local 
me resultaron mucho más rápido los seek y do while que los select, a pesar de 
que todo se resuelve en el cliente, (es el vfp7 o el 9 ya lo mejoró?)
 
Me dará mucho trabajo el SQL? cómo podré estimar costos por tiempo y 
dedicación? Anticipándome que desde el vamos tengo que sacar seek y demás 
yerbas. Ya que puedo elegir, cuál uso? Acepto sugerencias
 
Saludos 
Estela


----- Mensaje original ----
De: David Brunstein <[EMAIL PROTECTED]>
Para: GUFA List Member <[email protected]>
Enviado: jueves 24 de abril de 2008, 11:34:32
Asunto: [GUFA] Re: SQL o qué? 


Hola Estela,

Es raro lo que contas que la estructura SEEK+WHILE sea mas rapida que los 
SQL-SELECT. Con los SQL-SELECT le tiras todo el laburo a la base de datos, en 
cambio con el SEEK+WHILE tiene que ir del cliente al server y volver por cada 
SKIP adentro del loop....

La base de datos, cualquier motor, cualquier vendor, es un sistema diseniado 
para hacer busquedas eficientes. Ojo, cuando me refiero a "motor de base de 
datos" excluyo los DBF y Microsoft Access... MySQL hasta ahi... me refiero a 
SQL Server, Sybase Database, Informix, IBM DB2, Oracle.... etc etc Quizas le 
tenes que fijarte el tema del tunning fino y la optimizacion de las 
busquedas... quizas creando algunos indices en funcion de las condiciones de 
las clausulas WHERE te sirva como para empezar...

Una prueba que podes hacer es abrir el cliente, la administracion de la base de 
datos, y -en forma remota al igual que lo hace la application Visual Foxpro- 
mandar el query al motor... y ver si tarda mas o menos lo mismo que tarda desde 
la aplicacion misma...

Fueron mis comentarios del dia de la fecha...
Saludos,
Davo.





2008/4/24 Estela Lázaro <[EMAIL PROTECTED]>:

Hola gente
Tengo una aplicación en VFP7 que en redes locales anda sin problemas. Y resulta 
que ahora un cliente necesita acceder desde otros puntos para lo que en una 
máquina con win 2003 que oficia de servidor se armó un acceso por vpn y un 
escritorio remoto. El ER anda muy bien y a la velocidad del server, con exes en 
el remoto pero tienen problemas para imprimir y scanear (a las impresoras no 
las reconoce el win2003) por lo que lo imprimen en PDF y scanean con un pequeño 
exe local que les hice mapeado por VPN. Pero esto último es muy lento, lo del 
pdf y el acceso a las tablas por vpn (y eso que saqué casi todos los select 
para agilizar). En su momento dejé de lado los select pues me resultan más 
rápidos los seek y do while. Probé la aplicación completa local mapeada por VPN 
por el tema de las printers y es tremendamente lento.  Por lo que me parece que 
debería migrar al SQL (no sé cuál, el SQL Server, el MySql) que me significaría 
volver a
 los sqlexec y/o vistas parametrizadas, no? Otra alternativa?
Voy a tener más trabajo por mantenimiento/administración de archivos por el 
SQL? 
Bue, qué me sugieren? 
 
Muchas Gracias
Estela



________________________________

Los referentes más importantes en compra/venta de autos se juntaron:
Demotores y Yahoo!. Ahora comprar o vender tu auto es más fácil. 
Visitá http://ar.autos.yahoo.com/



-- 
=======================
David Brunstein
http://davidbrunstein.googlepages.com/
http://davidbrunstein.blogspot.com/

Java/PB/VFP Developer
Winnipeg, MB
Canada

Before I speak, I have something important to say.
Antes de dar mi discurso, tengo algo importante que decir.
Antes de dar meu discurso, tenho algo importante para dizer.
G.M.

________________________________

Yahoo! Encuentros
Ahora encontrar pareja es mucho más fácil, probá el nuevo Yahoo! Encuentros.
Visitá http://yahoo.cupidovirtual.com/servlet/NewRegistration



-- 
=======================
David Brunstein
http://davidbrunstein.googlepages.com/
http://davidbrunstein.blogspot.com/

Java/PB/VFP Developer
Winnipeg, MB
Canada

Before I speak, I have something important to say.
Antes de dar mi discurso, tengo algo importante que decir.
Antes de dar meu discurso, tenho algo importante para dizer.
G.M.

________________________________

Yahoo! Encuentros
Ahora encontrar pareja es mucho más fácil, probá el nuevo Yahoo! Encuentros.
Visitá http://yahoo.cupidovirtual.com/servlet/NewRegistration


-- 
=======================
David Brunstein
http://davidbrunstein.googlepages.com/
http://davidbrunstein.blogspot.com/

Java/PB/VFP Developer
Winnipeg, MB
Canada

Before I speak, I have something important to say.
Antes de dar mi discurso, tengo algo importante que decir.
Antes de dar meu discurso, tenho algo importante para dizer.
G.M.


      Los referentes más importantes en compra/ venta de autos se juntaron:
Demotores y Yahoo!
Ahora comprar o vender tu auto es más fácil. Vistá ar.autos.yahoo.com/

Responder a