Ver Mensaje Individual
  #8  
Antiguo 23-08-2011
juanlito juanlito is offline
Miembro
NULL
 
Registrado: ago 2011
Ubicación: Jerez de la Frontera
Posts: 14
Reputación: 0
juanlito Va por buen camino
Muchas Gracias a todos por vuestras respuestas, ya consegui conectar con la base de datos de firebird, y importe tambien los datos sin problema.

Pero mi consulta sigue siendo lenta, se que usaba componentes tipo TTable y TQuery, y con esos componentes el resultado seria muy parecido con ambas bases de datos.

No se si para preguntar como solucionar esto tengo que abrir otro hilo, o puedo hacerlo en este mismo, voy a ponerlo aqui y si hay que cambiarlo me lo comentais y creo uno nuevo donde corresponda.

Aqui explicare un poco mas mi problema, tengo que unir los campos de 2 tablas en otra resultante, uniendo solo los campos necesarios, el unico gran problema es que el tipo de dato de una de las tablas es string y en la tabla resultante tiene que ser un timestamp(esto es necesario para siguientes consultas y funcionar correctamente con el valor), he probado con un stored procedure para que fuese el servidor firebird el que hiciese la conversion pero al invocar despues el stored procedure desde delphi me da un error, creo que con el dialect de la base de datos, aunque no estoy seguro.

Tambien he estado viendo por la documentacion que me aporto ecfisa que un stored procedure puedo ejecutarlo desde un IBSQL, pero no he entendido como se hace, por eso he usado el IBstoredproc.

A continuacion pongo el codigo del stored procedure por si hay alguien que ve algo mal, posiblemente con la funcion de conversion de string a timestamp.

El error que me da al ejecutar es :
Project compara.exe raised exception class EIBInterBaseError with message 'conversion error from string "20/06/2011 19:37:17" -sql_dialect set database dialect n'

El codigo

Código:
CREATE OR ALTER PROCEDURE INSERTAR 
as
declare variable dn varchar(255);
declare variable sc double precision;
declare variable dt varchar(255);
declare variable st varchar(255);
declare variable cad varchar(255);
declare variable t timestamp;
declare variable rt timestamp;
declare variable ad varchar(255);
declare variable tn varchar(255);
begin
  /* Procedure Text */
FOR SELECT PHONE.TELNO AS TELNO, PHONE.ADDRESS AS ADDRESS, TAG26.RPTIME AS RPTIME, TAG26.STARTTIME AS STARTTIME, TAG26.DURATTIME AS DURATIME, TAG26.SUMCOIN AS SUMCOIN, TAG26.DIALNO AS DIALNO
FROM PHONE, TAG26
WHERE PHONE.IDNO = TAG26.IDNO
INTO :TN, :AD, :RT, :ST, :DT, :SC, :DN      DO
begin
    CAD = substring(:st  from 7 for 2) || '/' || substring(:ST from 5 for 2) || '/' || substring(:st from 1 for 4) || ' ' || substring(:st from 9 for 2) || ':' || substring(:st from  11 for 2) || ':' || substring(:ST from 13 for 2);
    T = cast (cad as timestamp) ;
end
    INSERT INTO tic(TELNO, ADDRESS, RPTIME, STARTTIME, DURATIME, SUMCOIN, DIALNO)
    VALUES (:TN, :AD, :RT, :T, :DT, :SC, :DN);
  suspend;
end^
Muchas gracias

Última edición por juanlito fecha: 23-08-2011 a las 13:03:01.
Responder Con Cita