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 

chamando form de cadastro corretamente
Ir à página 1, 2  Próximo
 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
gbt
Profissional
Profissional


Registrado: Quarta-Feira, 17 de Janeiro de 2007
Mensagens: 672

MensagemEnviada: Ter Jan 20, 2009 4:57 pm    Assunto: chamando form de cadastro corretamente Responder com Citação

ola! caros colegas delphianos, tenho uma duvida.

eu uso um datamodule so pra consultas onde as tabelas estão parametrizadas e outro so pra tabelas, certo? to num forma de consultas por exemplo ai faço a consulta normalmente e quando clica pra levar os dados selecionados pro form de cadastro to usando o comando abaixo e acho que as vezes fica lento pra chamar o form gostaria de saber se tem alguma maneira mais pratica e rapida ( detalhe uso o locate )

dm.cdspedcab.open;
dm.cdspedcab.Edit;
dm.cdspeditem.open;
dm.cdspeditem.Edit;
dm.cdspedcab.Locate('ped_num',dmsearch.cdssearchpedcab.fieldbyname('ped_num').AsInteger,[locaseinsensitive]);
frmcadped.dbcodcli.text := dm.cdstrab.fieldbyname('cli_codigo').asstring;
frmcadped.dbcli.text := dm.cdstrab.fieldbyname('cli_nome_rs').asstring;
if dm.cdspedcab.fieldbyname('emp_codigo').asstring = '' then
frmcadped.edtempresa.text := ''
else
frmcadped.edtempresa.text := dm.cdstrab.fieldbyname('emp_codigo').asstring;
frmcadped.Show;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
temuchin
Profissional
Profissional


Registrado: Segunda-Feira, 12 de Dezembro de 2005
Mensagens: 584
Localização: Marte

MensagemEnviada: Ter Jan 20, 2009 5:17 pm    Assunto: Responder com Citação

Olá

Se não for muito trabalho, aconselho o uso de query ao invés de table. Dá uma melhorada na performance.

Se me permite um comentário, o trecho de código abaixo não tem muita utilidade:
Código:

if dm.cdspedcab.fieldbyname('emp_codigo').asstring = '' then
   frmcadped.edtempresa.text := ''
else
   frmcadped.edtempresa.text := dm.cdstrab.fieldbyname('emp_codigo').asstring;


Se o campo emp_codigo estiver vazio, não precisa atribuir '' para o edtempresa. Basta fazer assim:
Código:

dm.cdspedcab.open;
dm.cdspedcab.Edit;
dm.cdspeditem.open;
dm.cdspeditem.Edit;
dm.cdspedcab.Locate('ped_num',dmsearch.cdssearchpedcab.fieldbyname('ped_num').AsInteger,[locaseinsensitive]);
frmcadped.dbcodcli.text := dm.cdstrab.fieldbyname('cli_codigo').asstring;
frmcadped.dbcli.text := dm.cdstrab.fieldbyname('cli_nome_rs').asstring;
frmcadped.edtempresa.text := dm.cdstrab.fieldbyname('emp_codigo').asstring;
frmcadped.Show;


O edit assume a falta de conteúdo do campo...

Espero ter ajudado

Abraço
_________________
A santidade dos pobres é invenção dos ricos

if ( topico.resolvido = true ) then begin
    titulo.caption := topico.titulo + ' [RESOLVIDO] ';
end;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
gbt
Profissional
Profissional


Registrado: Quarta-Feira, 17 de Janeiro de 2007
Mensagens: 672

MensagemEnviada: Ter Jan 20, 2009 8:43 pm    Assunto: Responder com Citação

e vc acha adequado mesmo usar o locate, não tem outa forma que seja mais eficiente em termos de performace? essa é a correta mesmo?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Ter Jan 20, 2009 9:56 pm    Assunto: Responder com Citação

gbt escreveu:
e vc acha adequado mesmo usar o locate, não tem outa forma que seja mais eficiente em termos de performace? essa é a correta mesmo?
É que o método Locate, é método de busca sequencial e Forward only (somente pra frente), ou seja, ele faz uma varredura de registro por registro até achar a condição que combine com o registro. Isso é gera uma queda grande na performace da busca. Faça como o colega temuchin, comentou, use query e faz um select no lugar do locate.

Tem varios post aqui no forum mostrando como usar o select no aplicativo.

Veja ai, qualquer coisa post novamente.
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
gbt
Profissional
Profissional


Registrado: Quarta-Feira, 17 de Janeiro de 2007
Mensagens: 672

MensagemEnviada: Ter Jan 20, 2009 10:15 pm    Assunto: Responder com Citação

enendi, mais voce pode me especificar praticamente como a minha linha de comando ficaria por exemplo? uma vez que ja trouxe somente esse registro até pq ta vindo de uma tabela parametrizada a pesquisa.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Ter Jan 20, 2009 10:42 pm    Assunto: Responder com Citação

gbt escreveu:
enendi, mais voce pode me especificar praticamente como a minha linha de comando ficaria por exemplo? uma vez que ja trouxe somente esse registro até pq ta vindo de uma tabela parametrizada a pesquisa.
O select seria algo + ou - assim:
Código:

with dm.cdstrab do
begin
  close;
  sql.clear;
  sql.text := ' select * from tabela where campo = :busca ';
  parambyname('busca').asInteger := suavariavel;
  open;
   if not isempty then
    begin
      {alimenta o outro form com os dados do banco}
       frmcadped.dbcodcli.text := fieldbyname('cli_codigo').asstring;
       frmcadped.dbcli.text := fieldbyname('cli_nome_rs').asstring;
       frmcadped.edtempresa.text := fieldbyname('emp_codigo').asstring;
       frmcadped.Show;
    end else
    begin
      MessageDLG('Código não localizado', mtWarning, [mbOk], 0);
      Exit;     
    end;
end;

Não testei, fiz meio a zoio, se der algum erro post novamente.
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
gbt
Profissional
Profissional


Registrado: Quarta-Feira, 17 de Janeiro de 2007
Mensagens: 672

MensagemEnviada: Ter Jan 20, 2009 10:58 pm    Assunto: Responder com Citação

desculpe nao compreendi direito o meu comando todo ta assim: lembrando que ja fiz a pesquisa e ta mostrando no form de consulta ( gri1 a tabela pedcab, grid2 a tabela peditem e num edit o nome do cliente ) como ficaria do jeito que vc ta falando que e melhor fazer:

dm.cdstrab.Active:=false;
dm.sdstrab.CommandText:='select p.*, c.* from pedcab p inner join cliente c'+
' on p.cli_codigo = c.cli_codigo'+
' inner join vendedor v'+
' on p.ven_codigo = v.ven_codigo'+
' WHERE p.PED_NUM='+edtconsultar.text;
dm.cdstrab.Active:=true;
Application.CreateForm(Tfrmcadped,frmcadped);
dm.cdspedcab.open;
dm.cdspedcab.Edit;
dm.cdspeditem.open;
dm.cdspeditem.Edit;
dm.cdspedcab.Locate('ped_num',dmsearch.cdssearchpedcab.fieldbyname('ped_num').AsInteger,[locaseinsensitive]);
frmcadped.dbcodcli.text := dm.cdstrab.fieldbyname('cli_codigo').asstring;
frmcadped.dbcli.text := dm.cdstrab.fieldbyname('cli_nome_rs').asstring;
if dm.cdspedcab.fieldbyname('emp_codigo').asstring = '' then
frmcadped.edtempresa.text := ''
else
frmcadped.edtempresa.text := dm.cdstrab.fieldbyname('emp_codigo').asstring;
if dm.cdspedcab.fieldbyname('gre_codigo').asstring = '' then
frmcadped.edttipoequip.text := ''
else
frmcadped.edttipoequip.text := dm.cdstrab.fieldbyname('gre_codigo').asstring;
if dm.cdspedcab.fieldbyname('ei_codigo').asstring = '' then
frmcadped.edtei.text := ''
else
frmcadped.edtei.text := dm.cdspedcab.fieldbyname('ei_codigo').asstring;
if dm.cdspedcab.fieldbyname('gd_codigo').asstring = '' then
frmcadped.edtgd.text := ''
else
frmcadped.edtgd.text := dm.cdspedcab.fieldbyname('gd_codigo').asstring;
frmcadped.edtvendedor.text := dm.cdspedcab.fieldbyname('ven_codigo').asstring;
frmcadped.Edtdatav.text := dm.cdspedcab.fieldbyname('ped_datavenda').asstring;
frmcadped.Edtprevinsta.text := dm.cdspedcab.fieldbyname('ped_dataprevinstal').asstring;
frmcadped.Edtdatainst.text := dm.cdspedcab.fieldbyname('ped_datainstal').asstring;
frmcadped.Edtvalor.text := dm.cdspedcab.fieldbyname('ped_total').asstring;
if dm.cdspedcab.fieldbyname('ped_obra').asstring = 'N' then
frmcadped.cbxobra.ItemIndex := 1
else
frmcadped.cbxobra.ItemIndex := 0;
if dm.cdspedcab.fieldbyname('ped_req').asstring = 'N' then
frmcadped.cbxreqprod.ItemIndex := 1
else
frmcadped.cbxreqprod.ItemIndex := 0;
frmcadped.Show;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
gbt
Profissional
Profissional


Registrado: Quarta-Feira, 17 de Janeiro de 2007
Mensagens: 672

MensagemEnviada: Qua Jan 21, 2009 1:32 pm    Assunto: Responder com Citação

Adriano desculpa te incomodar, é que nunca fiz dessa forma se enviar a linha de comando toda, vc adptaria pra mim da maneira que acha correta pra eu entender direito:


dm.cdstrab.Active:=false;
dm.sdstrab.CommandText:='select p.*, c.* from pedcab p inner join cliente c'+
' on p.cli_codigo = c.cli_codigo'+
' inner join vendedor v'+
' on p.ven_codigo = v.ven_codigo'+
' WHERE p.PED_NUM='+edtconsultar.text;
dm.cdstrab.Active:=true;
Application.CreateForm(Tfrmcadped,frmcadped);
dm.cdspedcab.open;
dm.cdspedcab.Edit;
dm.cdspeditem.open;
dm.cdspeditem.Edit;
dm.cdspedcab.Locate('ped_num',dmsearch.cdssearchpedcab.fieldbyname('ped_num').AsInteger,[locaseinsensitive]);
frmcadped.dbcodcli.text := dm.cdstrab.fieldbyname('cli_codigo').asstring;
frmcadped.dbcli.text := dm.cdstrab.fieldbyname('cli_nome_rs').asstring;
if dm.cdspedcab.fieldbyname('emp_codigo').asstring = '' then
frmcadped.edtempresa.text := ''
else
frmcadped.edtempresa.text := dm.cdstrab.fieldbyname('emp_codigo').asstring;
if dm.cdspedcab.fieldbyname('gre_codigo').asstring = '' then
frmcadped.edttipoequip.text := ''
else
frmcadped.edttipoequip.text := dm.cdstrab.fieldbyname('gre_codigo').asstring;
if dm.cdspedcab.fieldbyname('ei_codigo').asstring = '' then
frmcadped.edtei.text := ''
else
frmcadped.edtei.text := dm.cdspedcab.fieldbyname('ei_codigo').asstring;
if dm.cdspedcab.fieldbyname('gd_codigo').asstring = '' then
frmcadped.edtgd.text := ''
else
frmcadped.edtgd.text := dm.cdspedcab.fieldbyname('gd_codigo').asstring;
frmcadped.edtvendedor.text := dm.cdspedcab.fieldbyname('ven_codigo').asstring;
frmcadped.Edtdatav.text := dm.cdspedcab.fieldbyname('ped_datavenda').asstring;
frmcadped.Edtprevinsta.text := dm.cdspedcab.fieldbyname('ped_dataprevinstal').asstring;
frmcadped.Edtdatainst.text := dm.cdspedcab.fieldbyname('ped_datainstal').asstring;
frmcadped.Edtvalor.text := dm.cdspedcab.fieldbyname('ped_total').asstring;
if dm.cdspedcab.fieldbyname('ped_obra').asstring = 'N' then
frmcadped.cbxobra.ItemIndex := 1
else
frmcadped.cbxobra.ItemIndex := 0;
if dm.cdspedcab.fieldbyname('ped_req').asstring = 'N' then
frmcadped.cbxreqprod.ItemIndex := 1
else
frmcadped.cbxreqprod.ItemIndex := 0;
frmcadped.Show;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Qua Jan 21, 2009 8:57 pm    Assunto: Responder com Citação

O problema é que não consegui entender o que vc esta tentando fazer ao criar este form aqui, e logo em seguida usar o locate.
Código:
Application.CreateForm(Tfrmcadped,frmcadped);
dm.cdspedcab.open;
dm.cdspedcab.Edit;
dm.cdspeditem.open;
dm.cdspeditem.Edit;
dm.cdspedcab.Locate('ped_num',dmsearch.cdssearchpedcab.fieldbyname('ped_num').AsInteger,[locaseinsensitive]);


Primeiro vc faz um select de algumas tabelas, e depois o locate vc quer chamar o que?

Não entendi.
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
gbt
Profissional
Profissional


Registrado: Quarta-Feira, 17 de Janeiro de 2007
Mensagens: 672

MensagemEnviada: Qua Jan 21, 2009 10:39 pm    Assunto: Responder com Citação

é pra chamar o form de cadastro e levar os dados feitos na consulta parametrizada pra la, entendeu?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Qua Jan 21, 2009 10:53 pm    Assunto: Responder com Citação

gbt escreveu:
é pra chamar o form de cadastro e levar os dados feitos na consulta parametrizada pra la, entendeu?
Então é + ou - como disse, faz o select e use o IsEmpty para trazer os dados
Código:
with dm.cdstrab do
begin
  {Aqui vc faz o teu select}
  close;
  sql.clear;
  sql.text := ' select * from tabela where campo = :busca ';
  parambyname('busca').asInteger := suavariavel;
  open;
   if not isempty then
   begin
      {alimenta o outro form com os dados do banco}
       Application.CreateForm(Tfrmcadped,frmcadped);
       try     
         frmcadped.dbcodcli.text := fieldbyname('cli_codigo').asstring;
         frmcadped.dbcli.text := fieldbyname('cli_nome_rs').asstring;
         frmcadped.edtempresa.text := fieldbyname('emp_codigo').asstring;
         frmcadped.ShowModal;
       finally
          frmcadped.Release;
          FreeAndNil(frmcadped);
   end;   
end;


Só fiz + ou - sem nenhum teste, apenas mostrando como eu faria aqui neste caso.

Apesar de que, a maneira mais facil pra mim é usar DBEdit, chamar a form aonde busco os dados no uses deste form frmcadped, e usar o mesmo datasource que esta linkado no query que faz a pesquisa.

Que no caso ai, o datasource ligado ao teu dataset que vc fez este select
Código:
dm.cdstrab.Active:=false;
dm.sdstrab.CommandText:='select p.*, c.* from pedcab p inner join cliente c'+
' on p.cli_codigo = c.cli_codigo'+
' inner join vendedor v'+
' on p.ven_codigo = v.ven_codigo'+
' WHERE p.PED_NUM='+edtconsultar.text;
dm.cdstrab.Active:=true;

_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
gilsonnrodrigues
Moderador
Moderador


Registrado: Quinta-Feira, 14 de Abril de 2005
Mensagens: 9009
Localização: Governador Valadares-MG

MensagemEnviada: Qui Jan 22, 2009 9:47 am    Assunto: Responder com Citação

não é o problema, mas...
Código:

tabela.Edit;
tabela.Locate(..


não tem sentido algum!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
gbt
Profissional
Profissional


Registrado: Quarta-Feira, 17 de Janeiro de 2007
Mensagens: 672

MensagemEnviada: Qui Jan 22, 2009 2:18 pm    Assunto: Responder com Citação

é o seguinte: eu tenho um form de consultas de pedidos, nele eu uso as tabelas pedcab e peditem que inclusive estão num datamodule com parametros ( no campo ped_num ) , ok? ai eu faço a consulta que é mostrada em 2 grids , um mostra a tabela pedcab e o outro mostra a peditem. o que eu preciso é que quando clico no botão alterar, leve todos os dados pro form de cadastro onde eu possa alterar algo, ok? so que no form de cadastro eu uso as tabelas que vem de outro datamodule que não é o mesmo de consultas, gostaria de saber como voce faria essa linha de comando enorme e pouco eficiente que to usandno com o locate.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
gbt
Profissional
Profissional


Registrado: Quarta-Feira, 17 de Janeiro de 2007
Mensagens: 672

MensagemEnviada: Qui Jan 22, 2009 11:05 pm    Assunto: Responder com Citação

adriano eu fiz como segue abaixo, pode me dizer oque ta errado? pq atualiza os dados da tabela pedcab mais o da tabela peditem nao sao atualizados, traz sempre os mesmos pra qualquer consulta:

with dmsearch.cdssearch do
begin
{Aqui vc faz o teu select}
dmsearch.cdssearch.Active:=false;
dmsearch.sdssearch.CommandText:= 'select p.*,i.*, c.cli_nome_rs from pedcab p inner join peditem i'+
' on p.ped_num = i.ped_num'+
' inner join cliente c'+
' on p.cli_codigo = c.cli_codigo'+
' inner join vendedor v'+
' on p.ven_codigo = v.ven_codigo'+
' WHERE P.PED_NUM ='+quotedstr(edtconsultar.text)+
' order by p.ped_num';
dmsearch.cdssearch.Active:=true;
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('select * from pedcab where ped_num = :ped_num ');
Query1.ParamByName('ped_num').asInteger := StrToInt(edtconsultar.text);
Query1.Open;
if not isempty then
begin
{alimenta o outro form com os dados do banco}
Application.CreateForm(Tfrmcadped,frmcadped);
dm.cdspedcab.open;
dm.cdspedcab.Edit;
dm.cdspeditem.open;
dm.cdspeditem.Edit;
try
frmcadped.dbcodcli.text := fieldbyname('cli_codigo').asstring;
frmcadped.dbcli.text := fieldbyname('cli_nome_rs').asstring;
frmcadped.edtempresa.text := fieldbyname('emp_codigo').asstring;
frmcadped.ShowModal;
finally
frmcadped.Release;
FreeAndNil(frmcadped);
end;
end;
end;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Qui Jan 22, 2009 11:42 pm    Assunto: Responder com Citação

gbt escreveu:
adriano eu fiz como segue abaixo, pode me dizer oque ta errado? pq atualiza os dados da tabela pedcab mais o da tabela peditem nao sao atualizados, traz sempre os mesmos pra qualquer consulta:

with dmsearch.cdssearch do
begin
{Aqui vc faz o teu select}
dmsearch.cdssearch.Active:=false;
dmsearch.sdssearch.CommandText:= 'select p.*,i.*, c.cli_nome_rs from pedcab p inner join peditem i'+
' on p.ped_num = i.ped_num'+
' inner join cliente c'+
' on p.cli_codigo = c.cli_codigo'+
' inner join vendedor v'+
' on p.ven_codigo = v.ven_codigo'+
' WHERE P.PED_NUM ='+quotedstr(edtconsultar.text)+
' order by p.ped_num';
dmsearch.cdssearch.Active:=true;
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('select * from pedcab where ped_num = :ped_num ');
Query1.ParamByName('ped_num').asInteger := StrToInt(edtconsultar.text);
Query1.Open;
if not isempty then
begin
{alimenta o outro form com os dados do banco}
Application.CreateForm(Tfrmcadped,frmcadped);
dm.cdspedcab.open;
dm.cdspedcab.Edit;
dm.cdspeditem.open;
dm.cdspeditem.Edit;
try
frmcadped.dbcodcli.text := fieldbyname('cli_codigo').asstring;
frmcadped.dbcli.text := fieldbyname('cli_nome_rs').asstring;
frmcadped.edtempresa.text := fieldbyname('emp_codigo').asstring;
frmcadped.ShowModal;
finally
frmcadped.Release;
FreeAndNil(frmcadped);
end;
end;
end;
Pq se for duas tabelas vc tem que fazer um JOIN das tabelas, como vc fez na primeira SQL que vc colocou ai.

Ta tudo meio confuso o que vc esta fazendo, primeiro vc chama o select num ClientDataSet depois troca para um Query, eu não estou entendendo, o que vc seleciona no primeiro select do ClientDataSet não é o mesmo que vc esta fazendo no Query?
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
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
Ir à página 1, 2  Próximo
Página 1 de 2

 
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