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 28-03-2007
_Willa _Willa is offline
Miembro
 
Registrado: jun 2003
Ubicación: Madrid
Posts: 26
Poder: 0
_Willa Va por buen camino
Exclamation Comandos SQL para añadir o modificar

Buenas!,,

Lo cierto es que la primera vez que vuelco , se realizará sobre todos los
registros son añadidos, pero la segunda vez que use este, pueden existir esos registros por lo que debera solo actualizar los campos.

Por ejemplo tengo un tabla _Almacen que contiene campos IdProducto,IdNombre,IdFechaCaducidad, y por ejemplo se trata de mover
hacia otra tabla _Historica los que cumplan una determinada fecha de caducidad.

- Es decir, no se si me estoy liando un poco.
- Buscar IdProducto, comprobar que existe, sino añadirlo y si existe
actualizarlo, ... todo sobre la tabla _Historica.

Uso Interbase, atraves de una sentencia sql.

TIBSQL *sql_almacen = ib.DefineSQL();
sql_almacen->SQL->Add("Select * from _Almacen");
sql_almacen->SQL->Add("where IdFechaCaducidad<:fecha");
sql_almacen->Params->ByName("fecha")->AsDateTime = tMiFecha;
sql_almacen->ExecQuery();

ya se que esto no es asi, pero es lo que tengo de momento para que
os hagais una idea de como lo tengo ...

Alguien me puede dar alguna idea ?
Responder Con Cita
  #2  
Antiguo 28-03-2007
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 23
poliburro Va por buen camino
Esto quedaría de perlas en un Sp

Esto actualizará los existentes

Código SQL [-]

      Update Destino
           Set Destino.Campo = Origen.Valor
         From Destino 
   Inner Join (Select ClaveArticu, ValorCampo
                    From Origen 
                  Where Fecha >= Inicio And
                           Fecha <= Fin
                  ) As Origen
             On Destino.ClaveArticu = Origen.ClaveArticu


Esto Insertará los nuevos (Mi favorita por cuestiones de rendimiento)

Código SQL [-]
  Insert 
     Into Destino
           (Campos)
           Select Campos
             From (Select ClaveArticu, Campos
                        From Origen 
                      Where Fecha >= Inicio And
                                Fecha <= Fin
                     ) As Origen
        Left Join  Destino
                On Origen.ClaveArticu = Destino.ClaveArticu 
     Where Not Destino.AlgunCampo is null

Esta otra aplica, pero es más costosa en cuestión de rendimiento

Código SQL [-]
  Insert 
     Into Destino
             (Campos)
   Select Campos
    From Origen 
   Where Fecha >= Inicio And
                Fecha <= Fin And
                 CveArticulo Not In (Select CveArticulo From Destino)


Suerte
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #3  
Antiguo 29-03-2007
_Willa _Willa is offline
Miembro
 
Registrado: jun 2003
Ubicación: Madrid
Posts: 26
Poder: 0
_Willa Va por buen camino
Seguimos con la Sencia SQL

Gracias poliburro por tu apreciación pero encuentro un pequeño detalle
que todavia no tengo claro.

La secuencia SQL ( q puede estar en un SP, como bien dices )
El Seudo-codigo, debe ser algo asi como ....

mientras no sea Fin Fichero
si reg existe
entonces
Actualizar
sino
Añadir
fin-si
fin-mientras

Como me lo das en dos partes no sabemos q registros deben actualizarse
y cuales deben añadirse, no ? , acaso puede estar en dos bloques distintos
o es necesario formar uno solo tal y como te pongo en el seudo-codigo

Saludos, y como bien dices, siempre hay una piedra en el zapato y se llama Rajoy y amigos!!
Responder Con Cita
  #4  
Antiguo 29-03-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
La filosofía de poliburro es diferente:
El SQL de Update:
Actualiza los productos que ya existen en el Histórico con los nuevos datos de Almacen

Y después:

Su SQL favorita (inserción de nuevos productos en histórico):
Busca los productos de almacen que no existen en el histórico.
Inserta en histórico dichos productos

Las dos consultas anteriores son excluyentes, es decir, ningún registro puede entrar en ambas consultas.

Es exactamente lo que pides, pero hecho de forma "eficiente" y por lotes.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 29-03-2007 a las 13:42:07.
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
Script de comandos para firebird djemix Firebird e Interbase 1 01-02-2007 14:31:57
manual para aprender delphi(comandos) jermy Varios 3 01-12-2006 22:56:11
shell para comandos del dos sarga API de Windows 1 16-04-2004 03:55:33
Comandos para Epson TM-U220B MAGRANA Impresión 3 12-01-2004 09:56:45
Añadir/modificar Regs. En Tabla Con Filtro txuseibar Conexión con bases de datos 5 10-10-2003 17:05:21


La franja horaria es GMT +2. Ahora son las 21:11:37.


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