Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-08-2013
jpgonzalez jpgonzalez is offline
Miembro
 
Registrado: feb 2010
Posts: 121
Poder: 15
jpgonzalez Va por buen camino
Letra Ñ con MySQL y Delphi

Buenas para todos, en primer lugar dos cosas:
1- Se que en el foro hay varios hilos sobre el tema
2- Puse el hilo en la parte de Base de datos, aunque no creo que sea especificamente problema de MySQL

Hecha esta introducción, paso a comentarles el problema que estoy teniendo.

Resulta que cuando quiero guardar algun string que tiene la letra "ñ" en la BBDD me lo guarda como "ñ"... me he roto la cabeza durante meses, cambie el my.ini, intenté setear las propiedades del ZConnection (Zeos) en el beforeConnect y nunca he logrado solucionarlo.
Lo raro es que desde el Workbench el MySQL guarda la "ñ" perfectamente.

Hoy, buscando mas acerca de este problema, encontre que alguien decia que cambiando el charset de la DBGrid a OEM_CHARSET se veria correcto, pero no fue asi.
Lo que me sirvio es ver que si yo harcodeo el string en la query, la "ñ" se guarda perfectamente en la BBDD, es decir que si en el componente ZQuery en lugar de tomar un parametro, pongo un texto con "ñ", lo guarda perfectamente.

De aqui pude observar que el problema esta cuando paso algun string con "ñ" por parametro a la query.
Les dejo el codigo delphi que ejecute para los cuales la insercion no funciona...

Código Delphi [-]
 
            QryInsertarCliente.close;
            QryInsertarCliente.ParamByName('apellido').AsString:= apellido;
            QryInsertarCliente.ParamByName('nombre').AsString:= nombre;         //Tomado de un TEdit
            QryInsertarCliente.ParamByName('direccion').AsString:= direccion;
            QryInsertarCliente.ExecSQL;

            QryInsertarCliente.close;
            QryInsertarCliente.ParamByName('apellido').AsString:= apellido;
            QryInsertarCliente.ParamByName('nombre').AsString:= nombre;
            QryInsertarCliente.ParamByName('direccion').AsString:= 'Av.España';
            QryInsertarCliente.ExecSQL;

Ahora si en la query harcodeo el campo direccion de la siguiente manera, lo guarda perfecto:
Código SQL [-]
Update clientes
   set direccion = 'Av. España'
where 
   idCliente = 8

Puede ser esto por alguna configuracion del Delphi XE????
Desde ya muchas gracias!!!!
Responder Con Cita
  #2  
Antiguo 13-08-2013
jpgonzalez jpgonzalez is offline
Miembro
 
Registrado: feb 2010
Posts: 121
Poder: 15
jpgonzalez Va por buen camino
A esto agrego algo mas...
En mi notebook tengo instalados el Delphi 5 y el Delphi XE... (obviamente que no bajo el mismo windows... tengo un win7 con D5 y otro con DXE).
Con el Delphi 5, tengo el Zeos version 6.6 stable, y en el Delphi XE tengo el 7.0dev.

Para el Delphi 5, me inserta la "ñ" perfectamente... me queda solo pensar que es algo del Embarcadero Delphi XE o algo de la version de Zeos...
Responder Con Cita
  #3  
Antiguo 13-08-2013
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
El mismo Zeos trae el componenet ZSQLMonitor que te permite guardar en un archivo de texto los comandos "crudos" que tu aplicación va mandando. Puedes usarlo para ver como le está mandando Zeos el query, ahí saldrás de dudas ya que veras el query completo. No es recomendable usar las versiones "dev" porque son las que están apenas en desarrollo y normalmente tienen muchos bugs que no han sido descubiertos o bien aunque ya se conozcan se van a corregir posteriormente durante el desarrollo. Las beta o gamma pueden servir aunque también son de prueba. Lo mejor es usar las versiones estables y si no las hay tener este detalle en cuenta a la hora de usarlas.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #4  
Antiguo 14-08-2013
jpgonzalez jpgonzalez is offline
Miembro
 
Registrado: feb 2010
Posts: 121
Poder: 15
jpgonzalez Va por buen camino
Buenas AzidRain...
use el SQLMonitor y me arrojo el siguiente resultado:

2013-08-13 19:16:34 cat: Execute, proto: mysql-5, msg: update clientes set nombre = 'nombre', apellido = 'apellido', direccion = 'Av. España', idProvincia = 1, idlocalidad = 1, codigoPostal = '1', telefono = '', celular = '', idTipoDocumento = 1, nroDocumento = '22222222', idCondicionIVA = 2, observaciones = '\r\n' where idCliente = 8

Lo que me llama la atencion de este log, es que yo tengo instalado el mysql 6, no entiendo por que razon dice "proto: mysql-5"... de hecho en el componente Zeos, tengo seleccionado el protocol en "mysql", sin el 5.
Responder Con Cita
  #5  
Antiguo 14-08-2013
jpgonzalez jpgonzalez is offline
Miembro
 
Registrado: feb 2010
Posts: 121
Poder: 15
jpgonzalez Va por buen camino
Aca si que estoy perdido...

Supuestamente, segun el SQLMonitor los parametros estan perfectos... se ve que dice 'Av. España'.

Es mas, como puse anteriormente, si yo hardcodeo el dato en la query que hace el update o el insert, el dato lo inserta perfecto.
Por lo cual supuse que el parametro llegaba erroneo a la query, y que el Zeos no teniaproblema.

Ahora veo que la query recibe el parametro sin modificar la ñ.
Por lo cual descarto esa posibilidad.

Lo que no se es en donde esta la falla.
Si la falla esta en el Zeos... no entiendo porque lo inserta/actualiza de manera correcta en el hardcodeo.
Si la falla esta en los parametros... no entiendo porque razon el SQLMonitor los muestra bien.

Abrazo!
Responder Con Cita
  #6  
Antiguo 14-08-2013
jpgonzalez jpgonzalez is offline
Miembro
 
Registrado: feb 2010
Posts: 121
Poder: 15
jpgonzalez Va por buen camino
Bien, para aportar un dato mas... he probado el siguiente codigo:
Código Delphi [-]
   ZQuery.Close;
   ZQuery.SQL.Text:= 'update clientes set direccion = ' + QuotedStr('Av. España') + ' where idCliente = 8';
   ZQuery.ExecSQL;

Y el dato se inserta perfectemente... por lo cual, supongo que el problema estaría en pasaje de parametros.
Mas alla de que en el SQLMonitor veo que el parametro se manda bien, es la unica que me queda pensar.

Probe hardcodeando dentro del componentes ZQuery... probe poniendo la query hardcodeada desde codigo y funciona bien.
Responder Con Cita
  #7  
Antiguo 14-08-2013
jpgonzalez jpgonzalez is offline
Miembro
 
Registrado: feb 2010
Posts: 121
Poder: 15
jpgonzalez Va por buen camino
TEMA CERRADo... el problema era la version del ZEOS.
Instale la 7.0.4 stable y guarda la "ñ" perfectamente...
Gracias por el consejo AzidRain.
Abrazo para todos!!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
TextBox escribir automaticamente letra por letra? Ejemplo Dentro! Gattaca Varios 2 21-03-2009 17:41:32
Leer archivo txt letra por letra intercubo Varios 14 16-02-2008 21:22:28
como hago una sopa de letra en delphi me ayudan vicdem Varios 4 29-06-2006 00:58:07
Pulsar una letra en un DBgrid y que vaya al campo que empiece por esa letra Nbull SQL 8 16-12-2004 17:58:01
Tipo de letra en Delphi AgustinL API de Windows 2 17-03-2004 20:02:56


La franja horaria es GMT +2. Ahora son las 21:27:30.


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
Copyright 1996-2007 Club Delphi