Fórum Mestre Detalhe + DBExpress + SQL Server #391685

02/12/2010

0

Salve galera, tudo bem??

Seguinte, trabalho com DBExpress e sempre utilizei o esquema de Mestre - Detalhe via Delphi (jeito padrão usado no conceito de 3 camadas) ..

TSQLConnection = Acesso ao banco SQL Server
TSQLQuery (Mestre) = Com um SQL básico (SELECT * FROM TABELA)
TDataSetProvider = [poPropogateChanges,poAllowCommandText]
TClientDataSet (Mestre) = Só mantenho os campos adicionados com suas propriedades no padrão mesmo ...

O "Filho" esta assim:

TSQLQuery = Com um SQL assom (SELECT * FROM TABELA WHERE CODIGO=:CODIGO)

Mudo tambem as propriedades no parâmetro para: DataType: ftInteger ParamType: ptInput Type: Integer e Value: 0

TDataSetProvider = [poPropogateChanges,poAllowCommandText]
TClientDataSet = Neste cara faço a ligação mestre e detalhe usando o DataSource ... MasterSource ... etc ... !!


Bom esse esquema todo funciona 100% no Firebird, porém, quando mudei para o SQL Server 2005 não consegui mais fazer funcionar !!

O problema que estou encontrando é que no SQL Server uso o campo IDENTITY para gerar o código da PK, e só consigo pegar o valor do IDENTITY (que é o codigo do MESTRE) após dar o ApplyUpdates nele.

Só o Delphi não aceita inserir dados nos DataSet's pai e filho sem o CÓDIGO da PK ser informado ... mas eu ainda não tenho o código ...

Como posso fazer?????

Valeu
Carlos Souza

Carlos Souza

Responder

Posts

02/12/2010

Wilson Junior

Utilize transações (SQLConnection.BeginTransaction) e de um Apply no Pai, após pode ser dado um Apply no filho que não terá problema. Caso seja cancelado o processo, efetue o Rollback da transação.

Espero ter colaborado.
Responder

Gostei + 0

02/12/2010

Carlos Souza

O problema é que o que não está funcionando direito é o fato da ligação de mestre-detalhe no Delphi.

Quando mudei para o SQL Server eu não consegui fazer os componentes funcionarem.

Porque como não tenho mais o valor do código da PK da tabela PAI para informar aos filhos (usando o esquema do IDENTITY) eles se perdem no meio do procedimento !!

Meu problema esta em fazer os cadastros em memória sem ter esse CÓDIGO para informar, uma vez que só obtenho ele no momento do ApplyUpdates do PAI .... ai depois disso eu passo para os DataSet's filhos os códigos !!

Me ajudem ...
Responder

Gostei + 0

14/12/2010

Luiz Benevenuto

Acho que vc está fazendo a ligação MEstre/Detalhe errada no DBX.
Ela deve ser feita direto nas SQLQuerys, não no CDS.
E de qq maneira uma inserção de dados necessita do código do pai, que faz a ligação entre as tabelas.
O tipo de ligação mestre/detalhe mais aconselhada é a Nested Tables.

Assim vc vai ter só um provider e não vai precisar ficar dando apply em vários CDSs somente o mestre cuida de tudo isso.
Abraço.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar