Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-01-2005
VRO VRO is offline
Miembro
 
Registrado: abr 2004
Posts: 230
Poder: 21
VRO Va por buen camino
Execute procedure

hola,¿que hay de nuevo?, vereis

mi problema puede que sea muy sencillo de solucionar pero me he ozecado y no veo el error.
He hecho un procedimiento almacenado para importar una tabla de Access a Interbase.

1º- utilizo un ADOQuery para leer los datos de la tabla en Access
2º- Ejecuto con un Query de interbase el procedimiento almacenado.

Acontinuación os pongo el código utilizado para ver si vosotros veis el error, porque yo ya no se que hacer.

Procedimiento almacenado:
Código SQL [-]
SET TERM!!;
CREATE PROCEDURE IMPORTAR (NUMERO INTEGER, FECHA DATE, LECTURA FLOAT, CONSUMO FLOAT) 
AS
 DECLARE VARIABLE var1 INTEGER;
  DECLARE VARIABLE var2 INTEGER;
BEGIN
      SELECT count(NUMERO)
      FROM lecturas
      where numero=:numero and fecha=:fecha
      INTO :var1;
      BEGIN
       IF (:VAR1=0) THEN
        begin
         select count(numero)
         from contadores
         where numero=:numero
         into :var2;
          if (:var2<>0) then
            INSERT INTO lecturas(numero,fecha,lectura,perdidas,consumo,est,tiempo,averiado,festivo,cerrado)
            VALUES (:NUMERO,:FECHA,:LECTURA,0,:CONSUMO,1,null,0,0,0);
         end
       ELSE
         UPDATE lecturas
         SET FECHA=:FECHA, LECTURA=:LECTURA,CONSUMO=:CONSUMO
         WHERE NUMERO=:NUMERO;
      END
END!!
SET TERM;!!

con este query llamo al procedimiento.
Código Delphi [-]
query.Close;
query.sql.Add('execute procedure importar '+ADOquery.fieldbyname('contador').Text+','+
+FormatDateTime('mm/dd/yy',ADOquery.Fieldbynem('fecha').asdatetime)+','+ADOQuery.fieldbyname('lectura').text+','+ADoquery.f  ieldbyname('consumo').text+'');
query.ExecSQL;

El error que da es:Unexpected end of command, podeis pensar que es porque en el execute procedure los parametros de entrada no les pobgo parentesis, si les pongo me da error en el paréntesis.

Yo pienso queigual es por pasar la fecha como String y ser date, en ese caso,¿ como le paso directamente como date?.

Fijo que es una tontería pero no consugo verlo.
Ante todo mi enorme agradecimiento.
Responder Con Cita
  #2  
Antiguo 25-01-2005
pacogarcia pacogarcia is offline
Registrado
 
Registrado: nov 2004
Posts: 5
Poder: 0
pacogarcia Va por buen camino
hola.

Prueba de esta forma:
Código PHP:
 
query
.Close;
query.sql.Add('execute procedure importar( numero, fecha, date, lectura,consumo)');
query.sql.Add('values(:numero,:fecha,:date,:lectura,:consumo)');
 
 
query.ParamByName('numero').AsString := ADOquery.fieldbyname('contador').Text;
 
Query.ParamByName('fecha').AsDateTime := ADOquery.Fieldbynem('fecha').asdatetime;
 ... 
// El resto de campos.
 
query.ExecSQL
El campo 'numero' lo he puesto como string, ya que tu lo tenias puesto con Text en la query pero tambien puedes pasarlo como integer.
Tienes mas informacion en la ayuda de Delphi.

Espero que te sirva.
Un saludo.
Responder Con Cita
  #3  
Antiguo 25-01-2005
VRO VRO is offline
Miembro
 
Registrado: abr 2004
Posts: 230
Poder: 21
VRO Va por buen camino
Thumbs up gracias Paco

Me va bien haciendole un pequeño arreglillo, total que me ha quedado así:

Código Delphi [-]
query.Close;
query.sql.Add('execute procedure importar( :numero, :fecha,:lectura,:consumo)');

query.ParamByName('numero').AsString := ADOquery.fieldbyname('contador').Text;
Query.ParamByName('fecha').AsDateTime := ADOquery.Fieldbynem('fecha').asdatetime;
... // El resto de campos.
query.ExecSQL;
Me ocurre un pequeño problemilla con la fecha que es cuando hago una comparación,insercion etc el formato fecha tiene que ser:'mm/dd/yy'
el formato que saco yo de la consulta query que me da el dato es 'dd/mm/yy',pero bueno eso sólo es cambiar el formato, ya lo he ehcho mas veces,(¡¡creo)

Una preguntilla, no se si te he comentado que saco los datos de una tabla de Access a la que accedo con un ADoQuery creo que si y para importar los datos hago el codigo que me pasaste dentro de un while cunado el while entra una vez lo inserta sin problemas, cuando entramos por segunda vez me pone error en execute

sabes porque muchas gracias.

Gracias

Última edición por VRO fecha: 25-01-2005 a las 12:52:33.
Responder Con Cita
  #4  
Antiguo 26-01-2005
pacogarcia pacogarcia is offline
Registrado
 
Registrado: nov 2004
Posts: 5
Poder: 0
pacogarcia Va por buen camino
hola de Nuevo.


Creo que el problema lo tienes porque pones dentro del bucle el
Código Delphi [-]
query.sql.Add('execute procedure importar( :numero, :fecha,:lectura,:consumo)');

Deberia quedar mas o menos asi:
Código Delphi [-]

// El texto de la sentencia SQL lo añades fuera del bucle.
query.sql.Add('execute procedure importar( :numero, :fecha,:lectura,:consumo)');
 
while not ADOQuery.eof do
begin
 Query.ParamByName('numero').AsString := ADOquery.fieldbyname('contador').Text;
 Query.ParamByName('fecha').AsDateTime := ADOquery.Fieldbynem('fecha').asdatetime;
 ... // El resto de campos.
 Query.ExecSQL;
 ADOQuery.Next;
end;
Un saludo.
Responder Con Cita
  #5  
Antiguo 26-01-2005
VRO VRO is offline
Miembro
 
Registrado: abr 2004
Posts: 230
Poder: 21
VRO Va por buen camino
ese era el fallo

Gracias Paco , ese era el fallo.

¡¡Jo!!, vaya tontería mira que no darme cuenta, no si cuando uno se ozeca, no ve más delante de sus ojos.

Muvhísimas gracias por tus respuestas que me han servido de mucha ayuda.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 08:36:07.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi