Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-01-2006
La__X La__X is offline
Miembro
 
Registrado: ene 2006
Posts: 46
Poder: 0
La__X Va por buen camino
Red face Insertar datos cuando una tabla tiene col con identity

Holas,
He estado buscando sin suerte, como hacer para insertar datos en una tabla que tiene una columna con identity P.J:
TDepartamento
IDdpto int identity (1,1)
IDNombreDpto varchar etc etc
Quiero hacer un SP para insertar pero mi gran duda es como hago para la col IDdpto? Deberia hacer una funcion que me devuelva el ultimo IDdpto q tengo registro y apartir de ese resultado insertarlo para registrar un nueva fila? o alguna forma un takin + facil?
GraX
Responder Con Cita
  #2  
Antiguo 19-01-2006
cuburu cuburu is offline
Miembro
 
Registrado: mar 2005
Posts: 63
Poder: 20
cuburu Va por buen camino
Quizas...

Podrías utilizar el Store procedure para almacenar los datos que necesites hacer de forma manual y despues utilizar un trigger Before insert para identificar el último registro que se encuentra almacenado en tu Tabla.

Ahorita no me acuerdo bien de la sintaxis pero lo que debes de hacer es asignar un generador al campo que deseas incrementar basandote en su último valor, así que resumiendo, deberías de documentarte un poco en buscar los siguientes conceptos de bases de datos:

Generadores.
Triggers ó disparadores.
Llamadas y creación de procedimientos.

te recomiendo le heches un vistazo a la pagina www.firebird.com.mx/ en la seccion de artículos/articulos sobre firebird e Interbase. Vienen muchos PDF's sobre como hacer esto que te dije.

Suerte.
Responder Con Cita
  #3  
Antiguo 19-01-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por La__X
...como hacer para insertar datos en una tabla que tiene una columna con identity.
...un SP para insertar pero mi gran duda es como hago para la col IDdpto?
Tal vez no te he entendido bien, pero si es una columna identity no debes darle valor; Ahí está la gracia de éste tipo de Datos, que el SGBD se encarga de colocarlos.
Realiza el insert omitiendo ese valor.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 19-01-2006
La__X La__X is offline
Miembro
 
Registrado: ene 2006
Posts: 46
Poder: 0
La__X Va por buen camino
Red face Pero...

Cita:
Empezado por Neftali
Tal vez no te he entendido bien, pero si es una columna identity no debes darle valor; Ahí está la gracia de éste tipo de Datos, que el SGBD se encarga de colocarlos.
Realiza el insert omitiendo ese valor.
Estructura de TDistrito
IDdistrito int identity(1,1) ..... -------------> esta en mi col problema
Idnombredistrito
iddepartamento etc etc


--Este es mi SP:
CREATE PROCEDURE InsertaDistrito
@NombreProvincia varchar (20),
@NombreDistrito varchar (20)
as
insert into TDistrito values ( ????,@NombreDistrito,@NombreProvincia)
go

Se tengo q registrar tres datos para una fila de TDistrito como hago para la columna que es identity???????
Responder Con Cita
  #5  
Antiguo 19-01-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Simplemente no lo pongas (utiliza los nombre de campo).

Código SQL [-]
insert into TDistrito (Idnombredistrito, iddepartamento,...) 
values (@NombreDistrito,@NombreProvincia,...)
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 19-01-2006
La__X La__X is offline
Miembro
 
Registrado: ene 2006
Posts: 46
Poder: 0
La__X Va por buen camino
Talking

Cita:
Empezado por Neftali

Código SQL [-]
insert into TDistrito (Idnombredistrito, iddepartamento,...) 
values (@NombreDistrito,@NombreProvincia,...)
ISi funciono
Graciassssss
Y de Casualidad Como Hago para reiniciar ese identity,
osea por ejemplo he borrado sus unicos 10 registros.. como hago para una vez vacia se reinicie en 1??
Responder Con Cita
  #7  
Antiguo 19-01-2006
Avatar de fabianbbg
fabianbbg fabianbbg is offline
Miembro
 
Registrado: ago 2003
Ubicación: Corrientes, Argentina
Posts: 80
Poder: 21
fabianbbg Va por buen camino
hola:

Si mal no recuerdo vos trabajas con un SQL Server 2000, ahora que pudiste insertar registros, para saber el ultimo ID

(identity) generado se consulta con :

Código SQL [-]
  
 Insert into nombre_tabla ...    
 declare @id  int
 set @id=ident_current('nombre_tabla')
 select @id


Con este código, tenes en @ID el valor del ultimo identidad generado para esa tabla, lo podrias colocar todo dentro de un SP , y cuando este se ejecute te devuelva el Id generado..

Con respecto a "volver" el contador autoincremental al valor de inicialización:
Podes usar TRUNCATE TABLE nombre_tabla : truncate borra todos los registros de la tabla y le devuelve la "marca de agua" inicializando la identidad, que es lo que vos queres.
El inconveniente es que la tabla no debe tener relaciones de clave foranea para que el truncate funcione, sino da error.

Asi que tendrias que eliminar las relaciones y volver a crearlas luego del truncate, podrias hacer todo en un solo script.

La otra que te queda es eliminar el campo.. y volver a crearlo, eso inicializaria el contador tambien..

Espero te sirvan las sugerencias...
Exitos..
__________________
desde Corrientes, Argentina..
Cuna del Libertador de America
Responder Con Cita
  #8  
Antiguo 19-01-2006
La__X La__X is offline
Miembro
 
Registrado: ene 2006
Posts: 46
Poder: 0
La__X Va por buen camino
Hay una forma de resetar:
DBCC CHECKIDENT ('Nombre_de_la_Tabla'‚ RESEED‚ 1)
Pero el chiste es que solo se pueda hacer cuando el identity no es clave primaria y no es referenciada por otra tabla.
Creo q voy a tener q hacer lo q me recomendo fabianbbg, quitar momentaneamente las relaciones...hacer un truncate y reeestableces las relaciones.. lamentablemnt hara que este proceso se ponga lento cuanda haya muchos registros .
Espero encontrar alguna otra sol
Gracias por las Rptas
Responder Con Cita
  #9  
Antiguo 20-01-2006
Avatar de fabianbbg
fabianbbg fabianbbg is offline
Miembro
 
Registrado: ago 2003
Ubicación: Corrientes, Argentina
Posts: 80
Poder: 21
fabianbbg Va por buen camino
holas:
Escribiste:
Cita:
Empezado por La__X
Pero el chiste es que solo se pueda hacer cuando el identity no es clave primaria y no es referenciada por otra tabla.

Che.. ¿pero es necesario usar el identity como dato en tu aplicación? , o sea mostrar ese nro al usuario y considerarlo en la logica de tu programa¿?

Te pregunto porque si vos no lo mostras.. no hace falta tener que reiniciar el contador..

Por ahi si lo que necesitas es un numero consecutivo o una secuencia cronologica, tal vez seria mejor calcular ese número.

Lo que te recomiendo si.. es no mostrar la clave primaria de la tabla al usuario final.

Espero soluciones tus problemas
EXITOS!
__________________
desde Corrientes, Argentina..
Cuna del Libertador de America
Responder Con Cita
  #10  
Antiguo 20-01-2006
La__X La__X is offline
Miembro
 
Registrado: ene 2006
Posts: 46
Poder: 0
La__X Va por buen camino
[quote=fabianbbg]holas:
Che.. ¿pero es necesario usar el identity como dato en tu aplicación? , o sea mostrar ese nro al usuario y considerarlo en la logica de tu programa¿?
quote]

Obviamente que no voy a mostrar el PK al usuario porq no le sirve y no entenderia el proposito del numero, lo que pasa es que pensando a futuro.. cuando el identity llegue a su tope?, o cuando hagan un vaciado de BD, me parece que estaria bien que si borran todos los registros al llenar otra vez la tabla deberia comienzas en uno de nuevo, (eso para el q administre la BD).
Entretanto sigo pensando la mejor forma de arreglar esto, porque de todas maneras lo quieren
Responder Con Cita
  #11  
Antiguo 21-01-2006
Avatar de fabianbbg
fabianbbg fabianbbg is offline
Miembro
 
Registrado: ago 2003
Ubicación: Corrientes, Argentina
Posts: 80
Poder: 21
fabianbbg Va por buen camino
Hola

Cita:
Empezado por La__X
cuando el identity llegue a su tope?,
(
mm pero mira que que el identity puede ser grande grande... llegaran a tantos registros?

del ayuda del SQL:
Cita:

bigint

Datos enteros (números enteros) comprendidos entre -2^63 (-9223372036854775808) y 2^63 -1 (9223372036854775807). El tamaño de almacenamiento es 8 bytes.

int

Datos enteros (números enteros) comprendidos entre -2^31 (-2.147.483.648) y 2^31 - 1 (2.147.483.647). El tamaño de almacenamiento es 4 bytes. El sinónimo en SQL-92 para int es integer
__________________
desde Corrientes, Argentina..
Cuna del Libertador de America
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
Insertar base de datos en acces con contraseña kakesoft Conexión con bases de datos 3 03-12-2005 00:35:17
Insertar y traer datos de una tabla en .NET Alexander .NET 0 26-08-2005 19:54:02
problemas selectSQL-Like, pasando datos desde código en el delphi Giniromero SQL 6 22-09-2003 17:49:49
Como insertar datos de una tabla en otra tabla? Salomon Firebird e Interbase 1 28-08-2003 11:29:40
Uno de Ingenieros Nuria Humor 0 09-07-2003 13:34:59


La franja horaria es GMT +2. Ahora son las 22:56:54.


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