FoxPro/Visual FoxPro - Bases relacionales en MySQL

   
Vista:

Bases relacionales en MySQL

Publicado por VICTOR PEREZ (137 intervenciones) el 16/03/2013 22:35:41
Hola,

En VFP usamos las bases de datos o tablas relacionales mediante el comando SET RELATION to, abriendo primero la tabla y teniendo un campo en comun (indexado) con la tabla a la que nos vamos a relacionar.

Bueno, en mi migracion hacia MySQL, tengo que usar relaciones pero ...por ejemplo, abrir una tabla como la de pacientes, que tiene unos 31,000 registros solo para relacionarla con otra base de datos que controla la atencion diaria de los pacientes y que puede tener unos 50 registros maximos por dia, le toma al sistema mucho llenar el cursor que lleno al abrir la tabla de pacientes.

Lo estoy haciendo asi

1
2
3
4
5
6
7
8
9
10
11
12
THISFORM.CONECTA
SQLEXEC(LNHANDLE,"SELECT * FROM PATIENT","ALMCT")  && ESTO ES LO QUE TOMA TIEMPO
Sele almCT
INDEX ON CODIGO TAG Codigo
 
 
THISFORM.CONECTA
SQLEXEC(LNHANDLE,"SELECT * FROM PATATEND","ALMPAT")
SQLDISCONNECT(LNHANDLE)
 
SELECT ALMPAT
SET RELATION TO CODIGO INTO ALMCT ADDITIVE


Para mi programa, ya busque una mejor manera de hacer las cosas..pero si me gustaria saber como debo hacer las relaciones entre bases que son muy grandes.

Para resolver mi problema lo que hice fue lo siguiente;

1
2
3
4
5
6
7
8
9
10
11
12
Sele AlmPat
 
THISFORM.CONECTA
 
DO WHILE !EOF()
 
   SQLEXEC(LNHANDLE,"SELECT LASTORDER FROM PATIENT WHERE CODIGO=?ALMPAT.CODIGO","ALMCT")
   SELECT ALMPAT
   REPLACE LASTORDER WITH ALMCT.LASTORDER
SKIP
ENDDO
SQLDISCONNECT(LNHANDLE)


Esto me llena el cursor Almpat con la informacion del campo Almct.lastorder que lo necesito para saber cuando fue la ultima vez que se facturó al paciente y conocer si el paciente atendido en la fecha ya fue facturado o no.

Sugerencias,,,, Bienvenidas...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Edgar Zambrano

Bases relacionales en MySQL

Publicado por Edgar Zambrano (72 intervenciones) el 27/03/2013 15:40:01
porque no haces un join en el servidor para que este te regrese el cursor armado con los datos que necesitas, así no ocupas 2 veces el servidor de bd con 2 consultas distintas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Bases relacionales en MySQL

Publicado por victor perez (137 intervenciones) el 27/03/2013 23:22:52
Exacto...gracias...

He estado estudiando lo del Join...

He hecho algunos experimentos...vamos a ver si puedo lograrlo.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Bases relacionales en MySQL

Publicado por victor perez (137 intervenciones) el 28/03/2013 18:42:05
Hola nuevamente,

Ya lo logre...es sencillo.

Select incap.*,lastorder from incap inner join patient on incap.codigo=patient.codigo where.....

Funciona muy bien lo unico que para escoger los campos de la tabla INCAP , debo escoger todos los campos mediante el asterisco...si trato de coger los 12 campos aislados que necesito me da un error.

Es decir, si uso Select incap.fecha,incap.numero,incap.codigo ...etc...no me funciona.

Saludos y gracias por los comentarios.


Victor,

Ah! y este hilo lo abri mal...tenia mal concepto de bases relacionales...lo que queria era unir dos o mas tablas en un cursor....eso no es relacional...relacional es para integridad de los datos donde un campo "foreign" se establece la ligadura con otra base de datos para que los cambios en una tabla afecten o no los cambios en otra tabla (al hacer update o delete).

Saludos nuevamente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar