DOUGLASAP 0 Denunciar post Postado Fevereiro 18, 2013 procedure Tcad_equipamento.SpeedButton2Click(Sender: TObject); begin If (DBEdit1.Text = DataModule2.ADOTable_cad_equipamentoEQUIPAMENTO.Value) Then Begin showmessage ('Equipamento ja cadastrado'); end else Begin DataModule2.ADOTable_cad_equipamento.Post; end; end; Bom Dia pessoal Estou querendo verificar se o que foi digitado ja existe na tabela Meu código ficou assim. . . . procedure Tcad_equipamento.SpeedButton2Click(Sender: TObject); begin If (DBEdit1.Text = DataModule2.ADOTable_cad_equipamentoEQUIPAMENTO.Value) Then Begin showmessage ('Equipamento ja cadastrado'); end else Begin DataModule2.ADOTable_cad_equipamento.Post; end; end; Mas não esta funcionando . . .. Obrigado galera Compartilhar este post Link para o post Compartilhar em outros sites
Eisenheim 67 Denunciar post Postado Fevereiro 18, 2013 Olá amigo. Nesse caso, você tem que pesquisar dentro da tabela por registros que já estejam cadastrados. Para isso, utilize o método Locate da seguinte maneira: if DataModule2.ADOTable_cad_equipamento.Locate( 'EQUIPAMENTO', DBEdit1.Text, [loCaseInsensitive] ) then showmessage ('Equipamento ja cadastrado'); Até a próxima. :thumbsup: Compartilhar este post Link para o post Compartilhar em outros sites
DOUGLASAP 0 Denunciar post Postado Fevereiro 18, 2013 Olá amigo Havia feito isso antes, mas acontece que gera erro [Error] Unit5.pas(55): Undeclared identifier: 'loCaseInsensitive' [Error] Unit5.pas(55): Incompatible types: 'TLocateOption' and 'Integer' [Fatal Error] Project1.dpr(15): Could not compile used unit 'Unit5.pas' incompatibilidade de tipo tlocareOption e inteiro . . . obrigado pela ajuda... Compartilhar este post Link para o post Compartilhar em outros sites
Eisenheim 67 Denunciar post Postado Fevereiro 18, 2013 Olá amigo. As units DBTables e DB estão declaradas na uses do seu projeto? Até a próxima. :thumbsup: Compartilhar este post Link para o post Compartilhar em outros sites
DOUGLASAP 0 Denunciar post Postado Fevereiro 18, 2013 Ola amigo... Como verifico isso ? Sinceramente não sei. Compartilhar este post Link para o post Compartilhar em outros sites
Eisenheim 67 Denunciar post Postado Fevereiro 18, 2013 Olá amigo. na unit do form aonde você quer fazer essa pesquisa, logo no início do arquivo deve haver algo semelhante a isso: unit NomeDaSuaUnit; interface uses É aqui que você tem que ver se existe essas duas unidades declaradas. Até a próxima. :thumbsup: Compartilhar este post Link para o post Compartilhar em outros sites
DOUGLASAP 0 Denunciar post Postado Fevereiro 18, 2013 Ola Amigo minha unit esta da seguinte forma unit Unit5; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Buttons, Grids, DBGrids, StdCtrls, Mask, DBCtrls; até Compartilhar este post Link para o post Compartilhar em outros sites
Eisenheim 67 Denunciar post Postado Fevereiro 18, 2013 Olá amigo. Nesse caso, depois do DBCtrls coloque uma virgula e acrescente: DBTables, DB; Recompile sua aplicação e faça o teste. Até a próxima. :thumbsup: Compartilhar este post Link para o post Compartilhar em outros sites
DOUGLASAP 0 Denunciar post Postado Fevereiro 18, 2013 Ola amigo O quero q ele faça é se o equipamento estiver cadastrado, ele nao deixe realizar o cadastro para nao ficar com 2 cadastros iguais. Quando salvo, ele gera a mensagem de ''equipamento ja cadastro'' e mesmo faz o cadastro novamente. Meu codigo ficou assim : if DataModule2.ADOTable_cad_equipamento.Locate( 'EQUIPAMENTO', DBEdit1.Text, [loCaseInsensitive] ) then Begin showmessage ('Equipamento ja cadastrado'); end else begin DataModule2.ADOTable_cad_equipamento.Post; end; obrigado amigo Compartilhar este post Link para o post Compartilhar em outros sites
Eisenheim 67 Denunciar post Postado Fevereiro 18, 2013 Olá amigo. if DataModule2.ADOTable_cad_equipamento.Locate( 'EQUIPAMENTO', DBEdit1.Text, [loCaseInsensitive] ) then Begin showmessage ('Equipamento ja cadastrado'); Abort; end; Até a próxima. :thumbsup: Compartilhar este post Link para o post Compartilhar em outros sites
DOUGLASAP 0 Denunciar post Postado Fevereiro 18, 2013 Ola Amigo codigo ficou assim if DataModule2.ADOTable_cad_equipamento.Locate( 'EQUIPAMENTO', DBEdit1.Text, [loCaseInsensitive]) then Begin showmessage ('Equipamento ja cadastrado'); Abort; end else begin DataModule2.ADOTable_cad_equipamento.Post; end; DBEdit1.Text := ''; end; mas ainda continua a mesma coisa. Ele mostra a mensagem dizendo que ja foi cadastrado e cadastra mesmo assim. obrigado Compartilhar este post Link para o post Compartilhar em outros sites
Eisenheim 67 Denunciar post Postado Fevereiro 18, 2013 Olá amigo. Então, mas você tem que pegar o exemplo que te passo e adaptar ao que você precisa, entendeu? Se o registro se encontra em modo de Inserção/Edição e já foi encontrado um equipamento cadastrado, então você tem que desfazer o processo. if DataModule2.ADOTable_cad_equipamento.Locate( 'EQUIPAMENTO', DBEdit1.Text, [loCaseInsensitive]) then Begin Showmessage ('Equipamento ja cadastrado'); DataModule2.ADOTable_cad_equipamento.Cancel; Abort; end; Não sei como você está fazendo, mas antes de mandar incluir/alterar você deve verificar se já existe ou não, se existir o registro, ele vai "Abortar" o processo, não executando mais nada que estiver abaixo dessa condição. Caso contrário, ai sim você faz o processo de inclusão normalmente. Dica: Comece a desenvolver a "sua" lógica em cima dos exemplos que te mando, do contrário você vai apenas "copiar" e "colar" e não vai encadear seus pensamentos. Até a próxima. :thumbsup: Compartilhar este post Link para o post Compartilhar em outros sites
DOUGLASAP 0 Denunciar post Postado Fevereiro 19, 2013 Olá Amigo, O que estou fazendo é exatamente isso 1º - Verificando se o equipamento esta cadastrado, caso não esteja ele salva o dado. Coloquei o código no botão salvar. Meu código ficou desda maneira. procedure Tcad_equipamento.SpeedButton2Click(Sender: TObject); begin if DataModule2.ADOTable_cad_equipamento.Locate( 'EQUIPAMENTOS', DBEdit1.Text, [loCaseInsensitive]) then Begin showmessage ('Equipamento ja cadastrado'); DataModule2.ADOTable_cad_funcionario.Cancel; abort; end else begin DataModule2.ADOTable_cad_equipamento.Post; end; DBEdit1.Text := ''; end; Acontece que tendo o dado cadastrado ou não ele mostra a mensagem de ''Equipamento ja Cadastrado" e salva o dado, tendo o equipamento cadastrado ou não. Pela lógica IF THEN ELSE SE (for verdade) faça isso Como lhe disse amigo, sou novo em delphi. Estou cursando 2 ano de sistema de informação. Irei começar e ver delphi agora, antes estava vendo pascal que sei que é a base do delphi. Através de suas dicas consegui a fazer muitas coisas. Não estou copiando e colando. E sim o que quero é aprender a usar os comandos . . . amigo desculpe postei sem concluir meu raciocínio Pela lógica IF THEN ELSE SE (for verdade) faça isso caso contrário faça isso O que não estou conseguindo entender é o seguinte Estou dizendo para ele verificar o dado existe na minha tabela se existir ele mostra mensagem dizendo que já existe. se não salva o dado. Obrigado pela atenção amigo Compartilhar este post Link para o post Compartilhar em outros sites
Eisenheim 67 Denunciar post Postado Fevereiro 19, 2013 Olá amigo. Vamos lá... No botão incluir, como você está fazendo? Por que pergunto isso. Eu já vi casos onde na hora de incluir um registro, a pessoa costumava fazer um: Tabela.Append; Tabela.Post; Tabela.Edit; Isso era feito justamente para poder gerar um número de controle sequencial para o cadastro dela. Se você estiver fazendo sua inclusão seguindo esse mesmo princípio, provavelmente seja por isso que o registro ainda continue "salvo", uma vez que na verdade ele já foi gravado na tabela, apenas entrou em edição para você concluir o restante do processo. Nessa situação, você pode substituir a instrução: DataModule2.ADOTable_cad_funcionario.Cancel; por DataModule2.ADOTable_cad_funcionario.Delete; Agora, se o modo que você estiver fazendo sua inclusão for diferente disso que te passei, ai eu teria que analisar todo o fonte desse projeto para poder entender o que esta fazendo ele obter esse comportamento. Até a próxima. :thumbsup: Compartilhar este post Link para o post Compartilhar em outros sites
DOUGLASAP 0 Denunciar post Postado Fevereiro 19, 2013 Ola Amigo, compreendi perfeitamente Com sua experiencia qual a melhor maneira de incluir dado ? Utilizo tabela.post; Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
Eisenheim 67 Denunciar post Postado Fevereiro 19, 2013 Olá amigo. Depende do tipo de aplicação que você esteja desenvolvendo. Para o seu caso, a forma como você está fazendo atende muito bem. O que você precisa apenas é definir a forma de tratar algumas situações que seu programa venha apresentar, somente isso. No botão incluir, como você está fazendo? Até a próxima. :thumbsup: Compartilhar este post Link para o post Compartilhar em outros sites
DOUGLASAP 0 Denunciar post Postado Fevereiro 19, 2013 Ola Amigo No botão novo utilizo DataModule2.ADOTable_cad_equipamento.Insert; No botão salvar if DataModule2.ADOTable_cad_equipamento.Locate( 'EQUIPAMENTOS', DBEdit1.Text, [loCaseInsensitive]) then Begin showmessage ('Equipamento ja cadastrado'); DataModule2.ADOTable_cad_funcionario.Cancel; end else begin DataModule2.ADOTable_cad_equipamento.Post; end; Amigo pelo fato de eu estar utilizando SpeedButton tem algum problema ?? Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
Eisenheim 67 Denunciar post Postado Fevereiro 19, 2013 Olá amigo. Não, SpeedButton não influencia em nada. Acredito que agora compreendi o problema. Você tem que fazer o seguinte: No campo aonde você digita o equipamento, no evento OnExit ( do seu DBEdit1 ), você coloca a verificação dessa maneira: if DataModule2.ADOTable_cad_equipamento.Locate( 'EQUIPAMENTOS', DBEdit1.Text, [loCaseInsensitive]) then Begin showmessage ('Equipamento ja cadastrado'); Abort; end; Agora vai funcionar. No botão salvar deixe apenas o método: DataModule2.ADOTable_cad_equipamento.Post; Se houver algum equipamento cadastrado, então ele vai mostrar a mensagem e vai abortar não executando mais nada. Até a próxima. :thumbsup: Compartilhar este post Link para o post Compartilhar em outros sites
DOUGLASAP 0 Denunciar post Postado Fevereiro 20, 2013 Bom Dia Amigo Da forma em que me passou só funciona se em der um Tab e ir para outro componente. Mas na verdade nesse form específico eu só tenho um Edit, teoricamente o usuário digitará na Edit e Clicar em Salvar direto. No meu entendimento o código teria que estar no Button salvar. Não consegui resolver ainda. . . . Obrigado amigo Compartilhar este post Link para o post Compartilhar em outros sites
Eisenheim 67 Denunciar post Postado Fevereiro 20, 2013 Olá amigo. Geralmente, eu trato em duas situações: Primeira Ao sair do campo "como você fez conforme eu sugeri"; Segunda Ao terminar de digitar, pressionando a tecla "Enter" sobre o campo; Eu procuro tratar as informações sempre antes de dar um "Post/Commit" no banco de dados, assim evito alguns problemas. *Dica - Ao invés de utilizar o método "Insert", utilize o método "Append" para realizar a inclusão dos registros. A diferença entre eles eu te expliquei em outro tópico. Até a próxima. :thumbsup: Compartilhar este post Link para o post Compartilhar em outros sites