ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

PROBLEMA - Conexão ADO duplicando registros

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
alexrosalin
Novato
Novato


Registrado: Sábado, 19 de Julho de 2008
Mensagens: 48

MensagemEnviada: Seg Mai 27, 2013 2:52 pm    Assunto: PROBLEMA - Conexão ADO duplicando registros Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
Batera
Colaborador
Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008
Mensagens: 4899
Localização: Maringá

MensagemEnviada: Seg Mai 27, 2013 4:32 pm    Assunto: Responder com Citação

Qual código você está utilizando pra salvar o setor?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
alexrosalin
Novato
Novato


Registrado: Sábado, 19 de Julho de 2008
Mensagens: 48

MensagemEnviada: Seg Mai 27, 2013 4:58 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
Batera
Colaborador
Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008
Mensagens: 4899
Localização: Maringá

MensagemEnviada: Seg Mai 27, 2013 10:51 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
alexrosalin
Novato
Novato


Registrado: Sábado, 19 de Julho de 2008
Mensagens: 48

MensagemEnviada: Ter Mai 28, 2013 7:47 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
Batera
Colaborador
Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008
Mensagens: 4899
Localização: Maringá

MensagemEnviada: Ter Mai 28, 2013 9:16 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB