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