Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Problema al insertar String en MySql (https://www.clubdelphi.com/foros/showthread.php?t=77261)

jpgonzalez 08-01-2012 19:43:39

Problema al insertar String en MySql
 
Buenas, sigo con problemas con el Delphi 2010.
No se si la versión que me baje estará limitada o algo por el estilo, pero ahora al insertar registros String en la BBDD solo me guarda el 1er caracter. (VERSION--> Embarcadero® Delphi® 2010 Version 14.0.3513.24210)

El tema es este, tengo dos BBDD, y quiero copiar una tabla (localidades) de una BBDD a otra.
Este es el código mediante el cual copi las tablas:

while not(QryLocs.Eof) do begin
localidad:= QryLocsnombreLocalidad.Value;
ShowMessage(localidad);
QryInsertarLocalidades.Close;
QryInsertarLocalidades.ParamByName('idProv').AsInteger:= QryLocsidProvincia.Value;
QryInsertarLocalidades.ParamByName('loc').AsString:= localidad;
QryInsertarLocalidades.ExecSQL;
QryLocs.Next;
end;

Ambas son TQuerys, y a la QryInsertarLocalidades le configulo los parametros:
* idProv: ftInteger
* loc: ftString

En el ShowMessage se muestra el String completo, por lo cual de la BBDD de origen, los datos vienen correctamente, pero en la BBDD destino se inserta solo la primer letra... o sea, si se recupera la localidad "Mar del Plata" solo inserta la "M".

Bueno, desde ya muchas gracias... un abrazo!!!

Casimiro Notevi 08-01-2012 20:16:56

Hola, recuerda encerrar el código entre sus etiquetas oportunos, ejemplo:



Gracias :)

duilioisola 08-01-2012 21:04:37

¿Como es la estructura de las dos tablas de las dos bases de datos?
Puede que una sea char(100) y la otra char(1).

¿Cual es el SQL que utilizas para hacer el insert?

jpgonzalez 08-01-2012 21:19:28

Cita:

Empezado por duilioisola (Mensaje 422560)
¿Como es la estructura de las dos tablas de las dos bases de datos?
Puede que una sea char(100) y la otra char(1).

¿Cual es el SQL que utilizas para hacer el insert?

En ambas tablas tengo varchar(250)..
El codigo es:

Código Delphi [-]
Insert into Localidades (idProvincia, nombreLocalidad)
values (:idProv, :loc)

duilioisola 08-01-2012 21:31:26

¿Tienes algun trigger en la base destino que pueda estar truncando el nombre?

jpgonzalez 09-01-2012 03:44:19

Cita:

Empezado por duilioisola (Mensaje 422564)
¿Tienes algun trigger en la base destino que pueda estar truncando el nombre?

No tengo ningun Trigger... pero evidentemente es problema del Delphi 2010.
Cree una nueva aplicacion en Delphi 2010, le puse una TQuery que hacia el insert, y seguia insertando solo la primer letra.
Copie exactamente lo mismo en Delphi 5, e inserto el String completo.

La verdad que estoy desorientado, si habrá algo de configuracion o quiza la version que baje tiene algun bug.

Desde ya muchas gracias a todos los que le dedicaron unos minutos a este hilo, y si se les ocurre algo, será bienvenido!!
Saludos y Feliz 2012 para todos!!!!

jpgonzalez 09-01-2012 04:59:32

Y agrego una cosa mas...
Recien probe en Delphi 2010, hacer una insercion usando una TTable, de la siguiente forma:

Código Delphi [-]
   TableLocalidades.Open;
   TableLocalidades.InsertRecord([1, 1, 'La Plata']);       //idLocalidad, idProvincia, nombreLocalidad

Y me inserto el String completo...
O sea que el problemita esta con el insert de la TQuery, o con la manera en que toma el parámetro.
En el parametro elijo ftString, como lo hice siempre en Delphi 5.

Bueno, solo quería dejar este comentario como para agregar mas info al problemita este, y para que queden mas datos acerca de todas las pruebas que hice por si a alguien más le sucede algo parecido...

Abrazo para todos, y gracias nuevamente!!!

jpgonzalez 09-01-2012 05:46:26

Bueno, tanto insistir con esto encontre una posible solucion... En lugar de pones el parametro de la TQuery como ftString, lo puse como ftMemo, quedando el codigo de la siguiente manera:

Código Delphi [-]
   QryInsertarLocalidad.Close;
   QryInsertarLocalidad.ParamByName('prov').AsInteger:= 1;
   QryInsertarLocalidad.ParamByName('loc').AsMemo:= 'La Plata';
   QryInsertarLocalidad.ExecSQL;

De esta manera inserta en la BBDD el String completo, en lugar de solo insertar el primer caracter...
Ahora ya me puedo ir a dormir relativamente tranquilo...
Como dije anteriormente, si le encuentran la vuelta al parametro ftString, se agradecera!!!

Abrazo!!!

noshy 24-01-2012 16:48:58

Hola, como estas, a mi tambien me hace el mismo error y ya no se como solucionarlo, es mas, estaba buscando algun SP para D2010 ya que creo que es un bugs, porque lo haces con ADO y funciona perfectamente pero con el TQuery de la paleta BDE y te inserta el primer caracter unicamente.

si aguien sabe algo, o sabe de algun SP para D2010 les agradezco que me avisen.

voy a probar mientras tanto con AsMemo.

Saludos a todos

jpgonzalez 07-02-2012 21:48:34

Cita:

Empezado por noshy (Mensaje 423619)
Hola, como estas, a mi tambien me hace el mismo error y ya no se como solucionarlo, es mas, estaba buscando algun SP para D2010 ya que creo que es un bugs, porque lo haces con ADO y funciona perfectamente pero con el TQuery de la paleta BDE y te inserta el primer caracter unicamente.

si aguien sabe algo, o sabe de algun SP para D2010 les agradezco que me avisen.

voy a probar mientras tanto con AsMemo.

Saludos a todos


El AsMemo trae problemas tambien... una lastima, evidentemente es un bug de Delphi 2010 que no permite insertar String con MySQL usando el TQuery.

Si insertas varios parametros String con el AsMemo, inserta todo mezclado y repite campos (inserta el email en el nombre, apellido, email, etc)... por ejemplo:
Código Delphi [-]
            QryInsertarSocio.close;
            QryInsertarSocio.ParamByName('nroSocio').AsInteger:= nroSocio;
            QryInsertarSocio.ParamByName('idPlan').AsInteger:= idPlan;
            QryInsertarSocio.ParamByName('idZona').AsInteger:= idZona;
            QryInsertarSocio.ParamByName('apellido').AsMemo:= apellido;
            QryInsertarSocio.ParamByName('nombre').AsMemo:= nombre;
            QryInsertarSocio.ParamByName('sexo').AsMemo:= sexo;
            QryInsertarSocio.ParamByName('fechaNac').AsDate:= fechaNac;
            QryInsertarSocio.ParamByName('tipoDoc').AsInteger:= idTipoDoc;
            QryInsertarSocio.ParamByName('nroDoc').AsMemo:= nroDocumento;
            QryInsertarSocio.ParamByName('direccion').AsMemo:= direccion;
            QryInsertarSocio.ParamByName('codPostal').AsMemo:= codPostal;
            QryInsertarSocio.ParamByName('idProvincia').AsInteger:= idProvincia;
            QryInsertarSocio.ParamByName('idLocalidad').AsInteger:= idLocalidad;
            QryInsertarSocio.ParamByName('telefono').AsMemo:= telefono;
            QryInsertarSocio.ParamByName('celular').AsMemo:= celular;
            QryInsertarSocio.ParamByName('email').AsMemo:= email;
            QryInsertarSocio.ParamByName('activo').AsInteger:= 1;
            QryInsertarSocio.ExecSQL;

Y si usas el AsString, inserta solo la primer letra...
Código Delphi [-]
  
            QryInsertarSocio.close;
            QryInsertarSocio.ParamByName('nroSocio').AsInteger:= nroSocio;
            QryInsertarSocio.ParamByName('idPlan').AsInteger:= idPlan;
            QryInsertarSocio.ParamByName('idZona').AsInteger:= idZona;
            QryInsertarSocio.ParamByName('apellido').AsString:= apellido;
            QryInsertarSocio.ParamByName('nombre').AsString:= nombre;
            QryInsertarSocio.ParamByName('sexo').AsString:= sexo;
            QryInsertarSocio.ParamByName('fechaNac').AsDate:= fechaNac;
            QryInsertarSocio.ParamByName('tipoDoc').AsInteger:= idTipoDoc;
            QryInsertarSocio.ParamByName('nroDoc').AsString:= nroDocumento;
            QryInsertarSocio.ParamByName('direccion').AsString:= direccion;
            QryInsertarSocio.ParamByName('codPostal').AsString:= codPostal;
            QryInsertarSocio.ParamByName('idProvincia').AsInteger:= idProvincia;
            QryInsertarSocio.ParamByName('idLocalidad').AsInteger:= idLocalidad;
            QryInsertarSocio.ParamByName('telefono').AsString:= telefono;
            QryInsertarSocio.ParamByName('celular').AsString:= celular;
            QryInsertarSocio.ParamByName('email').AsWideString:= email;
            QryInsertarSocio.ParamByName('activo').AsInteger:= 1;
            QryInsertarSocio.ExecSQL;

La verdad, que no se que es lo que pasa... si alguien encuentra algo de esto, por favor comenten.
Abrazo para todos!!!!


La franja horaria es GMT +2. Ahora son las 10:30:43.

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