Forma de actualizar datos en sql

Post Reply
artu01
Posts: 306
Joined: Fri May 11, 2007 8:20 pm
Location: Lima

Forma de actualizar datos en sql

Post by artu01 »

Hola amigos:
Estoy pasando mi progs de dbf a sql, sufriendo pero ahí vamos, tengo una duda que espero me lo puedan aclarar.
En un sistema de facturación, a una factura existente se le llama para cambiar los datos de la cabecera y/o el detalle (pudiendo este ultimo aumentar, modificar y/o eliminar las filas del detalle)
En mi sistema de facturación yo muestro la facturas con xbrowse con la ayuda de una tabla temporal que se carga en memoria con datos proveniente de la bd.
En dbf al momento de grabar una factura modificada yo busco la factura existente y le hago un replace y para el detalle eliminaba lo que había en la bd y luego hacia un append blank con los detalles proveniente de la tabla temporal.

Code: Select all

Cabecera->(dbseek (nrofac))
Replace cabecera->monto := nmonto
detalle->(dbseek(nrofac))
dO while detalle->nrofac = nrofac
   detalle->(dbdelete())
   skip
enddo
do while temporal->numfac=nrofac
  append blank
  detalle->cant := temporal->cant
  detalle->punit := temporal->punit
eno
 
Con sql lo hago asi

Code: Select all

Update cabecera set monto=nmonto where numfac=nrofac
delete from detalle where numfac=nrofac                                                           // borro la data que hay en la bd
Insert into detalle(numfac, cant, punit) select numfac, cant, punit from temporal where numfac = nrofac
 


Mi pregunta es esta correcto como lo estoy haciendo o existe otra forma de programarlo con sql?
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Forma de actualizar datos en sql

Post by FranciscoA »

Artu01.
Si te funciona, no le veo problema.

Básicamente, es la misma técnica que he usado por mucho tiempo, con una leve diferencia:
Copio los datos de la factura, desde la tabla FACTURAS en la BD a una tabla temporal.
a) Hago las modificaciones pertinentes en la tabla temporal.
b) Al momento de grabar las modificaciones, borro de la tabla FACTURAS en la BD los datos originales de la factura, y agrego los nuevos.
c) Como los datos en la tabla temporal corresponden unicamente a la factura a modificar:
En DBF hago:
SELECT FACTURAS (por supuesto, con todas las opciones pertinentes de bloqueo)
APPEND FROM temporal //modo compartido

En SQl hago:
INSERT INTO facturas SELECT * FROM temporal ;

Por otra parte...
... a una factura existente se le llama para cambiar los datos ...
???

Pueden existir otras técnicas, pero como dije... es la que he usado por largo tiempo.

Talvez otros colegas quieran expresar sus experiencias.
Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh1204-MySql-TMySql
User avatar
leandro
Posts: 958
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Contact:

Re: Forma de actualizar datos en sql

Post by leandro »

Cuando el fuerte del software eran las dbfs, utilizaba la misma técnica que Francisco, ahora que el fuerte son las relacionales, hago algo similar con la diferencia que los temporales son hash().
Saludos
LEANDRO ALFONSO
SISTEMAS LYMA - BASE
Bogotá (Colombia)
[ FWH 19.09 ] [ xHarbour 1.2.3 Intl. (SimpLex) (Build 20190613) ] [ Embarcadero C++ 7.30 for Win32 ]
artu01
Posts: 306
Joined: Fri May 11, 2007 8:20 pm
Location: Lima

Re: Forma de actualizar datos en sql

Post by artu01 »

Gracias Francisco y Leandro por responder

HASH?, Leandro de que se trata, podrias explicar un poco del tema y un ejemplo de ello

Mil Gracias.
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
Post Reply