Array
(
)

DBEdit 2 locate

Everton Tom
   - 12 ago 2004

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


Guibas
   - 12 ago 2004

if table.locate(´campo´,dbedit,[]) then
begin
showmessage(´ja tem´);
end;

ou use sql se tiver usando query!


Everton Tom
   - 12 ago 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?


Guibas
   - 12 ago 2004

se ele ta aparecendo a msg é pq tem esse registro :)


Everton Tom
   - 12 ago 2004

o interessante q apareçe até se eu n escrever nada :)


Dpbraz
   - 12 ago 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


Everton Tom
   - 12 ago 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?


Everton Tom
   - 12 ago 2004

eu tou trabalhando com Data Mudule muda alguma coisa?


Guibas
   - 12 ago 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....


Rpelisson
   - 12 ago 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


Everton Tom
   - 12 ago 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 Guibas, Dpbraz rpelisson muito obrigado vlw galera!!!!


Macario
   - 12 ago 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.


Everton Tom
   - 12 ago 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????



Citação:
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.



Macario
   - 12 ago 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.


Anjinho Loiro
   - 27 mai 2005

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...


Anjinho Loiro
   - 27 mai 2005

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...


Macario
   - 29 mai 2005

Ola Monica.

Diga que tipo de base voce usa...para poder indicar um metodo mas eficaz.


Microbios
   - 30 mai 2005

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