| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
alexrosalin Novato

Registrado: Sábado, 19 de Julho de 2008 Mensagens: 48
|
Enviada: Seg Mai 27, 2013 2:52 pm Assunto: PROBLEMA - Conexão ADO duplicando registros |
|
|
Boa Tarde Pessoal,
Estou desenvolvendo uma aplicação com Delphi XE2 e banco SQL SERVER usando o componente ADO como ponte.
Estou encontrando um problema, tenho uma tabela de cadastro de empresas e uma tabela de cadastros de setores. O cadastro de setores carrega com sigo o campo id da tabela de empresas para eu saber quais setores pertencem a respectivas empresas.
Dessa forma no meu cadastro de setores fiz um inner join entre essas duas tabelas onde o usuario pode digitar o id da empresa e o mesmo retorna na tela o nome da empresa referente a este código ou pode buscar por uma pesquisa tbm, porem ao salvar o setor a o registro desta empresa na tabela de cadastro de empresas é duplicado...
Eu já coloquei as propriedades pfInUpdate e pfInWhere como false, mas mesmo assim ele duplica a informação.
Alguem já passou por situação parecida?? |
|
| Voltar ao Topo |
|
 |
Batera Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008 Mensagens: 4899 Localização: Maringá
|
Enviada: Seg Mai 27, 2013 4:32 pm Assunto: |
|
|
| Qual código você está utilizando pra salvar o setor? |
|
| Voltar ao Topo |
|
 |
alexrosalin Novato

Registrado: Sábado, 19 de Julho de 2008 Mensagens: 48
|
Enviada: Seg Mai 27, 2013 4:58 pm Assunto: |
|
|
Batera está assim meu formulário:
Eu tenho um TADODataSet (CdsCadSetor) com as seguintes configurações:
**CommandText =
| Código: |
select
cset.*,
emp.nomefantasia,
cat.descricao
from cad_setor cset
inner join cad_empresa emp on emp.id = cset.id_empresa
inner join cad_tiposetor cat on cat.id = cset.id_tiposetor |
**No Fields Editor deste DataSet no campo id.empresa no evento OnValidate está assim =
| Código: |
If Not Sender.IsNull Then
Begin
QrLocalizaEmpresa.Parameters.ParamByName('PCODEMP').Value := Sender.Value;
QrLocalizaEmpresa.Open;
Try
If Not QrLocalizaEmpresa.IsEmpty then
begin
CdsCadSetornomefantasia.Value := QrLocalizaEmpresanomefantasia.Value;
end
else
raise Exception.Create('Empresa não Localizada...');
Finally
QrLocalizaEmpresa.Close;
end;
end; |
**No Fields Editor deste DataSet no campo id.tiposetor no evento OnValidate está assim =
| Código: |
If Not Sender.IsNull Then
Begin
QrLocalizaTipoSet.Parameters.ParamByName('PCODTIPOSET').Value := Sender.Value;
QrLocalizaTipoSet.Open;
Try
If Not QrLocalizaTipoSet.IsEmpty then
begin
CdsCadSetordescricao.Value := QrLocalizaTipoSetdescricao.Value;
end
else
raise Exception.Create('Categoria do Setor não Localizada...');
Finally
QrLocalizaTipoSet.Close;
end;
end; |
Ai tenho mais dois componentes TADOQuery:
-Um chamado QrLocalizaEmpresa que em sua propriedade SQL está assim:
| Código: |
select nomefantasia from cad_empresa
where id = :pcodemp |
-E o outro chamado QrLicalizaTipoSet que em sua propriedade SQL está assim:
| Código: |
select descricao from cad_tiposetor
where id = :pcodtiposet |
O botão para salvar está assim:
| Código: |
if CdsCadSetor.State in [dsInsert] then
begin
CdsCadSetor.Post;
end;
|
Está assim, ai quando eu salvo este cadastro de setor a empresa que eu indicar aqui sempre gera um outro cadastro lá no cadastro de empresa...
Você sabe o que pode ser?? |
|
| Voltar ao Topo |
|
 |
Batera Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008 Mensagens: 4899 Localização: Maringá
|
Enviada: Seg Mai 27, 2013 10:51 pm Assunto: |
|
|
Que estranho...
Em qual tabela a informação é duplicada: cad_setor, cad_empresa ou cad_tiposetor?
Dependendo eu acho que você não pode usar essa SQL em um DataSet pra fazer inserção, somente para visualização de dados, ou seja, em último caso você terá que usar um DataSet para visualização (com os inner joins) e outro DataSet para inserção (sem os inner joins)... |
|
| Voltar ao Topo |
|
 |
alexrosalin Novato

Registrado: Sábado, 19 de Julho de 2008 Mensagens: 48
|
Enviada: Ter Mai 28, 2013 7:47 am Assunto: |
|
|
Então Batera a informação é duplicada nas tabelas cad_empresa e cad_tiposetor as duas que faço o inner join.
O interessante é que os dois campos que eu trago com o inner join (nomefantasia e descricao) suas propriedades pfInUpdate e pfInWhere estão como False no meu dataset.
Se você souber de alguma outra forma de estar fazendo esta mesma funcionalidade só que de outra forma eu agradeço. |
|
| Voltar ao Topo |
|
 |
Batera Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008 Mensagens: 4899 Localização: Maringá
|
Enviada: Ter Mai 28, 2013 9:16 am Assunto: |
|
|
Entendi, Alex...
Quando você utiliza Inner Joins em um DataSet, normalmente é pra consultas e não para manipulações como inserções, atualizações e exclusões.
Portanto, pra simplificar, eu faria de uma forma diferente: criaria um DataSet para cada tabela, ou seha, CdsCadSetor, CdsCadEmpresa e CdsCadTipoSetor. Feito isso, você pode relacioná-las através das propriedades MasterSource e MasterFields. Assim fica mais fácil manipular as tabelas de forma independente. |
|
| Voltar ao Topo |
|
 |
|