PDA

Ver la Versión Completa : Error al insertar artículos


Antonio Cardero
05-11-2019, 16:17:41
Hola. ( moderador por favor quite el anterior tema, que me dío problemas la etiqueta delphi.)

Estoy trabajando con Delphi 10.2, dbExpress accediendo con lib de Mysql a una base de datos Maria DB. Servidor Apache (Versión del cliente de base de datos: libmysql - mysqlnd 5.0.12-dev - 20150407 - $Id:.) Tengo una tabla llamada Role, donde:

id : es autoincrement,
Nombre: es requerido.

Me conecto así: TSQLConnection->TSQLTable->TDataSetProvider->TClientDataSet->TDataSource.

Data controls y Action de control para Dataset.

Mi problema es que, haciendo la inserción de Roles desde Delphi, llenando solo el Nombre, me da error al hacer el post:

“Project Project2.exe raised exception class EDatabaseError with message 'Field 'id' must have a value'.”

El código del Post es el siguiente:

(sender as TDataSetAction).DataSource.DataSet.Post;
if dsCteDSetRol.ApplyUpdates(0) > 0 then
begin
dsCteDSetRol.CancelUpdates;
end;

Se supone que el id, al ser autoincremento, de el se ocupe gestor de base.
Del id tengo el ProviderFlags[pfInKey], el provider: ResolveToDataSet:=True;

¿Cómo debo configurar, para poder adicionar?

De antemano muchas gracias.
Antonio
Responder Con Cita

movorack
05-11-2019, 16:44:42
Hola, El mensaje de error lo genera cuando el campo requiere que se le asigne un valor.

Puede que tengas el campo creado en el dataset, en este caso prueba a desmarcar la opción de required.
Puede que no esté creado en el dataset y esté asignando true automaticamente a esta opción al abrir el dataset y esto puede deberse a un not null en la tabla.

Te recomiendo nos muestres como está el dataset (Ctrl+C sobre el dataset, Ctrl+V en un editor de texto) y la estructura de la tabla para poderte dar una mejor guía.

Antonio Cardero
05-11-2019, 19:41:19
Gracias por la atención. Disculpa la Demora, movorack. Es que aquí hay Apagón Empresarial de 11 am a 1pm (Cuba).


Aquí está el diseño del clientedataset:




object dsCteDSetRol: TClientDataSet
Active = True
Aggregates = <>
Params = <>
ProviderName = 'dtstprvdr1'
Left = 616
Top = 536
object intgrfldCteDSet1id: TIntegerField
FieldName = 'id'
ProviderFlags = [pfInKey, pfHidden]
end
object strngfldCteDSet1nombre: TStringField
FieldName = 'nombre'
Required = True
Size = 255
end
end





Ahora, como ves desmarqué el requerido del id; y en efecto no da error, pero al insertar el segundo, me da un error de : Key violation.
y comoo único puedo seguir insertanto es alternándolo con un Refres.



Y ahora qué será??

movorack
05-11-2019, 21:58:01
No se. Puedes probar con la opción AutoApply en True?

Antonio Cardero
05-11-2019, 22:17:36
Ok. probaré y le diré mañana.

Gracias

Antonio Cardero
06-11-2019, 14:33:00
Si, dio resultado resultado.



Ahora lo que abandonamos dbexpress y escogimos FireDAC, por estar mejor documentado, e hicimos prueba y es estable.


Saludos y gracias, que tengan buen día colegas.