Problemas con los ' al guardar en MySql

33 views
Skip to first unread message

Vicente C.

unread,
Jul 29, 2024, 2:57:06 PM7/29/24
to ado-h...@googlegroups.com, oo...@googlegroups.com

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.

Nippur Lagash

unread,
Jul 29, 2024, 3:23:24 PM7/29/24
to ado-h...@googlegroups.com, oo...@googlegroups.com
Hola, tenes que escapar la comilla, se hace poniendo una ' delante.

SELECT 'hello''s';
devuelve:
hello's

Lo puedes hacer desde programación o usando la funciona REPLACE de mysql.

Saludos,
Fer.MDQ


--
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.


--
Nippur
Mar del Plata
Buenos Aires
Argentina

Juan Carlos Ocampo de la Cruz

unread,
Jul 29, 2024, 4:17:33 PM7/29/24
to ado-h...@googlegroups.com
Una vez tuve un problema similar y lo resolvi usando corchetes [ ] para delimitar cadenas

Saludos.

Vicente C.

unread,
Jul 30, 2024, 12:47:04 PM7/30/24
to ado-h...@googlegroups.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.

Reply all
Reply to author
Forward
0 new messages