Ayuda con SQL

Post Reply
jpcavagnaro
Posts: 35
Joined: Tue Oct 11, 2016 1:02 pm

Ayuda con SQL

Post by jpcavagnaro »

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.
User avatar
leandro
Posts: 958
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Contact:

Re: Ayuda con SQL

Post by leandro »

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í _ "[Factura]" incluyendo los corchetes planos ?
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 ]
User avatar
nageswaragunupudi
Posts: 8017
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: Ayuda con SQL

Post by nageswaragunupudi »

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í _ "[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
jpcavagnaro
Posts: 35
Joined: Tue Oct 11, 2016 1:02 pm

Re: Ayuda con SQL

Post by jpcavagnaro »

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.
User avatar
jnavas
Posts: 399
Joined: Wed Nov 16, 2005 12:03 pm
Location: Caracas - Venezuela
Contact:

Re: Ayuda con SQL

Post by jnavas »

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: 399
Joined: Wed Nov 16, 2005 12:03 pm
Location: Caracas - Venezuela
Contact:

Re: Ayuda con SQL

Post by jnavas »

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 _ con integridad, vistas, disparadores, funciones y afines.
Post Reply