| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
gbt Profissional

Registrado: Quarta-Feira, 17 de Janeiro de 2007 Mensagens: 672
|
Enviada: Ter Jan 20, 2009 4:57 pm Assunto: chamando form de cadastro corretamente |
|
|
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 |
|
 |
temuchin Profissional


Registrado: Segunda-Feira, 12 de Dezembro de 2005 Mensagens: 584 Localização: Marte
|
Enviada: Ter Jan 20, 2009 5:17 pm Assunto: |
|
|
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 |
|
 |
gbt Profissional

Registrado: Quarta-Feira, 17 de Janeiro de 2007 Mensagens: 672
|
Enviada: Ter Jan 20, 2009 8:43 pm Assunto: |
|
|
| 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 |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Ter Jan 20, 2009 9:56 pm Assunto: |
|
|
| 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 |
|
 |
gbt Profissional

Registrado: Quarta-Feira, 17 de Janeiro de 2007 Mensagens: 672
|
Enviada: Ter Jan 20, 2009 10:15 pm Assunto: |
|
|
| 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 |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Ter Jan 20, 2009 10:42 pm Assunto: |
|
|
| 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 |
|
 |
gbt Profissional

Registrado: Quarta-Feira, 17 de Janeiro de 2007 Mensagens: 672
|
Enviada: Ter Jan 20, 2009 10:58 pm Assunto: |
|
|
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 |
|
 |
gbt Profissional

Registrado: Quarta-Feira, 17 de Janeiro de 2007 Mensagens: 672
|
Enviada: Qua Jan 21, 2009 1:32 pm Assunto: |
|
|
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 |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Qua Jan 21, 2009 8:57 pm Assunto: |
|
|
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 |
|
 |
gbt Profissional

Registrado: Quarta-Feira, 17 de Janeiro de 2007 Mensagens: 672
|
Enviada: Qua Jan 21, 2009 10:39 pm Assunto: |
|
|
| é pra chamar o form de cadastro e levar os dados feitos na consulta parametrizada pra la, entendeu? |
|
| Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Qua Jan 21, 2009 10:53 pm Assunto: |
|
|
| 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 |
|
 |
gilsonnrodrigues Moderador

Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Qui Jan 22, 2009 9:47 am Assunto: |
|
|
não é o problema, mas...
| Código: |
tabela.Edit;
tabela.Locate(.. |
não tem sentido algum! |
|
| Voltar ao Topo |
|
 |
gbt Profissional

Registrado: Quarta-Feira, 17 de Janeiro de 2007 Mensagens: 672
|
Enviada: Qui Jan 22, 2009 2:18 pm Assunto: |
|
|
| é 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 |
|
 |
gbt Profissional

Registrado: Quarta-Feira, 17 de Janeiro de 2007 Mensagens: 672
|
Enviada: Qui Jan 22, 2009 11:05 pm Assunto: |
|
|
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 |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Qui Jan 22, 2009 11:42 pm Assunto: |
|
|
| 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 |
|
 |
|