DBEdit 2 locate
oii pessoal como vão?? estou um pequeno problema
vejam: tenho uma tabela!! com produtos cadastrados!! quero q quando eu for cadastrar outro produto e cadastrar o mesmo nome, não aceite e apareçe um showmessage ou messagedlg(´Esse nome ja esta Cadastrado´) ja tentei de tudo q é geito e não estou conseguindo vcs poderiam me dar uma informação???
alguem pode me ajduar
tom.e@bol.com.br
fico muito grato
vejam: tenho uma tabela!! com produtos cadastrados!! quero q quando eu for cadastrar outro produto e cadastrar o mesmo nome, não aceite e apareçe um showmessage ou messagedlg(´Esse nome ja esta Cadastrado´) ja tentei de tudo q é geito e não estou conseguindo vcs poderiam me dar uma informação???
alguem pode me ajduar
tom.e@bol.com.br
fico muito grato
Everton Tom
Curtidas 0
Respostas
Guibas
12/08/2004
if table.locate(´campo´,dbedit,[]) then
begin
showmessage(´ja tem´);
end;
ou use sql se tiver usando query!
begin
showmessage(´ja tem´);
end;
ou use sql se tiver usando query!
GOSTEI 0
Everton Tom
12/08/2004
if FDM.TB_CadFuncionario.locate(´Nome´,DbEdit2.Text,[]) then
begin
showmessage(´ja tem´);
tipo toda vez q vou escrever um nome ele apareçe a mensagen!! sera q foi porq eu coloquei no event exit?
begin
showmessage(´ja tem´);
tipo toda vez q vou escrever um nome ele apareçe a mensagen!! sera q foi porq eu coloquei no event exit?
GOSTEI 0
Guibas
12/08/2004
se ele ta aparecendo a msg é pq tem esse registro :)
GOSTEI 0
Everton Tom
12/08/2004
o interessante q apareçe até se eu n escrever nada :)
GOSTEI 0
Dpbraz
12/08/2004
Provavelmente você associou seu dbedit para mesma tabela que você está tentando dar o locate. Com isso o que acontece: Quando você dá um insert na tabela, será incluído um novo registro. Quando você der um locate, o ponteiro desta tabela será movimentado e assim o registro será gravado. Com isso tudo que você digitar neste dbedit será dados como ´já têm´. Para isso use um outro objeto table (com o mesmo tablename) para dar o locate.
Danie
Danie
GOSTEI 0
Everton Tom
12/08/2004
Resumindo eu terei que criar outra tabela? igual a minha original? e colocar o if table.locate(´campo´,dbedit2.text,[]) then
begin
showmessage(´ja tem´);
end;
nela ou na original? colocarei esse codigo no beforepost dela?
begin
showmessage(´ja tem´);
end;
nela ou na original? colocarei esse codigo no beforepost dela?
GOSTEI 0
Everton Tom
12/08/2004
eu tou trabalhando com Data Mudule muda alguma coisa?
GOSTEI 0
Guibas
12/08/2004
trabalhar com datamodule não muda em nada... rapaz veja se colocando 2 table pra msm tabela funcina e faça a pesquisa na que não está em modo de edição....
GOSTEI 0
Rpelisson
12/08/2004
Galera, só uma dica que eu peguei do pessoal da borland e adotamos nos sistemas todos da empresa...
abolir o locate
utilizem o findkey
memso q o campo nao seja chave.. vc define ele como indexfieldname antes de abrir a tabela e localiza pelo findkey.. é 1000 vezes mais rapido q o locate....
criar duas tabelas pode ser a solução, mas também você pode criar uma rotina para ler e gravar esse produto por edit text normal.. sem estar pelo dbedit direto... vai utilizar um pouco mais de programação, mas vc consegue tratar mais fácil....
[]´s
abolir o locate
utilizem o findkey
memso q o campo nao seja chave.. vc define ele como indexfieldname antes de abrir a tabela e localiza pelo findkey.. é 1000 vezes mais rapido q o locate....
criar duas tabelas pode ser a solução, mas também você pode criar uma rotina para ler e gravar esse produto por edit text normal.. sem estar pelo dbedit direto... vai utilizar um pouco mais de programação, mas vc consegue tratar mais fácil....
[]´s
GOSTEI 0
Everton Tom
12/08/2004
Galera Tou sendo grato a vcs que me ajudaram na resolução deste problema!! sou muito grato meu e-mail é tom.e@bol.com.br sou de Criciuma precisando de alguma coisa tambem estarei ai tambem no forum p/ poder ajudar em tudo!!!
a vcs [b:010a6cacfe]Guibas, Dpbraz rpelisson[/b:010a6cacfe] muito obrigado vlw galera!!!!
a vcs [b:010a6cacfe]Guibas, Dpbraz rpelisson[/b:010a6cacfe] muito obrigado vlw galera!!!!
GOSTEI 0
Macario
12/08/2004
olá programador boa tarde.
Você pode fazer desta forma:
No botão Novo(ou incluir) você apenas prepara a tela para a inclusão dos dados. Ao invés de já disparar um Table.Append (ou Insert).
Ai no evento OnExit de um TEdit(ou TMaskEdit) você usa o seguinte
Table1.IndexFiledName := nome_do_campo;
if not (Table1.FindKey(edit1.text)) then
Table1.Append
else
begin
ShowMessage(´Este nome já esta em uso´);
exit;
end;
Qualquer duvida estamos aqui.
Você pode fazer desta forma:
No botão Novo(ou incluir) você apenas prepara a tela para a inclusão dos dados. Ao invés de já disparar um Table.Append (ou Insert).
Ai no evento OnExit de um TEdit(ou TMaskEdit) você usa o seguinte
Table1.IndexFiledName := nome_do_campo;
if not (Table1.FindKey(edit1.text)) then
Table1.Append
else
begin
ShowMessage(´Este nome já esta em uso´);
exit;
end;
Qualquer duvida estamos aqui.
GOSTEI 0
Everton Tom
12/08/2004
opa!! amigo achei muito boa sua citação mais tenhu uma duvida!! veja esta parte q vc escreveu:
No botão Novo(ou incluir) você apenas prepara a tela para a inclusão dos dados. Ao invés de já disparar um Table.Append (ou Insert).
como assim? e se eu tiver usando DBNavigator????
No botão Novo(ou incluir) você apenas prepara a tela para a inclusão dos dados. Ao invés de já disparar um Table.Append (ou Insert).
como assim? e se eu tiver usando DBNavigator????
olá programador boa tarde.
Você pode fazer desta forma:
No botão Novo(ou incluir) você apenas prepara a tela para a inclusão dos dados. Ao invés de já disparar um Table.Append (ou Insert).
Ai no evento OnExit de um TEdit(ou TMaskEdit) você usa o seguinte
Table1.IndexFiledName := nome_do_campo;
if not (Table1.FindKey(edit1.text)) then
Table1.Append
else
begin
ShowMessage(´Este nome já esta em uso´);
exit;
end;
Qualquer duvida estamos aqui.
[b:7b003e2b6f][/b:7b003e2b6f]GOSTEI 0
Macario
12/08/2004
neste caso voce teria que ter os campos como chave primaria, para quando desse um Table.Post o proprio banco nao aceitaria o nome
Tente não usar muito os componentes DataWare, pois como voce vê
eles não sao muito flexiveis.
Tente não usar muito os componentes DataWare, pois como voce vê
eles não sao muito flexiveis.
GOSTEI 0
Anjinho Loiro
12/08/2004
Como fazer para localizar dentro de uma Table, um registro que terá seu código digitado num edit.
Aliás, são dois tipos de localização:
Código = Procura exatamente o que for digitado.
Nome = Procura por parciais do nome do cliente.
Os códigos serão colocados no evento OnClick de botoões dentro do formulário e os dados a serem localizados serão digitados dentro de edits.
Se puder me mandar um exemplo, ficarei muito agradecida.
polisuporte@hotmail.com
Bjs...
Aliás, são dois tipos de localização:
Código = Procura exatamente o que for digitado.
Nome = Procura por parciais do nome do cliente.
Os códigos serão colocados no evento OnClick de botoões dentro do formulário e os dados a serem localizados serão digitados dentro de edits.
Se puder me mandar um exemplo, ficarei muito agradecida.
polisuporte@hotmail.com
Bjs...
GOSTEI 0
Anjinho Loiro
12/08/2004
Como fazer para localizar dentro de uma Table, um registro que terá seu código digitado num edit.
Aliás, são dois tipos de localização:
Código = Procura exatamente o que for digitado.
Nome = Procura por parciais do nome do cliente.
Os códigos serão colocados no evento OnClick de botoões dentro do formulário e os dados a serem localizados serão digitados dentro de edits.
Se puder me mandar um exemplo, ficarei muito agradecida.
polisuporte@hotmail.com
Bjs...
Aliás, são dois tipos de localização:
Código = Procura exatamente o que for digitado.
Nome = Procura por parciais do nome do cliente.
Os códigos serão colocados no evento OnClick de botoões dentro do formulário e os dados a serem localizados serão digitados dentro de edits.
Se puder me mandar um exemplo, ficarei muito agradecida.
polisuporte@hotmail.com
Bjs...
GOSTEI 0
Macario
12/08/2004
Ola Monica.
Diga que tipo de base voce usa...para poder indicar um metodo mas eficaz.
Diga que tipo de base voce usa...para poder indicar um metodo mas eficaz.
GOSTEI 0
Microbios
12/08/2004
everton tom:
Use o evento OnBeforePost do componente TTABLE (ou o que estiver usando) para neste evento usar o método Locate ou findKey (como citaram por aqui.) Associe uma Query para esta mesma tabela e aplique nela... Asim o ponteiro não sairá do lugar onde foi dado o append/insert, você pesquisa pelo dado... e obtém a resposta. Caso haja igual, no próprio evento vc coloca uma Create ExceptionFmt.(....) como mensagem.
E o evento irá abortar o append/insert para você.
Qualquer coisa ou um exemplo prático disso me contacte.
mbiosinformatica@gmail.com
Rafael
Use o evento OnBeforePost do componente TTABLE (ou o que estiver usando) para neste evento usar o método Locate ou findKey (como citaram por aqui.) Associe uma Query para esta mesma tabela e aplique nela... Asim o ponteiro não sairá do lugar onde foi dado o append/insert, você pesquisa pelo dado... e obtém a resposta. Caso haja igual, no próprio evento vc coloca uma Create ExceptionFmt.(....) como mensagem.
E o evento irá abortar o append/insert para você.
Qualquer coisa ou um exemplo prático disso me contacte.
mbiosinformatica@gmail.com
Rafael
GOSTEI 0