Hola a tod@s:
Genero la siguiente instrucción para guardar datos de una factura en una tabla MySql:
cQuery := "Insert Into dbfacturasl
(Facl_Codarticulo,Facl_IdFacturasl,Facl_IdAlmacen,Facl_Articulo,Facl_Pcompra,Facl_Pventa,Facl_Unidades,Facl_Dto,Facl_Iva,Facl_Re,Facl_Totallinea)
Value ("
cQuery += "'"+oFacturasLineas:cell(nContador , 1
)+"'," // Codigo del articulo
cQuery +=
STR(nId_Facturas)+"," // Codigo
cQuery += STR(IIF(oQuery:RecordCount >
0,oQuery:Fields('Alta_IdAlmacen'):Value,0))+"," // Articulo
cQuery +=
"'"+STRTRAN(oFacturasLineas:cell(nContador, 2 ),"'"," ")+"',"
// Descipcion de articulo
cQuery += STR(IIF(oQuery:RecordCount >
0,oQuery:Fields('Alta_Pcompra'):Value,0))+',' // Pcompra
cQuery += STR(oFacturasLineas:cell(nContador, 4
))+"," // Pventa
cQuery += STR(oFacturasLineas:cell(nContador, 3
))+"," // Unidad
cQuery += STR(oFacturasLineas:cell(nContador, 5
))+"," // Dto
cQuery += STR(oFacturasLineas:cell(nContador, 6
))+"," // Iva
cQuery += STR(oFacturasLineas:cell(nContador, 7
))+"," // Re
cQuery += STR(oFacturasLineas:cell(nContador, 8
))+")" // Tlinea
oConn:Execute(cQuery)
Todo funciona de forma correcta salvo cuando el usuario utiliza el ' en la línea correspondiente a la descripción del artículo. Esa orden me generaría:
Insert Into dbfacturasl (Facl_Codarticulo,Facl_IdFacturasl,Facl_IdAlmacen,Facl_Articulo,Facl_Pcompra,Facl_Pventa,Facl_Unidades,Facl_Dto,Facl_Iva,Facl_Re,Facl_Totallinea)
Value ('4', 5298, 4,'Mano d'obra', 0.00,10.00,1.00, 0, 0, 0,10.00)
Al ser un campo alfanumérico debe ir entre '' pero como la
descripción del artículo tiene ya de por si un ' me devuelve un
error ya que entiende que el campo Facl_Articulo sería 'Mano
d'.(El ' es bastante utilizado en el catalán, valenciano...)
No puedo cambiar la generación de la variable cQuery cambiando los " por ' y al contrario ya que también pueden existir artículos del tipo Comprado en "Desguaces Renedo" y el usuario pone las comillas.
He probado a jugar con los diferentes Collation y charset pero no consigo solventar el error. También he probado a jugar con HB_CDPSELECT('ES850') y HB_CDPSELECT('ESMWIN') pero sigo igual.
¿Alguna posible solución?
Un saludo.
--
Has recibido este mensaje porque estás suscrito al grupo "ADO Harbour" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a ado-harbour...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/ado-harbour/d6cf834c-95da-4ba8-8d4a-c57fe2bf22ed%40gmail.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/ado-harbour/CA%2BYc3wubKQM1J8CazQi7QCLbZerQ2phb8%3Dn%3DEjftVYWjkyXjuA%40mail.gmail.com.
Buenas tardes Nippur:
Perfecto, con la solución que me has dado funciona sin problemas. Algo tan "simple" y ni se me había pasado por la cabeza jajajaja.
Gracias de nuevo.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/ado-harbour/CA%2BYc3wubKQM1J8CazQi7QCLbZerQ2phb8%3Dn%3DEjftVYWjkyXjuA%40mail.gmail.com.