PDA

Ver la Versión Completa : ADO - BDE Problemas


diegoghisolfi
16-12-2008, 15:28:04
Código SQL [-] (http://www.clubdelphi.com/foros/#)


Quería consultar si alguien se encontro con el mismo problema:
la siguiente consulta la realizo con el BDE
//select T1.TURFEC, T1.PROCOD, T1.CODPAC
//, T5.OSODES
//, T4.PRONOM
//, T2.APELLI, T2.NOMBRE, T2.DIRECC, T2.LOCALI, T2.CODSEX
//, T3.DIAGR1, T3.DIAGR2
//from (("\SF\DBF\SFATUR.dbf" T1 left join "\MEDI\FILES\MPACIE.dbf" T2 ON (T2.CODPAC=T1.CODPAC))
//left join "\MEDI\FILES\HCLINI.dbf" T3 ON ((T3.CODPAC=T1.CODPAC) and (T1.TURFEC=T3.FECHAC)))
//inner join "\SF\DBF\SFAPRO.dbf" T4 ON (T4.PROCOD=T1.PROCOD)
//inner join "SF\DBF\SFAOSO.dbf" T5 ON (T5.OSOCOD=T1.OSOCOD)
//where (T1.TURFEC>"01/01/08") and (T1.TURFEC<"01/31/08")
//order by T1.PROCOD, T1.TURFEC, T1.CODPAC

y funciona barbaro pero ademas necesito calcular la Edad de un paciente en funcion de su fecha de nacimiento la cual no encontre forma de hacerlo con el BDE y si la puedo realizar con ADO con la siguiente consulta

diegoghisolfi
16-12-2008, 15:48:27
Quería consultar si alguien se encontro con el mismo problema:
la siguiente consulta la realizo con el BDE
//select T1.TURFEC, T1.PROCOD, T1.CODPAC
//, T5.OSODES
//, T4.PRONOM
//, T2.APELLI, T2.NOMBRE, T2.DIRECC, T2.LOCALI, T2.CODSEX
//, T3.DIAGR1, T3.DIAGR2
//from (("\SF\DBF\SFATUR.dbf" T1 left join "\MEDI\FILES\MPACIE.dbf" T2 ON (T2.CODPAC=T1.CODPAC))
//left join "\MEDI\FILES\HCLINI.dbf" T3 ON ((T3.CODPAC=T1.CODPAC) and (T1.TURFEC=T3.FECHAC)))
//inner join "\SF\DBF\SFAPRO.dbf" T4 ON (T4.PROCOD=T1.PROCOD)
//inner join "SF\DBF\SFAOSO.dbf" T5 ON (T5.OSOCOD=T1.OSOCOD)
//where (T1.TURFEC>"01/01/08") and (T1.TURFEC<"01/31/08")
//order by T1.PROCOD, T1.TURFEC, T1.CODPAC

y funciona barbaro pero ademas necesito calcular la Edad de un paciente en funcion de su fecha de nacimiento la cual no encontre forma de hacerlo con el BDE y si la puedo realizar con ADO con la siguiente consulta

SELECT turpac,
IIF(MONTH(turfna) > MONTH(turfec), YEAR(turfec)-YEAR(turfna) - 1,
IIF(MONTH(turfec) = MONTH(turfna) AND DAY(turfna) > DAY(turfec),
YEAR(turfec)-YEAR(turfna) - 1, YEAR(turfec)-YEAR(turfna)))as Edad FROM sfatur

el problema que tengo es que no puedo realizar la union de la consultas ni tampoco poder hacer todo en el BDE o en ADO.
Alguien se encontro con este problema o tiene alguna idea de como resolverlo.

Saludos

Diego
PD: disculpen pero el primer post salio cortado

luisgutierrezb
16-12-2008, 18:13:07
La base de datos es en access? si es asi, puedes hacer una consulta en access el equivalente a una vista al estilo ADO, pero la visualizarias en el BDE

diegoghisolfi
16-12-2008, 20:04:34
No las bases son tablas planas .DBF de FoxPro pero de dos programas diferentes que necesito realizar consultas relacionadas.

luisgutierrezb
16-12-2008, 21:25:13
Bueno la verdad nunca utilize el BDE pero creo que trae el driver nativo para dbf, pero si en lugar de eso, las abres por BDE y por ODBC debe ser igual que con ADO

diegoghisolfi
17-12-2008, 17:52:27
sabes que mi pensamiento fue lineal como el tuyo pero en la practica no puedo hacer que funcione.
En ADO no me toma la forma de direccionar en la consulta la parte
from c:\base\mitabla.dbf T y la necesito implementar si o si porque la consulta utiliza tablas que estan en bases diferentes cosa que el BDE si me permite y ADO no o no lo se implementar. Y bueno para el calculo de la edad en funcion de la fecha de nacimiento tampoco pude hacerlo en el BDE y si en ADO.

tvaly
03-01-2009, 22:41:16
Hola, no quiero ser fatalista, pero segun tengo entendido ADO no fue desarrollado para soportar DBF. Te sufieron que consultes un poco mas en san google... pero es lo que yo se y la verdad te recomendarias que pases tus tablas a un motor mas confiable (esto ya te lo digo por experiencia propia)
Saludos

salvica
13-01-2009, 21:07:40
sabes que mi pensamiento fue lineal como el tuyo pero en la practica no puedo hacer que funcione.
En ADO no me toma la forma de direccionar en la consulta la parte
from c:\base\mitabla.dbf T y la necesito implementar si o si porque la consulta utiliza tablas que estan en bases diferentes cosa que el BDE si me permite y ADO no o no lo se implementar. Y bueno para el calculo de la edad en funcion de la fecha de nacimiento tampoco pude hacerlo en el BDE y si en ADO.
Hola diegoghisolfi

Para las DBF con ADO utilizo ZEOS (la verdad es que para todo ;) ) y en el TZConnection le paso la cadena de conexión así:

{
configurar la conexión mediante ADO
*** cadena de conexión para datos locales en EJECUCIÓN
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=G:\DELPHI-7\FICHEROS\TABLAS;Extended Properties=dBASE IV;Persist Security Info=False;Mode=Read;User ID=Admin;Password=;

*** DirProy es el directorio del programa, se saca con GetCurrentDir
}
with ZConnection do begin
Connected:= false;
HostName := '';
User := '';
Password := '';
Protocol := 'ado';
Port := 0;
Database := 'Provider=Microsoft.Jet.OLEDB.4.0;' +
'Data Source=' + DirProy+'\FICHEROS\TABLAS' + ';' +
'Extended Properties=dBASE IV;' +
'Persist Security Info=False;' +
'Mode=Read;' +
'User ID=Admin;' +
'Password=;';
end;

Luego no tienes más que enlazar un TZQuery al TZConnection y en su propiedad SQL le pones la consulta que necesites (referenciando a la tabla del directorio que pasaste al TZConnection)

Saludos
salvica

diegoghisolfi
13-02-2009, 12:24:01
Muchas gracias, disculpen la demora pero andube con diferentes cosas al mismo tiempo y la que se traba la voy pateando.
La solución que encontre fue generar un tabla temporal mixta. Osea genero la tabla temporal cargo los datos que puedo consultar con el BDE y luego le agrego los datos consultados por el ADO.

Voy a probar la alternativa propuesta por Salvica
Saludos
Diego