Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   error al guardar un xml cfdi 3.3 en un campo blob type 1 segment 80 (https://www.clubdelphi.com/foros/showthread.php?t=93321)

gmontes 02-08-2018 04:39:10

error al guardar un xml cfdi 3.3 en un campo blob type 1 segment 80
 
saludos


tengo el siguiente problema


guardo mi xml que obtengo de respuest de mi pac en un campo blob text 80, todo funciona perfectamente pero al ser de un tamaño de mas de 700 lineas marca error el sql insert


un ejemplo de los articulos

<cfdi:Concepto ClaveProdServ="51161800" NoIdentificacion="7501034655073" Cantidad="1" ClaveUnidad="H87" Unidad="PIEZA" Descripcion="MUCOSOLVAN SOL. 12H 600 MG." ValorUnitario="166.48" Importe="166.48" Descuento="16.65">
<cfdi:Impuestos>
<cfdi:Traslados>
<cfdi:Traslado Base="149.83" Impuesto="002" TipoFactor="Tasa" TasaOCuota="0.000000" Importe="0"/>
</cfdi:Traslados>
</cfdi:Impuestos>
</cfdi:Concepto>



es una factura hecha de varias remisiones por eso es larga y me sale este error:


EZSQLException: SQL Error: Dynamic SQL Error SQL error code = -104 Unexpected end of command - line 756, column 13833. Error Code: -104. can't format message 13:896 -- message file C:\siu\firebird.msg not found The SQL: INSERT INTO cfdi_documentos (empresa, documento, tipo, serie_certificado, cadena_original, sello_digital, contenido_xml, fecha_timbrado, folio_sat, serie_certificado_sat, sello_sat,fecha_cancelacion_sat, status_sat) VALUES('



ya vi el xml y no encuentro ni parentesis abiertos o cerrados ni cosas asi




el campo blob donde se guarda es :contenido_xml


para probar que no es el tamaño del xml

entro en el registro , pego el xml manualmente y no hay problema





en resumen , todo funciona bien y se guardan perfectamente todos los datos incluido el xml, pero cuando el xml a guardar tiene un numero considerable de articulos marca ese error.



no he hecho pruebas con un campo blob mas grande (tengo blob type 1 segment 80), ademas no se si tenga un limite de caracteres la instruccion sql del "INSERT"

gmontes 02-08-2018 05:59:38

parece ser que tiene que ver con el tamaño del insert con sus campos y valores,



puse la instruccion completa en el ibexpert y me marca el mismo error


voy a tratar de hacer una sola linea con el xml para ver si lo puedo compactar y hacer la prueba

firebird manual
Inserting into BLOB columns

Inserting into BLOB columns is only possible under the following circumstances:

The client application has made special provisions for such inserts, using the Firebird API. In this case, the modus operandi is application-specific and outside the scope of this manual.

The value inserted is a text string of no more than 32767 bytes.

gmontes 02-08-2018 06:09:57

no creo que sea el largo del xml, por el tipo de campo, pero no encuentro el caracter que me marca el error

Casimiro Notevi 02-08-2018 09:44:19

Diría que es la sentencia que está mal.

duilioisola 02-08-2018 13:12:18

No se si lo que pones es el mensaje de error completo.
Si te fijas en el final del mensaje de error, verás que abre una comilla simple y nunca la cierra.
Parece que en el campo EMPRESA estás tratando de poner un texto...

Cita:

EZSQLException: SQL Error: Dynamic SQL Error SQL error code = -104 Unexpected end of command - line 756, column 13833. Error Code: -104. can't format message 13:896 -- message file C:\siu\firebird.msg not found The SQL: INSERT INTO cfdi_documentos (empresa, documento, tipo, serie_certificado, cadena_original, sello_digital, contenido_xml, fecha_timbrado, folio_sat, serie_certificado_sat, sello_sat,fecha_cancelacion_sat, status_sat) VALUES('

gmontes 02-08-2018 21:30:47

saludos


voy a buscar una sentencia con error y postearla. como comento. es al guardar el xml donde ocurre el error, pero solo en xml con mas de 500 lineas, todos los demas se guardan correctamente

gmontes 03-08-2018 01:30:44

1 Archivos Adjunto(s)
SALUDOS


este es el xml que marca error y de 50 xml timbrados correctamente bajo el mismo codigo


la diferencia es el numero de conceptos que componen el xml


lo corro en https://www.eversql.com/sql-syntax-check-validator/ y marca 100% correcto



en ibexpert marca el siguiente error:


can't format message 13:896 -- message file C:\Program Files (x86)\HK-Software\firebird.msg not found.
Dynamic SQL Error.
SQL error code = -104.
Unexpected end of command - line 750, column 14298.



el error lo marca dentro del sql editor de IBExpert


eliminando el campo contenido_xml y su datos no marca error


no lo puedo postear por que es mas de 30000 caracteres de largo.


esta en el adjunto


gracias

gmontes 03-08-2018 06:21:15

solucion
 
listo, despues de quebrarme la cabeza todos estos dias encontre la solucion




End of command usually means that the parser reached the end of the statement while it was still expecting tokens, or reached a parser state where it should be complete but there are still tokens left. The fact you are concatenating values into the query is a red flag. Also the "column 532676549" could be an indication of problem, as that exceeds query length limits (64k in Firebird 2.5 and earlier), and also suggests you have literals that are larger than supported (32k). Mark Rotteveel


https://stackoverflow.com/questions/...e-statement-in


el construir el query con los campos y los valores excedia el limite del largo de este


la solucion es parametrizar el insert o update como en este ejemplo . se timbra correctamente y guarda en mi base de datos :D

Código Delphi [-]
Close;
               SQL.Clear;
                SQL.Text:= 'UPDATE cfdi_documentos SET  contenido_xml = :Variable_xml where  empresa=''CAMSI''  and tipo=''F'' and documento= :Folio_xml';   

               ParamByName('Variable_xml').AsBlob:= facturaCFDIv33.XML;   //aqui va el xml de 912 lineas               
               ParamByName('Folio_xml').AsString:= sFolio;               
               ExecSQL;                                                               
               Close;




listo, gracias por todo


La franja horaria es GMT +2. Ahora son las 02:00:19.

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