Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problemas al guardar hash md5 (https://www.clubdelphi.com/foros/showthread.php?t=92601)

The Cid James 07-12-2017 07:53:58

Problemas al guardar hash md5
 
Buenas gentes tengo el siguiente codigo
Código Delphi [-]
procedure Tfconfiguracion.Button1Click(Sender: TObject);
begin
 if edit1.text = edit2.text
  then
    begin
    fmodulo.tempresa.Active := true;
    fmodulo.tempresa.Edit;
    fmodulo.tempresa.Fields.FieldByName ('pas').AsString := CalcHash2(Edit1.Text, haMD5);
    fmodulo.tempresa.Post;
    application.MessageBox(pchar('Contraseña guardada exitosamente'),
    pchar('ERROR'), (MB_OK + MB_ICONINFORMATION))
    end
  else
    application.MessageBox(pchar('Las contraseñas no coinciden, intentte nuevamente'),
    pchar('ERROR'), (MB_OK + MB_ICONINFORMATION))
end;

Cuando quiero hacer el post me sale el siguiente error type mismatch for field expecting widememo actual widestring supongo que es por el tipo de campo en el que estoy guardando (en mi caso varchar (500)) pero he probado con varios y me tira diferentes errores que puede ser?

cloayza 07-12-2017 14:01:48

Estimado The Cid James:

El hash MD5 te devuelve siempre una cadena string de 32 caracteres, por lo tanto no es necesario definir un campo con un largo mayor a ese.


Saludos cordiales^\||/

The Cid James 07-12-2017 14:24:11

Muchas gracias por la aclaración desconocía del tema.

Sigo buscando informacion sobre widememo

Saludos

The Cid James 07-12-2017 19:14:12

Alguien que me ilustre al respecto porque cada vez entiendo menos del tema, estuve buscando informacion sobre widememo todo el dia y no encontre algo que me clarifique al respecto.
Otra cosa que intente es
Código Delphi [-]
procedure Tfconfiguracion.BCpassClick(Sender: TObject);
var
password: string;
begin
 if edit1.text = edit2.text
  then
    begin
    fmodulo.tempresa.Active := true;
    fmodulo.tempresa.Edit;
    password := CalcHash2(Edit1.Text, haMD5);
    fmodulo.tempresa.Fields.FieldByName ('pas').AsString:= password;
    fmodulo.tempresa.Post;
    application.MessageBox(pchar('Contraseña guardada exitosamente'),
    pchar('ALERTA'), (MB_OK + MB_ICONINFORMATION))
    end
  else
    application.MessageBox(pchar('Las contraseñas no coinciden, intentte nuevamente'),
    pchar('ERROR'), (MB_OK + MB_ICONINFORMATION))
end;
Pero luego me di cuenta de que el tipo de variable ya es un string

Resultado... estoy mas perdido que en un principio con respecto a los tipos de datos que maneja delphi y sql

Casimiro Notevi 07-12-2017 19:25:34

Hola, pero exactamente qué problema es el que tienes.

bucanero 07-12-2017 19:37:32

hola, a mi ha pasado ese error con los componentes Zeos, es un bugs de este paquete por lo menos en la versión que yo utilizo.

El error en particular se da cuando a un componente de datos (TzQuery o TzTable) le asignas en diseño los campos, y el componente les pone el tipo de dato que considera oportuno y cuando en ejecución intentas acceder a ese campo suele dar un error del tipo que comentas, "el campo esperado es distinto al actual". Sobre todo ocurre con las ultimas versiones en donde se ha implementado el UNICODE a los campos de tipo texto.

Una de las soluciones mas simples pasa por dejar la lista de campos vacía y que esta se llene de forma automática al abrir la tabla

aledieb 07-12-2017 20:57:38

Hola, el error te da al asignar o grabar en la tabla?
Probaste
Código Delphi [-]
fmodulo.tempresa.Fields.FieldByName ('pas').AsString := widestring( CalcHash2(Edit1.Text, haMD5) );

Creo que es así.

The Cid James 08-12-2017 02:05:24

Cita:

Empezado por Casimiro Notevi (Mensaje 523214)
Hola, pero exactamente qué problema es el que tienes.

Como dije al abrir el hilo me sale el siguiente error mismatch for field expecting widememo actual widestring cuando intento hacer el post a la base de datos

Cita:

Empezado por bucanero (Mensaje 523215)
hola, a mi ha pasado ese error con los componentes Zeos, es un bugs de este paquete por lo menos en la versión que yo utilizo.

El error en particular se da cuando a un componente de datos (TzQuery o TzTable) le asignas en diseño los campos, y el componente les pone el tipo de dato que considera oportuno y cuando en ejecución intentas acceder a ese campo suele dar un error del tipo que comentas, "el campo esperado es distinto al actual". Sobre todo ocurre con las ultimas versiones en donde se ha implementado el UNICODE a los campos de tipo texto.


Una de las soluciones mas simples pasa por dejar la lista de campos vacía y que esta se llene de forma automática al abrir la tabla

efectivamente estoy usando zeos 7.2.1-rc, no comprendo muy bien a que te referis a que se llene de forma automatica

Cita:

Empezado por aledieb (Mensaje 523217)
Hola, el error te da al asignar o grabar en la tabla?
Probaste
Código Delphi [-]fmodulo.tempresa.Fields.FieldByName ('pas').AsString := widestring( CalcHash2(Edit1.Text, haMD5) );


Creo que es así.

Lo acabo de probar y me dice exactamente lo mimo, como sino tomara el cambio mismatch for field expecting widememo actual widestring

The Cid James 08-12-2017 04:38:33

Buenas despues de darle vueltas al asunto y gracias a lo que dijo bucanero note que en zeos lib haciendo click en el componente (tztable en este caso), te salen las propiedades de los campos y en algunos casos los campos tienen la propiedad BlobType, supongo que es dependiendo el tipo de campo que tengas en la base de datos, pero aun no comprendo muy bien porque solo algunos campos tienen esta propiedad.


En fin cuando cambie la propiedad dicha a ftwidestring pude hacer finalmente el post en la base de datos. Muchas gracias a todos por tomarse el tiempo de ayudarme

Saludos


La franja horaria es GMT +2. Ahora son las 04:04:34.

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