Ir para conteúdo
Fórum Script Brasil
  • 0

Verificação De Registro Ja Cadastrado


Guest - a_xavier31 -

Pergunta

Guest - a_xavier31 -

Meu caros amigos deste forum, Boa noite.

passei a tarde tentando fazer com que o código me passado pelo meu caro colega s3c e o micheus, mas não estou conseguindo segue o código que implementei, esta quase fazendo o que eu quero a não ser que pelo fato do nome QUE não ESTA CADASTRADO O SISTEMA TERIA QUE GRAVAR, mas grava somente o código o resto do registro ele não grava já tentei de tudo ate INSERT INTO EU já FIZ. CONTO COM A AJUDA DE vocês NOVAMENTE...Segue o código ATUAL E DEPOIS PASSAREI O QUE já TENTEI E não DEU CERTO.

procedure TCadClifor.btn_gravarClick(Sender: TObject);

begin

strSql:= 'SELECT * FROM ' + nomeTabela;

strSql:= strSql + ' WHERE NOME = ' + #39 + DBEdit1.Text + #39;

IBDataSet1.Close;

IBDataSet1.SelectSQL.Clear;

IBDataSet1.SelectSQL.Add(strSql);

IBDataSet1.Open;

if IBDataSet1.RecordCount > 0 Then

begin

ShowMessage('Este nome já existe!!!!');

end

else

begin

IBDataSet1.Insert;

IBDataSet1.Post;

DM.Trans.CommitRetaining;

mensagem:= 'O Registro foi Incluido ou alterado com sucesso. ';

Application.MessageBox(Pchar(mensagem), 'Informação', MB_OK+MB_ICONINFORMATION);

Executar:=habilitaBotoes;

end;

end; ESTE É O ATUAL QUE não ESTA GRAVANDO O REGISTRO SÓ O CÓDIGO

ESTE É O QUE já TENTEI E DEU ERRO A BEÇA

strSql:= 'SELECT * FROM ' + nomeTabela;

strSql:= strSql + ' WHERE NOME = ' + #39 + DBEdit1.Text + #39;

IBDataSet1.Close;

IBDataSet1.SelectSQL.Clear;

IBDataSet1.SelectSQL.Add(strSql);

IBDataSet1.Open;

if IBDataSet1.RecordCount > 0 Then

begin

ShowMessage('Este nome já existe!!!!');

end

else

begin

strSql:= 'INSERT INTO CLIFOR (CF,PFPJ,NOME,NOME_FANTASIA,RUA_AV,BAIRRO,CIDADE,CEP,ESTADO,TELEFONE,RAMAL,CELULAR,FAX,'+ #13

+ 'EMAIL,CPF_CNPJ,RG_IE,NOME_CONTATO,TEL_CONTATO,CEL_CONTATO,E_MAIL_CONTATO)VALUES(NULL,NULL,NULL,NULL,NULL,DBComboBox1.Text,DBComboBox2.Text,'+ #13

+ 'Dbedit1.Text,Dbedit2.Text,Dbedit3.Text,Dbedit4.Text,Dbedit5.Text,Dbedit6.Text,DBComboBox3.Text,Dbedit7.Text,Dbedit8.Text,Dbedit9.Text,'+#13

+ 'Dbedit10.Text,Dbedit11.Text,Dbedit12.Text,Dbedit13.Text,Dbedit14.Text,Dbedit15.Text,Dbedit16.Text,Dbedit17.Text,NULL)' ;

IBDataSet1.Post;

DM.Trans.CommitRetaining;

mensagem:= 'O Registro foi Incluido ou alterado com sucesso. ';

Application.MessageBox(Pchar(mensagem), 'Informação', MB_OK+MB_ICONINFORMATION);

Executar:=habilitaBotoes;

end;

MAIS UMA VEZ CONTO A AJUDA DE vocês MEU CAROS COLEGAS.....

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Posso estar enganado porque estou engatinhando no Delphi, mas eu não faria todas essas verificações. Eu usaria apenas o ApplyUpdates. Costumo criar um botão novo que dá o insert no banco, quando clico no botão salvar, aí começam algumas verificações como verificar se o código ou o nome já existem, se não existir, ele executa o post e depois o applyupdates. Infelizmente não tenho o Delphi aqui senão já te passava o código.

Outra coisa: seu erro pode estar no bloco:

"if IBDataSet1.RecordCount > 0 Then

begin

ShowMessage('Este nome já existe!!!!');

end " - Porque sempre vai dar mensagem quando tiver algum registro no banco.

Link para o comentário
Compartilhar em outros sites

  • 0

Bom, no seu primeiro SQL, você dá Open no Dataset e se RecordCount = 0 então você coloca seu Dataset em modo de inserção e depois dá o Post. Note que seu Dataset está vazio e provavelmente ele está gravando o código por ser um campo de auto-incremento.

No seu segundo SQL, você faz: Insert Into. Isso não tem nada a haver com Post.

Quando se utiliza comandos como Insert, Update, Delete, normalmente você utiliza uma Query para depois aplicar o comando no Banco com Query.ExecSQL;

Link para o comentário
Compartilhar em outros sites

  • 0

Nada melhor do que um pouco mais de informação para podermos dar melhores sugestões.

Observando sua segunda tentativa, observamos que você utiliza componentes DBText para digitar os campos, logo imagino que eles estejam ligados a um DataSource que por sua vez deve estar ligado ao seu DataSet IBDataSet1, o qual provavelmente contém o select dos campos de sua tabela. Vamos agora observar sua primeira tentativa; você está utilizando este mesmo DataSet (IBDataSet1), alterando seu select para conter o teste do campo nome. Isto com certeza não deve ser feito. Neste tipo de situação, você deverá utilizar um outro componente contendo o select de teste desejado. Neste cenário, seu DataSet IBDataSet1 continuaria contendo o select correto e um outro DataSet (p.ex. IBDataSetNome) teria o select de teste. Então, no seu evento btn_gravarClick, você faria algo como:

IBDataSetNome.Close;
IBDataSetNome.SelectSQL.Clear;
IBDataSetNome.SelectSQL.Add('SELECT * FROM ' + nomeTabela);
IBDataSetNome.SelectSQL.Add('WHERE NOME = ' + #39 + DBEdit1.Text + #39);
IBDataSetNome.Open;
if IBDataSetNome.EOF Then
begin
  IBDataSet1.Post;
  DM.Trans.CommitRetaining;
  mensagem:= 'O Registro foi Incluido ou alterado com sucesso. ';
  Application.MessageBox(Pchar(mensagem), 'Informação', MB_OK+MB_ICONINFORMATION);
  Executar := habilitaBotoes;
end else
  ShowMessage('Este nome já existe!!!!');

Observe que o IBDataSet1.Insert normalmente deve ocorrer antes que a edição dos campos possa ser executada pelo usuário - normalmente você tem um botão Incluir ou similar. No evento onClick deste botão você colocaria o comando IBDataSet1.Insert (mais uma vez não dá para precisar como foi construido seu projeto e assim ficamos na suposição).

E isto é o que deveria bastar para que seu código funcionasse.

Na verdade costumo não deixar este tipo de teste para o momento da gravação. Este teste eu realizo no evento OnExit do campo a ser testado e, existindo, após a mensagem eu movo o foco devolta ao campo e no evento OnClick do botão gravar fica apenas o Post. Também usaria o IBDataSetNome de forma diferente, onde passaria o nome como parâmetro - mas não vamos complicar por enquanto. wink.gif

Não trabalho com a paleta do IB, mas a filosofia é sempre a mesma. Espero que agora você consiga resolver este problema. qualquer coisa, estamos aí (ou melhor aqui!!!)

[]s

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...