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 20-10-2012
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
Consulta e inserción

Hola Como están?


Utilizo Firebird y me gustaría hacer una consulta de mi Tabla Empleado el cual mi parametro sea DNI me retorne el valor de mi ID_Empleado con este realizare la inserción en mi tabla AUSENCIA con tres campos mas utilizando tambien parametros.

Es posible hacer eso?

Lo intente de esta manera pero me da error tras error:

Código SQL [-]
INSERT INTO TAUSENCIAPOREMPL (id_empleados, Fecha_aus, motivo_aus)
    VALUES(:pCed1, :pfecha, :pMot) SELECT e.ID_EMPLEADOS FROM TEMPLEADOS e 
          where (e.CEDULA_EMPL =:pCed)

Que consejo me dan?


Saludos

novato_erick

PD: Siempre me salen las caritas... pero no van en el sql jajajaja

Última edición por ecfisa fecha: 20-10-2012 a las 20:46:36. Razón: Quitar íconos del código
Responder Con Cita
  #2  
Antiguo 20-10-2012
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Al menos hasta Firebird 1.5 no es posible realizar un Insert o Update que incluya un Select "al vuelo", como el de tu ejemplo. En casos así suele ser útil crear un procedimiento almacenado que reciba los parámetros necesarios y haga la operación correspondiente.

En cuanto a las caritas...


Última edición por Al González fecha: 20-10-2012 a las 19:49:49.
Responder Con Cita
  #3  
Antiguo 20-10-2012
celades1 celades1 is offline
Miembro
 
Registrado: ago 2005
Posts: 116
Poder: 19
celades1 Va por buen camino
Hola

yo lo haria asi

Código SQL [-]
 
INSERT INTO TAUSENCIAPOREMPL 
select e.ID_EMPLEADOS,:fecha,:motivo 
FROM TEMPLEADOS e 
where e.CEDULA_EMPL =:Ced





saludos
Responder Con Cita
  #4  
Antiguo 20-10-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola erik.

Además de lo que, muy gráficamente te sugiere Al , otra manera de impedir que aparezcan en el código es mediante las etiquetas [noparse] [/noparse].

Un ejemplo de como usarlas con parte de tu código: where (e.CEDULA_EMPL = [noparse]:p[/noparse]Ced)


Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 20-10-2012
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
Cita:
Empezando por: celades1

Hola

yo lo haría así

Código SQL [-]

INSERT INTO TAUSENCIAPOREMPL
select e.ID_EMPLEADOS,:fecha,:motivo
FROM TEMPLEADOS e
where e.CEDULA_EMPL =:Ced
Lo intente de esa manera pero siempre me manda que los valores de lectura y escritura no son iguales:
Cita:
An error was found in the application program input parameters for the SQL statement.Dynamic SQL Error.
SQL error code = -804.
Count of read-write columns does not equal count of values.

Con Al González:

Disculpa pero no había mencionado que utilizo Firebird 2.5 pero tampoco he encontrado como hacerlo. Opte por el procedimiento almacenado pero en ocasiones me manda a guardar dos registros...

Porque Sucede eso?


Saludos


novato_erick
Responder Con Cita
  #6  
Antiguo 20-10-2012
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por novato_erick Ver Mensaje
Con Al González:[...]Opte por el procedimiento almacenado pero en ocasiones me manda a guardar dos registros...

Porque Sucede eso?
En un momento te digo. Veamos, vulnerando firewall de novato_erick en proceso...

Mantén tu computadora encendida y conectada a Internet, que voy a revisar el código de ese procedimiento...
Responder Con Cita
  #7  
Antiguo 20-10-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Al González Ver Mensaje
En un momento te digo. Veamos, vulnerando firewall de novato_erick en proceso...
Mantén tu computadora encendida y conectada a Internet, que voy a revisar el código de ese procedimiento...


novato_erick, seguimos con la bola de cristal pasando la revisión anual, así que no podemos adivinar
Responder Con Cita
  #8  
Antiguo 20-10-2012
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
Upss lo siento pensé que lo había pegado el procedimiento discúlpenme chicos...

Código SQL [-]
SET TERM ^ ;

CREATE PROCEDURE INGRESARBCO(
  NOMBRE VARCHAR(30) CHARACTER SET NONE COLLATE NONE)
AS
BEGIN
   INSERT INTO TBANCOS (NOMBRE_BCO) VALUES(:NOMBRE);
END^

SET TERM ; ^

Hago lo siguiente para ejecutarlo:

Código SQL [-]
Execute procedure INGRESARBCO :Nombre;

Pero Creo que Solucione el problema investigando un poco más aquí mismo en el clubdelphi. El caso es que aparentemente no se puede hacer un commit desde el mismo procedimiento. Hay que hacerlo desde afuera es por eso que no miraba la inserción en la tabla ni refrescando... y cuando miraba la tabla sin registro ingresado lo que hacia era ejecutar varias veces el procedimiento es por eso que me insertaba varios registros... lo siento son cosas de puro novato.....

Estoy trabajando un pequeña aplicación el cual espero darle todo el trabajo al servidor espero que me vaya bien y deseen me suerte...

Saludos Chicos... por ahi de nuevo los molesto...


Gracias por su tiempo...
Responder Con Cita
  #9  
Antiguo 21-10-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Vale, está bien que lo hayas solucionado, pero lo que cuentas ahora no tiene absolutamente nada que ver con lo que preguntabas al principio
Responder Con Cita
  #10  
Antiguo 24-10-2012
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
Tienes razon casimiro al final mi conclusion no tiene que ver con el hilo. Sin embargo tome el consejo de Al Gonzalez de manejarlo con procedimientos el cual al principio me daba problema sin embargo aun tengo problema en realizar un procedimiento que me arroje mi id de mi tabla y haga inserciones en otra tabla con campos diferentes. ejemplo:

Código SQL [-]
CREATE PROCEDURE INGRESARADJUNTO1(
  HOJADVIDA CHAR(1) CHARACTER SET NONE COLLATE NONE,
  FOTO CHAR(1) CHARACTER SET NONE COLLATE NONE,
  CEDULA CHAR(1) CHARACTER SET NONE COLLATE NONE,
  TITULOS CHAR(1) CHARACTER SET NONE COLLATE NONE,
  REFERENCIAS CHAR(1) CHARACTER SET NONE COLLATE NONE,
  RP CHAR(1) CHARACTER SET NONE COLLATE NONE,
  EXAM CHAR(1) CHARACTER SET NONE COLLATE NONE)
AS
DECLARE VARIABLE ID INTEGER;
BEGIN
 INSERT INTO TADJUNTOSEMPL (ID_EMPLEADOS,HOJADEVIDA,FOTOCARNET,COPIACED,
                   COPIATITULOS,REFERENCIAS,RECORDPOLICIACO,EXAMEMBARAZO) 
                   VALUES (:ID,:HOJADVIDA,:FOTO,:CEDULA,:TITULOS,:REFERENCIAS,:RP,:EXAM); // necesito traer el id de la consulta
END;


Saludos

novato_erick
Responder Con Cita
  #11  
Antiguo 24-10-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Disculpa, pero no entiendo exactamente qué quieres hacer
Responder Con Cita
  #12  
Antiguo 24-10-2012
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
realizar una consulta poniendo un parametro de busqueda y que me devuelva el id para luego realizar insert por parametros en otra tabla..


Saludos
Responder Con Cita
  #13  
Antiguo 24-10-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Bien, aunque es algo muy general lo que has dicho, pero para que te hagas una idea, es fácil:

Código SQL [-]
CREATE PROCEDURE INGRESARADJUNTO1 (
  /**/
  codigo integer,
  /**/   
  HOJADVIDA CHAR(1), FOTO CHAR(1), CEDULA CHAR(1), TITULOS CHAR(1), REFERENCIAS CHAR(1), RP CHAR(1), EXAM CHAR(1) )
AS
DECLARE VARIABLE ID INTEGER;
BEGIN
  /* */  
  select campo from tablalaquesea   
  where codigo= :codigo   
  into :ID;
  /* */
  INSERT INTO TADJUNTOSEMPL (ID_EMPLEADOS,HOJADEVIDA,FOTOCARNET,COPIACED,
                           COPIATITULOS,REFERENCIAS,RECORDPOLICIACO,EXAMEMBARAZO)
  VALUES (:ID,:HOJADVIDA,:FOTO,:CEDULA,:TITULOS,:REFERENCIAS,:RP,:EXAM); /* necesito traer el id de la consulta */
END;
Responder Con Cita
  #14  
Antiguo 25-10-2012
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
Casimiro Muchas Gracias por tu gran ayuda... realice varias pruebas y no lo había podido lograr...

ahora me toca llamar el procedimiento de consulta de mi tabla de TEMPLEADO y llamarlo desde otro procedimiento para el id capturado lo pueda utilizar en otro procedimiento para insertar nuevos registros con el id capturado.... veré como me va...


Saludos


novato_erick
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
Hacer un DirtyRead a tras una consulta de insercion sherlock SQL 1 02-04-2009 12:16:49
insercion, modificacio y consulta DML broodwing009 Firebird e Interbase 2 08-11-2007 01:22:59
insercion en ado vroa74 Conexión con bases de datos 1 28-03-2007 01:13:27
insercion en GDB vroa74 Conexión con bases de datos 1 22-03-2007 12:09:39
Insercion de fecha Alexita22 MySQL 5 06-07-2006 19:57:44


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


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