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 21-12-2019
servicomp servicomp is offline
Miembro
 
Registrado: oct 2003
Ubicación: Cartago
Posts: 153
Poder: 21
servicomp Va por buen camino
De antemano muchas gracias por su colaboración

En primera medida ID es el nombre del campo que se autoincrementa cada vez que hacemos la inserción con su respectivo disparador. En segunda media usando Into :ID, da error ya que desconoce el Into en esta instrucción. Si colocamos la instrucción en el IBExpert funciona perfecto, pero con el Into nos da un error.
Responder Con Cita
  #2  
Antiguo 21-12-2019
servicomp servicomp is offline
Miembro
 
Registrado: oct 2003
Ubicación: Cartago
Posts: 153
Poder: 21
servicomp Va por buen camino
Compañeros se pudo hace funcionar la instrucción cono el siguiente código, aunque no es aplicable ya que no se puede capturar la variable.

Código Delphi [-]
SQLPrueba.SQL.Clear;
SQLPrueba.SQL.Add('INSERT INTO TABLA (VALOR1, VALOR2) VALUES (:V1, :V2) RETURNING ID');
SQLPrueba.ParamByName('V1').AsString:='PRUEBA';
SQLPrueba.ParamByName('V2').AsString:='MAS DE PRUEBA';
SQLPrueba.ExecSQL(False);

Al tratar de recoger el valor de Id con el siguiente codigo da el error

Código Delphi [-]
j:=SQLPrueba.FieldByName('ID').AsInteger;

Se presenta el error

Cita:
Field 'ID' not found
Responder Con Cita
  #3  
Antiguo 21-12-2019
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 338
Poder: 14
Caminante Va camino a la fama
Hola


Y si pruebas usando parambyname en vez de fieldbyname. Nunca he usado returning asi que no se si sera correcto hacerlo asi. Pero no pierdes nada probando.


Saludos
__________________
Caminante, son tus huellas el camino y nada más; Caminante, no hay camino, se hace camino al andar.
Antonio Machado
Responder Con Cita
  #4  
Antiguo 21-12-2019
servicomp servicomp is offline
Miembro
 
Registrado: oct 2003
Ubicación: Cartago
Posts: 153
Poder: 21
servicomp Va por buen camino
El mensaje es el mismo del anterior. Error

Usando el anterior código, efectivamente se inserta los campos, pero seguimos sin poder capturar el valor que retorna de la variable ID

De nuevo muchas gracias por sus respuestas
Responder Con Cita
  #5  
Antiguo 22-12-2019
servicomp servicomp is offline
Miembro
 
Registrado: oct 2003
Ubicación: Cartago
Posts: 153
Poder: 21
servicomp Va por buen camino
El problema al parecer se presenta es en el Delphi, bueno en el Embarcadero, ya que desde la consola de Firebird, inserta los campos y devuelve el valor del campo incrementado.

Al parecer desconozco la técnica para capturar el ID de una campo auto incremento al momento de insertar algunos campos.
Responder Con Cita
  #6  
Antiguo 22-12-2019
orodriguezca orodriguezca is offline
Miembro
 
Registrado: ene 2009
Posts: 221
Poder: 16
orodriguezca Va por buen camino
Cita:
Empezado por servicomp Ver Mensaje

Código Delphi [-]
SQLPrueba.SQL.Clear;
SQLPrueba.SQL.Add('INSERT INTO TABLA (VALOR1, VALOR2) VALUES (:V1, :V2) RETURNING ID');
SQLPrueba.ParamByName('V1').AsString:='PRUEBA';
SQLPrueba.ParamByName('V2').AsString:='MAS DE PRUEBA';
SQLPrueba.ExecSQL(False);

Creo que el problema está en
Código Delphi [-]
SQLPrueba.ExecSQL(False);
En su lugar utiliza
Código Delphi [-]
SQLPrueba.Open;
Responder Con Cita
  #7  
Antiguo 22-12-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Creo que debes usar Fields:
Código Delphi [-]
iValor := Query.Fields[0].AsInteger;
Responder Con Cita
  #8  
Antiguo 23-12-2019
Avatar de Kiranov
Kiranov Kiranov is offline
Miembro
 
Registrado: ago 2012
Ubicación: Chihuahua, Mexico.
Posts: 47
Poder: 0
Kiranov Va por buen camino
Buenos dias,

si estas usando los componentes de FireDAC, revisa la funcion GetLastAutoGenValue del componente TFDConnection, yo lo utilizo de la siguiente manera para recuperar el ultimo registro insertado:

Código Delphi [-]
fdquery1.SQL.Text:='insert into laboralperiods(useropening,iniamount,cajaopening) values(: paramuser,: paraminiamount,: paramcajaopenin)';
fdquery1.ParamByName('paramuser').AsString:=rzlabel8.Caption;
fdquery1.ParamByName('paraminiamount').AsFloat:=AdvMoneyEdit1.Value;
fdquery1.ParamByName('paramcajaopenin').AsString:=rzlabel3.Caption;
fdquery1.ExecSQL;
fdquery1.SQL.Text:='Select * from laboralperiods where control=: paramcontrol';
fdquery1.ParamByName('paramcontrol').AsInteger:= fdconnection1.GetLastAutoGenValue('Control');
fdquery1.Open();

"control" es el campo autoincrementado en la tabla de la base datos mysql.

Espero te sirva de algo,
Saludos.
__________________
Kiranov (Alberto Vega)
Chihuahua, Mexico.
---------------------------------------------------------------------------------
"El hardware es lo que hace a una máquina rápida;
el software es lo que hace que una máquina rápida se vuelva lenta."

Craig Bruce en 1990
---------------------------------------------------------------------------------
Responder Con Cita
  #9  
Antiguo 03-01-2020
servicomp servicomp is offline
Miembro
 
Registrado: oct 2003
Ubicación: Cartago
Posts: 153
Poder: 21
servicomp Va por buen camino
Cordial saludo compañeros y un feliz 2020 para todos

Acerca del RETURN en Firebird, este solo funciona en la consola o en el IBExpert, según el catalogo.

Al parecer para que funcione, lo tenemos que hacer desde un procedimiento en la base de datos que envíe el valor de return a una variable de nuestro programa y así poder grabar los registros de la tabla detalle. Claro esta que hasta el momento no he necesitado un procedimiento de estos, no lo he realizado, así que me tocará ensayar y luego les comento.

Otro compañero me dice que también se puede realizar de forma automática usando un SQLDataset, un DataSetprovide y un ClientDataSet para el maestro, y un SQLDataset y un ClientDataset con el Detalle, y que se enlazan con un DataSource. Funciona muy bien de forma automática.

Esperamos hacer las prácticas suficientes y su comportamiento para saber como trabajan mejor
Responder Con Cita
  #10  
Antiguo 03-01-2020
orodriguezca orodriguezca is offline
Miembro
 
Registrado: ene 2009
Posts: 221
Poder: 16
orodriguezca Va por buen camino
Yo insisto en que el problema es que estas ejecutando la consulta con ExecSQL y deberías hacerlo con Open. Revisa la entrada #11 de este hilo.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
como utilizo un campo con autoincremento. aurbano Tablas planas 8 26-10-2005 11:25:51
Campo autoincremento en FB Phacko Firebird e Interbase 1 02-08-2005 19:29:12
campo autoincremento para tabla con ADO VRO Conexión con bases de datos 2 06-06-2005 11:01:06
Problema al insertar con campo autoincremento predator SQL 0 23-11-2004 14:18:19
Obtener el valor de una campo autoincremento edum Conexión con bases de datos 2 26-08-2004 23:04:30


La franja horaria es GMT +2. Ahora son las 06:43:09.


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