In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Añadir un registro

SQL databases
Responder
Avatar de Usuario
XeviCOMAS
Mensajes: 582
Registrado: Sab Mar 12, 2011 8:16 pm

Añadir un registro

Mensaje por XeviCOMAS »

Me estoy peleando en como hacer para insertar un registro en medio de una tabla.
Suponiendo que tengo una tabla con 11 registros

id cod descripcion
1 110 Pepe
2 111 Pepa
3 121 Juan
4 122 Juana
5 131 Jose
6 141 Emilio
7 142 Emilia
8 151 Fernando
9 152 Fernanda
10 161 Mario
11 162 Maria

Bien, EN ORDEN NATURAL de creación de la Tabla, quiero añadir un registro, cod 132 y descripción Josefa

Como puedo hacer para insertar un registro y que los registros por debajo del id 5 se "corran" una posición para que pueda poner el valor de ese nuevo registo en el id 6 ???

No se si me explico.

En una o varias sentencias Execute() algo así como...
INSERT INTO mitabla (cod,descripcion) VALUES ('000','nuevo'')
UPDATE mitabla SET cod = cod_registro_anterior, descripcion = descripcion_registro_anterior WHERE id > 5

y luego ya hacer
UPDATE mitabla SET cod = '132', descripcion = 'Josefa' WHERE id = 6

Alguien puede hecharme una mano ???
Un Saludo,
Xevi.
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5705
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Re: Añadir un registro

Mensaje por jfgimenez »

Xevi,

UPDATE mitabla SET cod=cod+1 WHERE cod>=132
INSERT INTO mitabla (cod,descripcion) VALUES (132,'Josefa')
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Avatar de Usuario
XeviCOMAS
Mensajes: 582
Registrado: Sab Mar 12, 2011 8:16 pm

Re: Añadir un registro

Mensaje por XeviCOMAS »

Gracias José,

De la manera que propones, el registro 6 Josefa se añadirà al final de la Tabla, con el id 12... no???
No es así... yo quiero que el id 12 tome los datos del registro del id 11, los del 11 los tome del 10... i así hasta el 6
Y el id 6 hago el UPDATE con los datos del registro 132 Josefa


El resultado final que deseo obtener, es el orden "natural" de la tabla de esta forma

id cod descripcion
1 110 Pepe
2 111 Pepa
3 121 Juan
4 122 Juana
5 131 Jose
6 132 Josefa
7 141 Emilio
8 142 Emilia
9 151 Fernando
10 152 Fernanda
11 161 Mario
12 162 Maria


Gracias por vuestro tiempo.
Un Saludo,
Xevi.
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9246
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: Añadir un registro

Mensaje por ignacio »

Buenos días,

Muy mala idea lo del orden natural. Eso no existe en SQL. Si quieres tener una ordenación por registro de entrada, pon un timestamp.

Es muy probable que el motor utilice mecanismos de recuperación de registros borrados o sencillamente de reetructuración de la tabla en base a su clave primaria y tu ordenación natural se vaya al traste.

Un saludo
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Avatar de Usuario
XeviCOMAS
Mensajes: 582
Registrado: Sab Mar 12, 2011 8:16 pm

Re: Añadir un registro

Mensaje por XeviCOMAS »

Al final, como lo necesito si o si "orden natural", por compatibilidad con otras funciones que utilizo...

Código: Seleccionar todo

      aItems := :QueryArray( "SELECT cod,descripcion FROM miBBDD.miTabla;" )
      HB_AIns( aItems, 6, { 132, 'Josefa' }, .T. )
      For n:=1 TO Len(aItems)
         cValues += IF( n>1, ",", "" ) + Chr(10) + "(" + aItems[n,2] + ", '" + aItems[n,3] ")"
      Next

      :Execute( "TRUNCATE miBBDD.miTabla;" )
      :Execute( "INSERT INTO miBBDD.miTabla (cod,descripcio) VALUES " + cValues )
Si hay alguna solución/aporte que se pueda mejorar, agradeceria cualquier sugerencia.

De momento, me vale/sirve de esta forma.

Gracias por vuestro tiempo.
Un Saludo,
Xevi.
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5705
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Re: Añadir un registro

Mensaje por jfgimenez »

XeviCOMAS escribió:Al final, como lo necesito si o si "orden natural", por compatibilidad con otras funciones que utilizo...
Como te ha dicho Ignacio, el "orden natural" no existe en SQL. Es más, ese "orden natural" rompe uno de los principìos del modelo relacional de bases de datos.

Si lo que necesitas es un campo al estilo de los recno() de los DBF, lo que puedes hacer es crear un campo autoincremental. En el caso de SQLite, ya existe uno por defecto, que se llama _RowId_, y en MariaDB lo puedes crear tú muy fácilmente.
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Responder