Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Consulta e inserción (https://www.clubdelphi.com/foros/showthread.php?t=81195)

novato_erick 20-10-2012 16:37:13

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

Al González 20-10-2012 18:46:14

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...


celades1 20-10-2012 19:07:00

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

ecfisa 20-10-2012 19:57:06

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. :)

novato_erick 20-10-2012 20:44:53

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

Al González 20-10-2012 21:24:32

Cita:

Empezado por novato_erick (Mensaje 447543)
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...:cool:

Casimiro Notevi 20-10-2012 22:31:13

Cita:

Empezado por Al González (Mensaje 447546)
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...:cool:

:D:D:D

novato_erick, seguimos con la bola de cristal pasando la revisión anual, así que no podemos adivinar ;)

novato_erick 20-10-2012 22:53:49

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...

Casimiro Notevi 20-10-2012 23:22:11

Vale, está bien que lo hayas solucionado, pero lo que cuentas ahora no tiene absolutamente nada que ver con lo que preguntabas al principio :confused::eek:

novato_erick 24-10-2012 22:20:32

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

Casimiro Notevi 24-10-2012 22:31:55

Disculpa, pero no entiendo exactamente qué quieres hacer :confused:

novato_erick 24-10-2012 22:33:59

realizar una consulta poniendo un parametro de busqueda y que me devuelva el id para luego realizar insert por parametros en otra tabla..


Saludos

Casimiro Notevi 24-10-2012 22:46:46

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;

novato_erick 25-10-2012 01:09:42

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


La franja horaria es GMT +2. Ahora son las 06:04:36.

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