Как работает ОБНОВЛЕНИЕ SQL из MASTER-DETAIL на TClientDataSets - DELPHI XE3 DATASNAP

Я создаю простые отношения Master-Detail с ClientDataSets на Delphi XE3 + SqlServer. Я настроил Master-Detail через DatasetField в клиентском приложении и со свойством MasterSource в Detail TUniQuery в серверном приложении. Я использую один DataSetProvider и один DataSource.

Серверное приложение

**Master table**
object qyREMISION_COMPRA: TUniQuery        
Connection = DMBase.BD
SQL.Strings = (SELECT R.ID_REMISION_COMPRA, R.FECHA, R.FACTURA
               FROM REMISION_COMPRA R    
               WHERE R.ID_REMISION_COMPRA =:ID_REMISION_COMPRA)

object qyREMISION_COMPRAID_REMISION_COMPRA: TIntegerField
  AutoGenerateValue = arAutoInc
  FieldName = ID_REMISION_COMPRA
end

**Detail table**
object qyREMISION_COMPRA_PRODUCTO: TUniQuery     
Connection = DMBase.BD
SQL.Strings = (SELECT RP.ID_REMISION_COMPRA_PRODUCTO, RP.ID_REMISION_COMPRA, RP.ID_PRODUCTO
               FROM REMISION_COMPRA_PRODUCTO RP
               WHERE RP.ID_REMISION_COMPRA=:ID_REMISION_COMPRA
               ORDER BY RP.ID_REMISION_COMPRA_PRODUCTO)
SQLUpdate.Strings = (UPDATE REMISION_COMPRA_PRODUCTO
                     SET ID_REMISION_COMPRA = :ID_REMISION_COMPRA, ID_PRODUCTO = :ID_PRODUCTO
                     WHERE ID_REMISION_COMPRA_PRODUCTO = :Old_ID_REMISION_COMPRA_PRODUCTO)
MasterSource = datasetREMISION_COMPRA
MasterFields = ID_REMISION_COMPRA
DetailFields = ID_REMISION_COMPRA

**DataSetProvider**
object dspREMISION_COMPRA: TDataSetProvider
DataSet = qyREMISION_COMPRA
Options = [poCascadeDeletes, poCascadeUpdates, poPropogateChanges, poUseQuoteChar] end

Клиентское приложение

**Master ClientDataSet**
object cdsREMISION_COMPRA: TClientDataSet
ProviderName = 'dspREMISION_COMPRA'
RemoteServer = dmProvs.dspCompra
object cdsREMISION_COMPRAqyREMISION_COMPRA_PRODUCTO: TDataSetField
  FieldName = 'qyREMISION_COMPRA_PRODUCTO'
end 

**Detail ClientDataSet**
object cdsREMISION_COMPRA_PRODUCTO: TClientDataSet
DataSetField = cdsREMISION_COMPRAqyREMISION_COMPRA_PRODUCTO

Чтобы сохранить изменения в базе данных, я делаю только для основного набора данных клиента cdsREMISION_COMPRA.ApplyUpdates(0)

Когда я делаю вставку работает отлично, но когда я делаю обновление, у меня возникают проблемы с триггерами в базе данных, потому что приложение выполняет сначала детали, а затем обновление основной таблицы. Это нормально? Я что то не так делаю?

0 ответов

Другие вопросы по тегам