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.
