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

Consulta SQL retornando nome de cliente constante


EDUCTD

Pergunta

Olá galera, tenho um relatório que deve ser impresso o nomes dos clientes por OC (ordem de coleta), uma oc pode ter um cliente ou vários clientes. Tenho uma instrução em sql que traz os nomes do cliente mas em vez de mudar o nome do cliente a cada código impresso está vindo o mesmo nome, segue abaixo a instrução SQL:

IBQuery_MOTORISTA.Close;
 IBQuery_MOTORISTA.SQL.Clear;
 IBQuery_MOTORISTA.SQL.Add('select MOTORISTA_NOME from MOTORISTA M,ORDEM_COLETA O where O.PLACA = M.MOTORISTA_PLACA and OC_NUMERO = :oC');
 IBQuery_MOTORISTA.ParamByName('OC').AsInteger:=StrToInt(Edit_OC.Text);
 IBQuery_MOTORISTA.Open;

Estou no aguardo de uma ajuda da comunidade e agradeço desde já.

Sem mais

EDUCTD.

Editado por Jonathan Queiroz
Remover caixa alta do título e conteúdo conforme regra 3.7 e adicionar tag's (Jonathan)
Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0
Se a sua IBQuery consegue listar os nomes dos motoristas, então o problema está somente na saída do relatório

se estiver usando o quick report, veja se voce especificou a propriedade DataSet

abraço

Jhonas sua dica foi de grande valia o relatório está mostrando os nomes, mas tem um porem, ele não imprime os nomes diferentes de acordo com o codigo e sim ele imprime o primeiro nome do primeiro codigo que for impresso. Jhonas Você Poderia me ajudar mais uma vez para resolver esse problema ?

fico no aguardo de uma resposta e agradeço des de já pelas dicas.

Link para o comentário
Compartilhar em outros sites

  • 0

EDUCTD, teria como dizer como estão suas tabelas?

No seu select voce só quer MOTORISTA_NOME

só vai sair esse campo.

select MOTORISTA_NOME from MOTORISTA

pelo que vi também, há um relacionamento entre as tabelas e

e o filtro pelo código.

where O.PLACA = M.MOTORISTA_PLACA and OC_NUMERO = C');

Não seria apenas o filtro pelo código?

IBQuery_MOTORISTA.ParamByName('OC').AsInteger:=StrToInt(Edit_OC.Text);

Se tivesse mais informações de suas tabelas poderia te ajudar.

Um abraço.

Editado por Alberto Mota
Link para o comentário
Compartilhar em outros sites

  • 0
EDUCTD, teria como dizer como estão suas tabelas?

No seu select voce só quer MOTORISTA_NOME

só vai sair esse campo.

select MOTORISTA_NOME from MOTORISTA

pelo que vi também, há um relacionamento entre as tabelas e

e o filtro pelo código.

where O.PLACA = M.MOTORISTA_PLACA and OC_NUMERO = C');

Não seria apenas o filtro pelo código?

IBQuery_MOTORISTA.ParamByName('OC').AsInteger:=StrToInt(Edit_OC.Text);

Se tivesse mais informações de suas tabelas poderia te ajudar.

Um abraço.

Olá Alberto a ibquery, são ibqueri Itens_ordem e Clientes. a citada por você acima já resolvi estou com problema nestas duas que segue explicação abaixo.

vou te explicar como são minhas tabelas:

tenho 2 tabelas que são mais usadas uma é a de clientes(codigo cliente, nome cliente) e a outra e de Itens_ordens(OC,codigo do cliente,quantidade,rota, UF,data_oc). quando vou iprimir no quick report eu faço a seleção dos dados pela OC ex: quero imprimir a Ordem de Coleta Número 50, a query tem que me trazer todos os dados da tabela itens_ordem que se refere a Ordem de Coleta 50. Lá no quick report estão os seguintes campos:(OC,Codigo do cliente,"nome do cliente"onde a query vai buscar o nome pelo código do cliente,quantidade,rota,uf). a query tem que trazer um um nome de acordo com o código impresso se tiver 5 códigos diferentes ela tem que traze todos os 5 nomes diferentes. Mas não tá ocorrendo isso, ela só traz o primeiro nome do primeiro codigo que ela fez a pesquisa.

fico no aguardo Alberto, aguardando sua ajuda, são pessoas como você que nos ajudam nessas horas e mantem a comunidade unida...

Editado por EDUCTD
Link para o comentário
Compartilhar em outros sites

  • 0

É um prazer colaborar, uma vez que muitas vezes me ajudaram aqui no Forum.

Procure sempre colocar seus campos sem espaço.

Exemplo: IDCliente, CodCliente, CodCli, NomeCli

Acredito que sua sql deve ser montada conforme abaixo:

IBQuery_MOTORISTA.SQL.Add('select codigocliente.Itens_ordens, nomecliente.clientes, codigocliente.clientes, oc.Itens_ordens, uf.Itens_ordens, quantidade.Itens_ordens, rota.Itens_ordens, UF.Itens_ordens, data_oc.Itens_ordens from clientes, Itens_ordens where codigocliente.Itens_ordens = CodigoCliente.Clientes and oc.Itens_ordens =: OC');

IBQuery_MOTORISTA.ParamByName('OC').AsInteger:=StrToInt(Edit_OC.Text);

Um abraço.

Editado por Alberto Mota
Link para o comentário
Compartilhar em outros sites

  • 0
É um prazer colaborar, uma vez que muitas vezes me ajudaram aqui no Forum.

Procure sempre colocar seus campos sem espaço.

Exemplo: IDCliente, CodCliente, CodCli, NomeCli

Acredito que sua sql deve ser montada conforme abaixo:

IBQuery_MOTORISTA.SQL.Add('select codigocliente.Itens_ordens, nomecliente.clientes, codigocliente.clientes, oc.Itens_ordens, uf.Itens_ordens, quantidade.Itens_ordens, rota.Itens_ordens, UF.Itens_ordens, data_oc.Itens_ordens from clientes, Itens_ordens where codigocliente.Itens_ordens = CodigoCliente.Clientes and oc.Itens_ordens =: OC');

IBQuery_MOTORISTA.ParamByName('OC').AsInteger:=StrToInt(Edit_OC.Text);

Um abraço.

Alberto as tabelas são Itens_ordem e Clientes. Desas duas Tabelas estão os dados para eu poder imprimir uma ordem de coleta

da tabela de clientes só preciso do nome do cliente a cada código impresso, as outras informações tenho na tabela itens de Pedidos

segue abaixo instrução sql para obter as informações que estão saindo erroniamente (no caso só o nome do cliente).

IBQuery_ITENS.Close;

IBQuery_ITENS.SQL.Clear;

IBQuery_ITENS.SQL.Add('SELECT OC_NUMERO,CODIGO_CLIENTE,PEDIDO,QUANTIDADE,ROTA,UF,DATA_PEDIDO from ITENS_ORDEM where OC_NUMERO = :oC');

IBQuery_ITENS.ParamByName('OC').asinteger:=strtoint(edit_oc.text);

IBQuery_ITENS.Open;

IBQuery_CLIENTES.Close;

IBQuery_CLIENTES.SQL.Clear;

IBQuery_CLIENTES.SQL.Add('select CLIENTE_NOME from CLIENTES C,ITENS_ORDEM I where C.CLIENTE_CODIGO = I.CODIGO_CLIENTE and OC_NUMERO = :oC');

IBQuery_CLIENTES.ParamByName('OC').AsInteger:=StrToInt(Edit_OC.Text);

IBQuery_CLIENTES.Open;

não imprime o nome do cliente conforme vai sendo impresso os códigos.

Alberto fico no aguardo de um aresposta. sem mais Eductd

Link para o comentário
Compartilhar em outros sites

  • 0

EDUCTD,

Coloque no quickreport, no daset o IBQuery_ITENS.

Voce colocou o campo CLIENTE_NOME na seção detail, mas ele vem de:

IBQuery_CLIENTES.Close;

IBQuery_CLIENTES.SQL.Clear;

IBQuery_CLIENTES.SQL.Add('select CLIENTE_NOME from CLIENTES C,ITENS_ORDEM I where C.CLIENTE_CODIGO = I.CODIGO_CLIENTE and OC_NUMERO = :oC');

IBQuery_CLIENTES.ParamByName('OC').AsInteger:=StrToInt(Edit_OC.Text);

IBQuery_CLIENTES.Open;

Por isso só pega 1

Veja o exemplo abaixo, no sql voce precisa juntar as 2 tabelas e o campo CLIENTE_NOME precisa estar nela.

IBQuery_ITENS.SQL.Add('SELECT codigocliente.Itens_ordens, CLIENTE_NOME.clientes, codigocliente.clientes, oc.Itens_ordens, uf.Itens_ordens, quantidade.Itens_ordens, rota.Itens_ordens, UF.Itens_ordens, data_oc.Itens_ordens from clientes, Itens_ordens where codigocliente.Itens_ordens = CodigoCliente.Clientes and oc.Itens_ordens =: OC');

IBQuery_ITENS.ParamByName('OC').AsInteger:=StrToInt(Edit_OC.Text);

Acredito ser a solução do seu problema.

Editado por Alberto Mota
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,1k
    • Posts
      651,7k
×
×
  • Criar Novo...