Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Error al insertar artículos (https://www.clubdelphi.com/foros/showthread.php?t=94287)

Antonio Cardero 05-11-2019 16:17:41

Error al insertar artículos
 
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:

Código:

    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:

Código Delphi [-]
(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:


Código Delphi [-]
 

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.


La franja horaria es GMT +2. Ahora son las 19:50:53.

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