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 Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-04-2008
mcalmanovici mcalmanovici is offline
Miembro
 
Registrado: jun 2006
Posts: 78
Poder: 18
mcalmanovici Va por buen camino
Variable en un update.

Hola gente:
tengo el siguiente problema y como siempre aca le encuentran solúcíon planteo el mismo;
Quiero ejecutar desde un store procedure en firebird la sentencia insert into tabla (campo1,variable) values (:campo,:campo3). Siendo la variable distinta para cada insert. Es decir el insertt está en un while y la variable puede ser la primera vez que ingresa en el while campo2 (o sea variable = campo2) pero la segunda vez puede ser campo3 (o sea variable = campo3).
Mi pregunta es como hago para que me tome la variable en el insert.
Probé haciendo insert into tabla1 (campo1,:variable) values (:campo,:campo3), también como insert into tabla1 (campo1,"variable") values (:campo,:campo3) y también insert into tabla1 (campo1, '+variable+') values (:campo,:campo3) pero de ninguna manera de estas me deja compilar. Alguna idea??.....

Muchas gracias por el tiempo que le dedican a este foro.
Saludos.
Mariano.
Responder Con Cita
  #2  
Antiguo 01-04-2008
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
Hola mcalmanovici

en realidad no entendí muy lo que quieres hacer... sobre todo

Cita:
Siendo la variable distinta para cada insert.
según lo que entedí... quieres insertar en una tabla a través de un SP en Interbase... un dato en un campo, pero no siempre será en el mismo campo...

si es así... creo que debes hacer un SP que inserte datos en todos los campos y que le pases datos por variables para todos los campos..

acuerdate que si los campos no permite nulos... no podrás insertar un solo campo de un registro por que te dará error....

salu2....

PS: pon algo de ejemplo...
__________________
BlueSteel
Responder Con Cita
  #3  
Antiguo 01-04-2008
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Poder: 21
RONPABLO Va por buen camino
depronto puede encontrar una idea importante para organizar lo que quiere aquí
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H"
Responder Con Cita
  #4  
Antiguo 01-04-2008
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Poder: 21
RONPABLO Va por buen camino
o por aquí también hay otra idea
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H"
Responder Con Cita
  #5  
Antiguo 03-04-2008
mcalmanovici mcalmanovici is offline
Miembro
 
Registrado: jun 2006
Posts: 78
Poder: 18
mcalmanovici Va por buen camino
A ver si me explico un poco mejor.

Voy a poner un ejemplo más concreto.
En el store procedure tengo:


Código SQL [-]CREATE PROCEDURE PROCESAR_DIA_DEL_MES (
MES INTEGER,
ANIO INTEGER,
DIA INTEGER)
AS/*----*/
declare variable remoteterminalid integer;
declare variable cantidad_total_reporte integer;
declare variable cnt integer;
declare variable fechaIni date;
declare variable fechaFin date;
declare variable sla date;
BEGIN
/* Procedure body */
fechaIni = Anio||'-'||Mes||'-'||Dia||' 00:00:00';
fechaFin = Anio||'-'||Mes||'-'||Dia||' 23:59:59';
sla = 'DIA'||IA||'_SLA'; //esta es la variable que quiero poner
//en el insert o en el update y no puedo porque me tira error de compilación.
for SELECT tr.remoteterminalid AS REMOTETERMINALID,
count (tr.datetime) as CANTIDAD_TOTAL_REPORTE
from tsdreport tr left join remoteterminal rt on (tr.remoteterminalid=rt.remoteterminalid)
where tr.datetime >= :fechaIni and
tr.datetime <= :fechaFin
group by tr.remoteterminalid
into:remoteterminalid,:cantidad_total_reporte
do
begin
select count(*)
from TEMPO_MCA_SLA
where REMOTETERMINALID = :remoteterminalid
into:cnt;
/*EL PROBLEMA ES QUE NO ACEPTA QUE PONGA UNA VARIABLE EN EL SET Y EN EL INSERT INTO, EN ESTE
CASO SLA*/
if (cnt <> 0) then
begin
update TEMPO_MCA_SLA set sla = :cantidad_total_reporte where REMOTETERMINALID = :remoteterminalid;
end
else
begin
insert into TEMPO_MCA_SLA (REMOTETERMINALID,sla) values (:remoteterminalid,:cantidad_total_reporte);
end
end
SUSPEND;
END




El problema lo tengo con el sla que esta en negrita que como verán es una variable que va cambiando cada vez que llamó al store procedure, ya que la tabla TEMPO_MCA_SLA tiene 31 campos y yo los voy a ir actualizando uno por uno.
No sé si ahora me pude explicar un poco mejor.

Muchas gracias por la ayuda que me dan siempre.

Última edición por mcalmanovici fecha: 03-04-2008 a las 14:40:03.
Responder Con Cita
  #6  
Antiguo 03-04-2008
Avatar de RolphyReyes
RolphyReyes RolphyReyes is offline
Miembro
 
Registrado: ago 2004
Ubicación: Santo Domingo
Posts: 285
Poder: 20
RolphyReyes Va por buen camino
Exclamation

Saludos.

Como bien explica los enlaces indicado por RONPABLO puedes utilizar EXECUTE STAMENT para esta operación.

Puedes buscar referencia sobre esta sentencia también en el Release Notes de Firebird.

Hasta luego.
__________________
Gracias,
Rolphy Reyes
Responder Con Cita
  #7  
Antiguo 03-04-2008
mcalmanovici mcalmanovici is offline
Miembro
 
Registrado: jun 2006
Posts: 78
Poder: 18
mcalmanovici Va por buen camino
Sigo con el mismo problema

Hola,
si con ese execute stament hago lo siguiente:
Código SQL [-]
   stins = 'insert into TEMPO_MCA_SLA (REMOTETERMINALID,sla) values (:remoteterminalid,:cantidad_total_reporte)';
   EXECUTE STATEMENT :stins;

Y me sale un error que no conoce remoteterminalid. Si pongo
Código SQL [-]
   stins = 'insert into TEMPO_MCA_SLA (REMOTETERMINALID,sla) values (1,2)';
   EXECUTE STATEMENT :stins;
me sale que no conoce sla que es la variable que yo quiero que vaya cambiando según el día que yo le pasé.
Por lo cual con el exectue statement tengo el mismo problema. No sé si lo estaré usando mal o existe alguna otra solución.

Muchas gracias.
Mariano.
Responder Con Cita
  #8  
Antiguo 03-04-2008
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Poder: 21
RONPABLO Va por buen camino
y que tal si lo pones así??
Código SQL [-]
stins = 'insert into TEMPO_MCA_SLA (REMOTETERMINALID,' || sla || ') values (1,2)';
     EXECUTE STATEMENT :stins;
Me imagino que sla es una variable de tipo texto donde va el nombre del campo que quiero usar
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H"
Responder Con Cita
  #9  
Antiguo 03-04-2008
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Tienes que concatenar dichos valores en esa variable que haz llamado stins, así:
Suponiendo que tienes un parámetro de entrada llamado Nombre_campo y otro llamado Valor_campo, la cosa sería...

Código SQL [-]
stins = 'insert into TEMPO_MCA_SLA ('||:Nombre_campo||',sla) values ('||Valor_campo||',:cantidad_total_reporte)';
   EXECUTE STATEMENT :stins;

Quizá me falte alguna comilla antes y después de ||Valor_campo||, todo depende del tipo de campo que estas manejando, si es de tipo char, varchar o Date por ejemplo... las vas a necesitar, si el tipo de campo es numérico, no.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #10  
Antiguo 03-04-2008
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por RONPABLO Ver Mensaje
y que tal si lo pones así??

Código SQL [-]
stins = 'insert into TEMPO_MCA_SLA (REMOTETERMINALID,' || sla || ') values (1,2)';
EXECUTE STATEMENT :stins;




Me imagino que sla es una variable de tipo texto donde va el nombre del campo que quiero usar
Ahhh, ¿Era SLA?, crei que era REMOTETERMINALID, bueno, pero la idea es esa, creo que con esos dos ejemplos ya haz aprendido a usar el Execute statement .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #11  
Antiguo 03-04-2008
mcalmanovici mcalmanovici is offline
Miembro
 
Registrado: jun 2006
Posts: 78
Poder: 18
mcalmanovici Va por buen camino
Ya pude solucionarlo

Cita:
Empezado por jhonny Ver Mensaje
Tienes que concatenar dichos valores en esa variable que haz llamado stins, así:
Suponiendo que tienes un parámetro de entrada llamado Nombre_campo y otro llamado Valor_campo, la cosa sería...


Código SQL [-]stins = 'insert into TEMPO_MCA_SLA ('||:Nombre_campo||',sla) values ('||Valor_campo||',:cantidad_total_reporte)';
EXECUTE STATEMENT :stins;




Quizá me falte alguna comilla antes y después de ||Valor_campo||, todo depende del tipo de campo que estas manejando, si es de tipo char, varchar o Date por ejemplo... las vas a necesitar, si el tipo de campo es numérico, no.

Muchas gracias RONPABLO y jonnhy. Después probando me di cuenta que era como ustedes me están diciendo. Y cuando iba a postear la solución ya vi que me respondieron.
Vuelvo a agradecer por su cooperación y por la rapidez que contestaron.

Saludos.

Mariano.

Pd: igual copio el cógido tal cual como a mí me anduvo:
Código SQL [-]
stins = 'insert into TEMPO_MCA_SLA (REMOTETERMINALID,' ||:sla|| ') values (' ||:remoteterminalid|| ',' ||:cantidad_total_reporte||')';
   EXECUTE STATEMENT :stins;
    end
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
UPDATE con seccion llamada UPDATE sql's MyDAC karlaoax SQL 4 25-04-2007 22:10:50
variable dentro de una variable molinero1 Varios 3 23-04-2007 12:44:48
SQL Update Gustavo Gowdak SQL 1 29-06-2006 23:11:07
Update registro - fallo con variable Gorehide SQL 4 13-07-2004 19:12:32


La franja horaria es GMT +2. Ahora son las 11:05:24.


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