Ver Mensaje Individual
  #4  
Antiguo 23-05-2014
gustavosv gustavosv is offline
Miembro
 
Registrado: mar 2008
Posts: 51
Reputación: 17
gustavosv Va por buen camino
bueno explico un poco lo que me sucedía ...

uso MySQL y siempre he manejado las tablas con llave principal AUTOINCREMENT independiente de que tenga otra posible llave primaria, como por decir, el NroFactura, la razón, entiendo que es una buena práctica en cuanto a la estructuración de la BD.

en Delphi uso los componentes DBExpress TSQLQuery <- TDataSetProvider <- TClientDataSet, donde genero los campos persistentes del TQuery y a todos les quito el parámetro Required, adicionalmente al campo Id (AutoInc) le selecciono el ProviderFlags->pfInKey indicando que esa es la llave principal, de igual manera procedo en el TClientDataSet para finalmente ene l TDataSetProvider dejar la propiedad UpdateMode como 'upWhereKeyOnly'. Lo anterior para que las actualizaciones en las tablas se hagan usando la llave primaria (el Id AutoInc).

Como tengo la configuración antes descrita, al grabar un registro no le indicaba ningún valor al campo Id (AutoInc) esperando que el servidor se lo asignara automáticamente, lo cual funciona pero SOLO cuando trabajaba 1 registro (situación normal en mi caso) ya que al no indicar valor, el toma su valor por defecto (p.ej. NULL) y en el ApplyUpdates al grabar el registro físicamente el servidor le asignaba el Id automáticamente. Ahora al tener 2 o más registros como para el Id se mueve el valor por defecto, al hacer el segundo Post éste también tendría el mismo valor que el primero y produce el error 'Key Violation'.
Responder Con Cita