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

Select com mais de uma tabela lento


Guest --Bill --

Pergunta

Guest --Bill --

Boa noite, eu estou fazendo uma exportação de alguns dados de um banco de dados access para txt, trata-se de exportar dados de notas fiscais, então eu tenho que trabalhar com mais de uma tabela, coloco a nota em uma linha do txt, e nas linhas seguintes eu tenho que colocar os produtos referentes à esta nota, aí, quando acaba os produtos desta, passo para a próxima nota e seu produtos.

Então, se eu vou fazer a pesquisa pegando somente as notas, vai rapidinho, agora se eu coloco o select para fazer a busca dos produtos da nota, fica mito lento o processo. O select está composto assim:

Eu pego a primeira nota, numero, valor, etc, aí eu jogo o número da nota em uma variável, e então faço o select dos produtos da nota, utilizando como parametro o numero que foi enviado para a variável, e assim, sucessivamente.

Eu não entendo porque fica tão lento, eu já realizei este processo como Mysql e o ZEOS, e foi rapidinho.

Neste caso estou utilizando os componentes da paleta ADO para realizar este processo

Banco de dados Access

Delphi 7

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Cara, escreve o Código SQL que você estar usando. pelo o que eu entendir seria mais ou menos assim:

var
Notafiscal,produto:string;
begin
NotaFiscal:= ...
Produto:=...

with queryado do
begin
close;
sql.clear;
sql.add("Select * from tabela");
sql.add("where NumeroNF = :A and CodProduto = :B ");
Parameters[0].value := NotaFiscal; //Numero da nota fiscal declarado na variavel acima. 
Parameters[1].value := Produto; // Codigo do Produto a ser consultado.
Open;
end;

Ver se isso ajuda.

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Bill --

Bom, eu vou colocar a estrutura do código:

var
Numnota : string;
...

procedure TForm1.BuscaNotas;
begin
Query_Notas.Active:=False;
Query_Notas.SQL.Clear;
Query_Notas.SQL.Add('Select c.idcliente, c.cpfcliente, c.rgcliente n.numnota, n.idcliente, n.data_Pedido ');
Query_Notas.SQL.Add('From tabclientes c, notas n where(c.idcliente=n.idcliente)');
Query_Notas.Active:=True;
end;

procedure TForm1.BuscaItens;
begin
Query_Itens.Active:= False;
Query_Itens.SQL.Clear;
Query_Itens.SQL.Add('Select i.numnota, i.idproduto, i.quantidade, p.idproduto,  p.valor');
Query_Itens.SQL.Add(' From itens_nota i, produtos p where(i.idproduto=p.idproduto)and(numnota=:a)');
Query_Itens.Parameters.ParamByName('a').Value:=NumNota;
Query_Itens.Active:=True;
Query_Itens.First;
end;

procedure TForm1.Escreve_Notas;
var
nota : TextFile;
begin
AssignFile(lista,'C:\Notas'+FormatDateTime('ddmmyyyy',Date)+'.txt');
BuscaNotas();
Rewrite(nota);
while not(Query_Notas.Eof)do
  begin
  Write(nota,'"1"' + ',');
  Write(nota,'"1"' + ',');
  Write(nota,'"'+Query_Notas.Fields[3].AsString+'"' + ',');

  NumNota:=Query_Notas.Fields[3].AsString;   //  <---------Aqui a variável recebe o número da nota
...
...
  Writeln(nota,'');
//---------------------Produtos da Nota
  if(CheckBox1.Checked=True)then
  begin
BuscaItens();
    if(Query_Itens.RecordCount>0)then
    begin
      while not(Query_Itens.Eof)do
      begin
      Write(nota,'"'+'3'+'"'+',');
      Write(nota,'"'+Query_Itens.Fields[1].AsString+'"'+',');                                        
      Write(nota,'"'+Query_Itens.Fields[2].AsString+'"'+','); 
...
...

mais ou menos isso, aí, se o CheckBox estiver desmarcado e não for necessário realizar a procedure BuscaItens, ele vai rapidinho, mas tem vezes que tem ue incluir os produtos juntamente com a nota, fica lento, independente do número de ítens que saem no select;

E a estrutura é assim mesmo, termina de gerar a nota 1, logo embaixo gera os produtos da nota 1, aí inicia o lançamento da nota dois, e os produtos dela, e assim por diante.

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,3k
    • Posts
      652,4k
×
×
  • Criar Novo...