Ayuda con SQL

Ayuda con SQL

Postby jpcavagnaro » Wed Mar 18, 2020 1:23 pm

Hola gente, buen día, hace tiempo que trabajo en algunos sistemas con SQL.

Me paso algo muy raro, en un sistema en la función cobranza, se ingreso una cobranza de varios documentos y actualizó solo algunas tablas y una no hizo nada, lo extraño es que la que no actualizó está intercalada con la actualización de las demás tablas y no dio error alguno.

UPDATE licita SET saldo = saldo - 17400.00, ult_pago = 18/03/2020 where licita = 30155
INSERT INTO Pagos ([familia],[Factura],[Fecha],[Recibo],[Importe],[Fecven],[Fecpago],[Puesto],[TIPO],[descu], [observa], saldo, saldoafa, interescalculado ) VALUES ( 34, 30155, '18/03/2020', 3390, 17400.00, '18/03/2020', '18/03/2020', 1, 'N', 0.00,' ',0,0, 0.00 )
UPDATE licita SET saldo = saldo - 17400.00, ult_pago = 18/03/2020 where licita = 30156
INSERT INTO Pagos ([familia],[Factura],[Fecha],[Recibo],[Importe],[Fecven],[Fecpago],[Puesto],[TIPO],[descu], [observa], saldo, saldoafa, interescalculado ) VALUES ( 34, 30156, '18/03/2020', 3390, 17400.00, '18/03/2020', '18/03/2020', 1, 'N', 0.00,' ',0,0, 0.00 )
UPDATE licita SET saldo = saldo - 17400.00, ult_pago = 18/03/2020 where licita = 31029
INSERT INTO Pagos ([familia],[Factura],[Fecha],[Recibo],[Importe],[Fecven],[Fecpago],[Puesto],[TIPO],[descu], [observa], saldo, saldoafa, interescalculado ) VALUES ( 34, 31029, '18/03/2020', 3390, 17400.00, '18/03/2020', '18/03/2020', 1, 'N', 0.00,' ',0,0, 0.00 )
UPDATE licita SET saldo = saldo - 17400.00, ult_pago = 18/03/2020 where licita = 31030
INSERT INTO Pagos ([familia],[Factura],[Fecha],[Recibo],[Importe],[Fecven],[Fecpago],[Puesto],[TIPO],[descu], [observa], saldo, saldoafa, interescalculado ) VALUES ( 34, 31030, '18/03/2020', 3390, 17400.00, '18/03/2020', '18/03/2020', 1, 'N', 0.00,' ',0,0, 0.00 )
UPDATE licita SET saldo = saldo - 156600.00, ult_pago = 18/03/2020 where licita = 31258
INSERT INTO Pagos ([familia],[Factura],[Fecha],[Recibo],[Importe],[Fecven],[Fecpago],[Puesto],[TIPO],[descu], [observa], saldo, saldoafa, interescalculado ) VALUES ( 34, 31258, '18/03/2020', 3390, 156600.00, '18/03/2020', '18/03/2020', 1, 'N', -16700.00,' ',0,0, -16700.00 )
UPDATE licita SET saldo = saldo - 156600.00, ult_pago = 18/03/2020 where licita = 31259
INSERT INTO Pagos ([familia],[Factura],[Fecha],[Recibo],[Importe],[Fecven],[Fecpago],[Puesto],[TIPO],[descu], [observa], saldo, saldoafa, interescalculado ) VALUES ( 34, 31259, '18/03/2020', 3390, 156600.00, '18/03/2020', '18/03/2020', 1, 'N', -16700.00,' ',0,0, -16700.00 )
INSERT INTO Mov_ven ([Fecha],[Puesto],[Numero],[Descri],[Factura],pagos,[Forpago],[Vendedor]) VALUES ('18/03/2020',2, 3390,'Iturrioz Fermin ', 349400.00,0,1,'')
UPDATE Numdoc SET recibo = 3390, nroorden = 7 where numero = 2

La tabla que no actualizó es Pagos.

Lo hago con try catch, mando el string con todas las sentencias para atajar errores y no actualice nada.

Además lo volví a generar sin tocar nada y actualizó perfecto.

Obvio que esta función se usa a diario y nunca tuvimos este error.

Saludos
Jorge.
Jorge
Saludos.
jpcavagnaro
 
Posts: 147
Joined: Tue Oct 11, 2016 1:02 pm
Location: Luján, bs. as.

Re: Ayuda con SQL

Postby leandro » Wed Mar 18, 2020 10:17 pm

Jorge buenas tardes,

Puedes postear algo de código en donde haces la inserción de los registros?

Y por otro lado están definidos así los campos "[Factura]" incluyendo los corchetes planos ?
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: 1481
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

Re: Ayuda con SQL

Postby nageswaragunupudi » Fri Mar 20, 2020 2:08 pm

leandro wrote:Jorge buenas tardes,

Puedes postear algo de código en donde haces la inserción de los registros?

Y por otro lado están definidos así los campos "[Factura]" incluyendo los corchetes planos ?


Just like we use ` to quote field names in MySql ( eg `fieldname` ), we use [ ] in DBF, Access, MSSQL. ( eg: [fieldname] ).
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10248
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: Ayuda con SQL

Postby jpcavagnaro » Wed Apr 01, 2020 1:14 pm

Esta es la rutina donde genero los registros:


function generoreci()
xtotal = xefectivo + xtotche + ximpretiva + ximpretgan + ximpretrg + ximpretibr + acuenta
if xtotal = 0
msginfo( "Monto abonado en cero" )
retu .f.
endif

wtxt = "errorecib.txt"
ferase( wtxt )
cHande = FCREATE ( wtxt )

cSQLNum := "SELECT * FROM numdoc where numero = " + str( xemprevige )
oRS1num := CargaRecordSet( cSQLnum, CadenaCon )

IF oRS1num = nil
Msginfo( "problemas, no puedo leer numdoc" )
retu .t.
endif
if acuenta = 0
xrecibo := oRS1num:Fields( "recibo" ):value + 1
endif


val_fam( xfamilia )

if limpreci
imprireci()
* retu .f.
endif

xnombre = xpadre
sele au_reci
go top
i = 1
* ? xdescu
copias = 1

if ximpinteres < 0
x1impabon := xtotal + imp_nc + ( ximpinteres * - 1 ) + acuenta
else
x1impabon := xtotal + imp_nc + acuenta - ximpinteres
endif

xsaldo = 0
SQLMVen = ""
if xfactura = 0
else
do while i <= len( tfactura )
if tfactura[ i, 1 ] = "*"
jk = val( tfactura[ i, 3 ] )
if tfactura[ i, 2 ] $ "N NCM "
wrecset = oRS1RecLic
wrec = "licita"
wfac = "licita"
else
wrecset = oRS1Recvta
wrec = "ventas"
wfac = "factura"
endif
wtipo = "N"
xpuesto = val( tfactura[ i, 8 ] )
if tfactura[ i, 2 ] = "AC"
xsaldo = val( tfactura[ i, 10 ] )
*x1impabon = x1impabon - val( tfactura[ i, 10 ] )
wtipo = "X"
ws = 0
*SQLMVen = SQLMVen + "UPDATE pagos SET saldoafa = 0, cancelado = 0, importe = " + str( val( tfactura[ i, 10 ] ), 10, 2 ) + " where id = " + str(tregistro[ x ]) + chr( 13 ) + chr( 10 )
SQLMVen = SQLMVen + "UPDATE pagos SET saldoafa = saldoafa + " + str(val( tfactura[ i, 10 ] ),10,2) + ", cancelado = 9999999 where id = " + str(tregistro[ i ]) + chr( 13 ) + chr( 10 )
else
wrecset:AbsolutePosition = tregistro[ i ]

//wrecset:find("factura"=jk ) //oRs:Find( "file_num = '"+cFIND+"'" )
if tfactura[ i, 2 ] $ "CCNC"
xsaldo := wrecset:Fields( "saldo" ):value
SQLMVen = SQLMVen + "UPDATE " + wrec + " SET saldo = 0, ult_pago = '" + dtoc( xfecha ) + "' where " + wfac + " = " + str( jk ) + chr( 13 ) + chr( 10 )
else
if val( tfactura[ i, 10 ] ) < x1impabon
xsaldo = val( tfactura[ i, 10 ] )
x1impabon = x1impabon - val( tfactura[ i, 10 ] )
ws = val( tfactura[ i, 10 ] )
else
xsaldo = x1impabon
ws = x1impabon
x1impabon = 0
endif

SQLMVen = SQLMVen + "UPDATE " + wrec + " SET saldo = saldo - " + str( ws, 10, 2 ) + ", ult_pago = " + dtoc( xfecha ) + " where " + wfac + " = " + str( jk ) + chr( 13 ) + chr( 10 )
ENDIF
* endif
SQLMVen = SQLMVen + "INSERT INTO Pagos ([familia],[Factura],[Fecha],[Recibo],[Importe],[Fecven],[Fecpago],[Puesto],[TIPO],[descu], [observa], saldo, saldoafa, interescalculado ) VALUES (" + ;
str( xfamilia , 8, 0 ) + ", " + str( jk, 8, 0 ) + ", '" + dtoc( xfecha ) ;
+ "', " + str( xrecibo, 8, 0 ) + ", " + str( xsaldo, 10, 2 ) + ", '" + dtoc( xfecha ) + "', '" + dtoc( xfecha ) + "', " + str( xpuesto, 4, 0 ) + ", " + "'"+wtipo+"'," + tfactura[ i, 9 ] + ",'" + xobserva + "',0,0," + tfactura[ i, 9 ] + " )" + chr( 13 ) + chr( 10 )
endif
endif

i = i + 1
enddo
endif

jorden = 0
hh = 1

sele au_reci
go top
do while .not. eof()
if cuenta <> 0
wque = "mov_bco"
SQLMVen = SQLMVen + "INSERT INTO " + wque + " ([Fecha],[Puesto],[Cuit_che],[Numero],[Descri],[Factura],pagos,[Num_che],[Fec_che],[Banco],[Titular],[Forpago],[Vendedor], [orden], cuenta, esinter) VALUES ('" + dtoc( xfecha ) + "'," + str( xemprevige, 1, 0 ) ;
+ ",'" + au_reci->cuit_che + "'," + str( xrecibo, 8, 0 ) + ",'" + alltrim( substr( xnombre, 1, 45 ) ) + "'," + str( au_reci->importe, 10, 2 ) + ",0," + str( au_reci->chenro, 8, 0 ) + ",'" + dtoc( au_reci->fecche ) + "','" + substr( au_reci->banco, 1, 15 ) + "','" + alltrim( substr( au_reci->titular, 1, 30 ) ) + "',2,'" + alltrim( xnombreven ) + "'," + str( au_reci->orden, 8, 0 ) + "," + str( au_reci->cuenta, 10, 0 ) + ", 'S')" + chr( 13 ) + chr( 10 )
else
wque = "mov_ven"
SQLMVen = SQLMVen + "INSERT INTO " + wque + " ([Fecha],[Puesto],[Cuit_che],[Numero],[Descri],[Factura],pagos,[Num_che],[Fec_che],[Banco],[Titular],[Forpago],[Vendedor], [orden]) VALUES ('" + dtoc( xfecha ) + "'," + str( xemprevige, 1, 0 ) ;
+ ",'" + au_reci->cuit_che + "'," + str( xrecibo, 8, 0 ) + ",'" + alltrim( substr( xnombre, 1, 45 ) ) + "'," + str( au_reci->importe, 10, 2 ) + ",0," + str( au_reci->chenro, 8, 0 ) + ",'" + dtoc( au_reci->fecche ) + "','" + substr( au_reci->banco, 1, 15 ) + "','" + alltrim( substr( au_reci->titular, 1, 30 ) ) + "',2,'" + alltrim( xnombreven ) + "'," + str( au_reci->orden, 8, 0 ) + ")" + chr( 13 ) + chr( 10 )
endif
sele au_reci
skip
enddo

if xefectivo <> 0
SQLMVen = SQLMVen + "INSERT INTO Mov_ven ([Fecha],[Puesto],[Numero],[Descri],[Factura],pagos,[Forpago],[Vendedor]) VALUES ('" + dtoc( xfecha ) + "'," + str( xemprevige, 1, 0 ) ;
+ "," + str( xrecibo, 8, 0 ) + ",'" + substr( xnombre, 1, 45 ) + "'," + str( xefectivo, 10, 2 ) + ",0,1,'" + xnombreven + "')" + chr( 13 ) + chr( 10 )
endif

if ximpinteres < 0
if x1impabon > 0 // - ximpdescu
SQLMVen = SQLMVen + "INSERT INTO Pagos ([familia],[Factura],[Fecha],[Recibo],[Importe],[Fecven],[Fecpago],[Puesto],[TIPO], saldo, saldoafa, InteresCalculado, [observa] ) VALUES (" + str( xfamilia , 8, 0 ) + ", 0, '" + dtoc( xfecha ) ;
+ "', " + str( xrecibo, 8, 0 ) + ", " + str( x1impabon, 10, 2 ) + ", '" + dtoc( xfecha ) + "', '" + dtoc( xfecha ) + "', 1, " + "'N', 0, 0, 0,'" + xobserva + "' )" + chr( 13 ) + chr( 10 )
endif
else
if x1impabon > 0 //- ximpinteres // - ximpdescu
SQLMVen = SQLMVen + "INSERT INTO Pagos ([familia],[Factura],[Fecha],[Recibo],[Importe],[Fecven],[Fecpago],[Puesto],[TIPO], saldo, saldoafa, InteresCalculado, [observa] ) VALUES (" + str( xfamilia , 8, 0 ) + ", 0, '" + dtoc( xfecha ) ;
+ "', " + str( xrecibo, 8, 0 ) + ", " + str( x1impabon, 10, 2 ) + ", '" + dtoc( xfecha ) + "', '" + dtoc( xfecha ) + "', 1, " + "'N', 0, 0, 0,'" + xobserva + "' )" + chr( 13 ) + chr( 10 )
endif
endif

if ximpretiva <> 0
SQLMVen = SQLMVen + "INSERT INTO Compret ([Cliente],[Comproba],[Tipo],[Fecha],[Recibo],[Importe],[Fecpago]) VALUES " + ;
" ( " + str( xfamilia, 8, 0 ) + ", " + str( xcomretiva, 12, 0 ) + ", " + "'IVA'" + ", '" + dtoc( xfecha ) + "', " + str( xrecibo, 8, 0 ) + ", " + str( ximpretiva, 10, 2 ) + ", '" + dtoc( xfecha ) + "')" + chr( 13 ) + chr( 10 )
endif
if ximpretgan <> 0

SQLMVen = SQLMVen + "INSERT INTO Compret ([Cliente],[Comproba],[Tipo],[Fecha],[Recibo],[Importe],[Fecpago]) VALUES " + ;
" ( " + str( xfamilia, 8, 0 ) + ", " + str( xcomretgan, 12, 0 ) + ", " + "'GAN'" + ", '" + dtoc( xfecha ) + "', " + str( xrecibo, 8, 0 ) + ", " + str( ximpretgan, 10, 2 ) + ", '" + dtoc( xfecha ) + "')" + chr( 13 ) + chr( 10 )
endif
if ximpretrg <> 0
SQLMVen = SQLMVen + "INSERT INTO Compret ([Cliente],[Comproba],[Tipo],[Fecha],[Recibo],[Importe],[Fecpago]) VALUES " + ;
" ( " + str( xfamilia, 8, 0 ) + ", " + str( xcomretrg, 12, 0 ) + ", " + "'RG'" + ", '" + dtoc( xfecha ) + "', " + str( xrecibo, 8, 0 ) + ", " + str( ximpretrg, 10, 2 ) + ", '" + dtoc( xfecha ) + "')" + chr( 13 ) + chr( 10 )
endif
if ximpretibr <> 0
SQLMVen = SQLMVen + "INSERT INTO Compret ([Cliente],[Comproba],[Tipo],[Fecha],[Recibo],[Importe],[Fecpago]) VALUES " + ;
" ( " + str( xfamilia, 8, 0 ) + ", " + str( xcomretibr, 12, 0 ) + ", " + "'IBR'" + ", '" + dtoc( xfecha ) + "', " + str( xrecibo, 8, 0 ) + ", " + str( ximpretibr, 10, 2 ) + ", '" + dtoc( xfecha ) + "')" + chr( 13 ) + chr( 10 )
endif

SQLMVen = SQLMVen + "UPDATE Numdoc SET recibo = " + str( xrecibo, 8, 0 ) + ", nroorden = " + str( xorden, 8, 0 ) + " where numero = " + str( xemprevige ) + chr( 13 ) + chr( 10 )
TRY
oCon:Execute( sqlMVen )
oCon:Close() ; Catch oErr
msginfo("Error al grabar el recibo "+sqlmven)
FWrite ( cHande, SQLMVen + chr( 13 ) + chr( 10 )+ oErr )
END TRY

FClose ( cHande )


Los corchetes están porque corrijo las sentencias en sql managment studio, pero reitero los raro es que anda bien sin problemas, hasta ahora detecte que fallo una sola ves (espero).

El problema es como detectar porque falla.

Saludos
Jorge.
Jorge
Saludos.
jpcavagnaro
 
Posts: 147
Joined: Tue Oct 11, 2016 1:02 pm
Location: Luján, bs. as.

Re: Ayuda con SQL

Postby jnavas » Wed Apr 01, 2020 10:41 pm

Saludos
La tabla tiene integridad referencial con otras tablas?
Reglas de Triggers

EN algunas ocasiones, aplico:

oBd:EXECUTE("SET FOREIGN_KEY_CHECKS = 0") // Si es MySQL
User avatar
jnavas
 
Posts: 472
Joined: Wed Nov 16, 2005 12:03 pm
Location: Caracas - Venezuela

Re: Ayuda con SQL

Postby jnavas » Wed Apr 01, 2020 10:48 pm

Jorge
Saludos, sin queren presione submit

Cual gestor de BD estas utilizando
En mi caso todas las sentencias las genero en una variable de texto y las grabo en disco MEMOWRIT("run.sql",cSql)

oDb:Execute(cSql)

Dependiendo de la clase de utilices, podras optener el numero o texto del error, en mi caso uso EAGLE con cError:=oDb:oConnect:oError:GetError()

Si tienes tablas con integridad referencial mediante INNO DB

Podras desactivar la integridad referencial mediante


oDb:EXECUTE("SET FOREIGN_KEY_CHECKS = 0")
oDb:EXECUTE(cSql)
oDb:EXECUTE("SET FOREIGN_KEY_CHECKS =1") // Activar la Integridad

Si algunos colegas requieren que les apoye o capacite con MySQL, estoy a su disposicion mediante video capacitacion, tengo un sistema ERP con MySQL y SQL Server, en ambos casos con integridad, vistas, disparadores, funciones y afines.
User avatar
jnavas
 
Posts: 472
Joined: Wed Nov 16, 2005 12:03 pm
Location: Caracas - Venezuela


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 87 guests