![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Reemplazar en lugar de insertar
He buscado por el foro pero no supe encontrarlo. Antes de todo gracias por la ayuda.
Uso Delphi 7 y firebird. En un momento determinado creo una tabla y en ella grabo unos registros, estos los paso mediante sql a una segunda tabla. Lo hago así... Cita:
No sé cómo puedo hacer para que los registros si ya existen se reemplacen y si son nuevos se añadan. Pd- Antes usaba el batchmove pero va muy lento... Gracias de nuevo. |
#2
|
||||
|
||||
Pues creo que no te queda otra que primero hacer la búsqueda (por clave primaria) y dependiendo de si lo encentra o no realizar el INSERT o UPDATE.
Otra opción, pero que en el fondo es lo mismo, es realizar el INSERT, capturar el error de clave duplicada y en ese momento realizar el UPDATE.
__________________
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. |
#3
|
||||
|
||||
Busca detalles sobre el comando MERGE de Firebird.
Por ejemplo aqui :http://www.firebirdsql.org/refdocs/l...d21-merge.html ... y te sorprenderás, al igual que lo hice yo en su día, del potencial de esa instrucción. ![]()
__________________
Piensa siempre en positivo ! |
#4
|
|||
|
|||
Gracias mi miraré Merge... y si no a hacer lectura sequencial...
|
#5
|
||||
|
||||
![]() Aunque me llama la atencion del motivo de insertar muchas veces los mismo datos, pues no acabo de enteder el por qué
![]() Bueno.. en MySQL existe la sentencia REPLACE que funciona exactamente como INSERT, excepto que si un valor de la tabla tiene el mismo valor que un nuevo registro para un índice PRIMARY KEY o UNIQUE , el antiguo registro se borra antes de insertar el nuevo. ![]() ![]() Saludos... ![]()
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7 |
#6
|
||||
|
||||
No había oído sobre este comando. Curioso e interesante.
![]()
__________________
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. |
#7
|
|||
|
|||
Gracias rgstuamigo, ya vi que MySql daba la posibilidad, pero Firebird no...
Explicaré porque debo hacer lo que parece una cosa ilógica... El programa lanza un pac de albaranes, estos puede que sean los definitivos o no... En el caso de que lo fueran, los albaranes se graban en un archivo definitivo. El problema es que algunas veces, antes de sacarlos se dan cuenta que deben hacer modificaciones... Con lo que vuelven a lanzarlos y la información se debe reemplazar en el archivo definitivo. No nos sirve editar el albaran uno a uno, las modificaciones suelen ser en bloques, y la gestión de modificar es más complicada por la forma de trabajo que la de volver a lanzar y reemplazar... No sé si me habré explicado bien. En cualquier caso es lo que necesito. A todos muchos gracias. Si consigo algo con MERGE lo publico. |
#8
|
|||
|
|||
Cita:
![]() Gracias gluglu y a todos los que habeis aportado algo. Para que funcionara he tenido que actulizar Firebird a una versión más moderna, pues esta instrucción funciona a partir de la 2.1. Una vez realizada la actualización he implantado este código... Ahora estoy probando si funciona bien o no, el código es este. Cita:
Última edición por campiki fecha: 31-03-2011 a las 12:18:55. |
#9
|
|||
|
|||
Funciona bien y rápido...
|
#10
|
||||
|
||||
Me alegro !
![]()
__________________
Piensa siempre en positivo ! |
#11
|
||||
|
||||
Vaya, no conocía esa posibilidad
![]() |
#12
|
||||
|
||||
.... nunca te acostarás sin saber algo nuevo !
![]() ![]() ![]() ![]() Incluso después de tanto tiempo usar tu BBDD preferida. Por lo cual sigue siendo válida la teoría de revisar cada 2 o 3 años el manual de lo que estás utilizando, porque resulta que te das cuenta de que existe algo que ni siquiera sabías que podía existir ! ![]()
__________________
Piensa siempre en positivo ! |
#13
|
|||
|
|||
Cita:
![]() Realmente hecho de menos la velocidad de Cobol bajo Unix, cuando consiga esa velocidad de precesamiento de datos que tenía antes, seré un hombre feliz... ![]() Seguiré investigando/preguntado ![]() |
#14
|
|||
|
|||
Donde dije digo digo Diego...
Funciona... pero, sólo si la tabla la tengo en Local, cuando la tabla la tengo en red me da error... ¿Alguna sugerencia? |
#15
|
||||
|
||||
Sí, te sugiero que pongas aquí el error
![]() |
#16
|
|||
|
|||
El error es el siguiente.
Código:
Dynamic SQL Error SQL Error code = -104 Token Unknown - line 1, Column 0 MERGE. Si ejecuto en modo local, tanto en el servidor como en el cliente, funciona, sólo da error en red!!! Gracias. |
#17
|
||||
|
||||
Entonces en red ¿qué quiéres decir exactamente? ¿que está en otro ordenador de servidor?, entonces es que ese servidor tiene otra versión de firebird seguramente.
|
#18
|
|||
|
|||
Tiene la misma... Ya lo comprobé y si ejecuto el programa directamente en local en cualquier máquina funciona, sólo cuando accedo a la información por red es cuando da el error... Raro raro raro...
|
#19
|
||||
|
||||
El error que te dá te está indicando que no entiende el comando MERGE.
Algo tienes que tener con diferentes versiones de Firebird, o con algún tipo de configuración específica. Te funciona el resto de la aplciación ? Puedes acceder a la BD en red ? Si es así, y lo que pasa es que no entiende el comando MERGE entonces es la versión, como te indica Casimiro. Si ni siquiera puedes ejecutar la aplicación u otro parte de tu código, entonces es que no estás accediendo a la BD.
__________________
Piensa siempre en positivo ! |
#20
|
|||
|
|||
Todo funciona correctamente. Menos el Merge en Red.
Ya he comentado, la versión de Firebird es la misma en las dos máquina, todo funciona correctamente menos Merge. Seguiré buscando... |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Insertar registro en grilla en un lugar particular | zugazua2001 | Varios | 3 | 05-02-2010 16:14:06 |
Como insertar una tabla en un lugar especifico....WORD | juliobuitrago | Servers | 3 | 02-10-2008 18:00:05 |
Cada cosa en su lugar | jcarteagaf | Humor | 2 | 22-05-2008 15:58:53 |
Lugar en un String | Carmelo Cash | Varios | 2 | 13-08-2004 15:20:47 |
El mas novato del lugar | pepelu1975 | OOP | 1 | 10-02-2004 16:55:39 |
![]() |
|