PDA

Ver la Versión Completa : Error Field Value Required


Edgtho
23-06-2008, 08:51:24
Buenas,

Estoy intentando introducir un valor desde un clientdataset a una tabla y me da el error "field Value Required" no se que mas tocar, el caso es que siempre me da el mismo error.

No puedo usar campos persistentes ya que la tabla se enlaca en runtime. La tabla de destino esta en Mysql y tiene dos campos como clave primaria. El caso es que en la tabla origen me puedo encontrar facilmente datos en los que solo tengan el primer campo con valor mientras que el segundo este en blanco (no nulo, en blanco).

Cuando intento copiar el registro desde delphi me da el error "field value has required". Recorriendo los campos y poniendo required=false sigue dandome el mismo error. Igualando el "EmtpyStr", solo parece ir cuando le meto un caracter de espacio " " pero entonces al hacer el applyupdates me salta el error "reader has no more rows".


Por si sirve de informacion, utilizo Delphi2007


un saludo

coso
23-06-2008, 15:54:50
Hola,

probablemente en el diseño de la tabla en la base de datos sea donde aparece que son requeridos, por lo que la deberias modificar con el alter table y no con el required = true. Ahora bien, dos claves primarias en una tabla es algo un poco incongruente, pues lo bueno de la clave primaria es que sea unica. Otro detalle, nulo es para indicar precisamente que un campo esta en blanco ('', nil, char(#0), 'is NULL', etc..)

Espero haberte ayudado o dado alguna pista de como solucionarlo.

saludos.

Edgtho
23-06-2008, 22:34:12
No es incongruente si es por ejemplo si es una tabla de articulos que tenga "Codigo;clase" como clave, o por ejemplo Albaran(codigo) y Lineas de albaran(codigo,linea).

El problema no esta en el diseño de la tabla, si no en el clientdataset. En lo que delphi manda. Por lo del alter table me parece que en realidad has entendido mal mi pregunta. Yo indique que haciendo una consulta no pasaba nada sino que era a traves del clientdataset cuando existia el problema.

Al final he encontrado la respuesta:

Si tenemos un clientdataset ( sqlconnection -> query -> provider -> clientdataset) al abrirlo este trae las definiciones de campos, pues los campos que son la clave primaria se marcan primero como REQUERIDOS, este valor se puede quitar (required=false) pero el problema principal es cuando el tipo de campos es ademas STRING.

Los Tfields del clientdataset de tipo string (TStringfield) tiene una propiedad llamada TRANSLITERATE. Si pasamos '', nil, char(#0) o cualquier derivado saltara el fallo "Field value required" o "reader has no more rows" si quitamos TRANSLITERATE e insertamos un valor ' ' no tenemos el problema y el campo se inserta (notese que hay un espacio en blanco).

Despues hay que hacer una chapucilla mandando un update table para eliminar dichos espacios en blanco sobre ese campo, que al efectuarse en el lado del servidor no hay problema entonces.

Esto me parece que es un problema de Delphi2007 con los clientdataset, me falta comprobar si falla tambien en Delphi7.

coso
23-06-2008, 22:37:20
bueno, me alegro q igualmente lo hayas resuelto

saludos