Forma de actualizar datos en sql

Forma de actualizar datos en sql

Postby artu01 » Fri Jan 10, 2020 7:17 pm

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  Expand view  RUN

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  Expand view  RUN

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
artu01
 
Posts: 400
Joined: Fri May 11, 2007 8:20 pm
Location: Lima

Re: Forma de actualizar datos en sql

Postby FranciscoA » Fri Jan 10, 2020 10:58 pm

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.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2159
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Forma de actualizar datos en sql

Postby leandro » Mon Jan 13, 2020 10:15 am

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 AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1682
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

Re: Forma de actualizar datos en sql

Postby artu01 » Mon Jan 13, 2020 9:17 pm

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
artu01
 
Posts: 400
Joined: Fri May 11, 2007 8:20 pm
Location: Lima


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: wilsongamboa and 31 guests