Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

vbnet

exibindo consulta sql vb 6

Recommended Posts

ola boa tarde sou alexandre desenvolvedor em vb 6 ,esotu com seguinte problema tenho 2 tabelas em um banco dados access tabela pedidodevenda e pessoas utilizo a sql em vb

QSQL = "SELECT P.NumDoc AS [Nº DOC], iif(pe.pessoa_fisica,nome,razao_social) as PESSOA, iif(pe.pessoa_fisica,nome,razao_social) as VENDEDOR, P.Data AS DATA," 
QSQL = QSQL & " Format$(p.totalpedido,'###,##0.00') as TOTALPEDIDO, IIF(P.PENDENTE=0,'FECHADO','PENDENTE') AS SITUAÇÃO, P.Chave" 
'QSQL = QSQL & " FROM PEDIDOSDEVENDA AS P INNER JOIN Pessoas pe ON P.ChavePessoa = Pe.Chave .
preciso listar a pessoa e o vendedor nesses campos sao gravados numero da chave da pessoa ou vendedor mas somente aparece os campos se forem iguais .

ex: se chavepessoa=chave da tabela pessoa ok

se chavepessoa<>chavevendedor o campo chavepessoa e chavevendedor ficam iguais mesmo que seja diferente o numero da chave

 

gostaria de listar o vendedor e a pessoa do pedido

ex cod 1 pessoa alex vendedor carlos valor 15,00

 

preciso de ajuda uma solução sql vb

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá vbnet, primeiramente, seja bem vindo ao fórum.

Caso ainda não tenha lido nossas regras e o queira fazer, aqui estão.

 

Cara, para ser sincero, não consegui entender o que precisa não.

 

Mas para ajudar, poste a estrutura de suas tabelas (nomes das colunas) e os dados que precisa pegar exatamente.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara boa tarde ,é a primeira vez que participo de uma foro achei bacana o imasters é o seguinte tenho um banco dados access ok neste banco existem diversas tabelas o que acontece hoje tenho 2 tabelas.

"pedido de venda" com os campos chave-num doc-chavepessoa-chavevendedor-valor-status e a tabelas "pessoas" com os campos chave-nome-razao social-tipopessoa-telefone- entre outros campos hoje o que acontece eu uso a instrusao

sql -

 

QSQL = "SELECT P.NumDoc AS [Nº DOC], iif(pe.pessoa_fisica,nome,razao_social) as PESSOA, iif(pe.pessoa_fisica,nome,razao_social) as VENDEDOR, P.Data AS DATA,"

QSQL = QSQL & " Format$(p.totalpedido,'###,##0.00') as TOTALPEDIDO, IIF(P.PENDENTE=0,'FECHADO','PENDENTE') AS SITUAÇÃO, P.Chave"

'QSQL = QSQL & " FROM PEDIDOSDEVENDA AS P INNER JOIN Pessoas pe ON P.ChavePessoa

= Pe.Chave" e me mostra em um flexgrid tudo certinho.

ex [Nº DOC]-pessoa-vendedor-data-status-totalpedido-situação quando os campos chavepessoa=chavevendedor ex =chavepessoa da tabela pedidos de venda = chave da tabela pessoas so que tem situações em, que a chavepessoa ´diferente da chavevendedor isso não consigo passar no sql .

 

ex realizei um pedido de venda onde a chavepessoa é = 1 nome alex e a chavevendedor é = 2 nome carlos entao a pessoa e o vendedor do pedido são diferentes

 

se eu usar o sql assim :

 

QSQL = "SELECT P.NumDoc AS [Nº DOC], iif(pe.pessoa_fisica,nome,razao_social) as PESSOA, iif(pe.pessoa_fisica,nome,razao_social) as VENDEDOR, P.Data AS DATA,"

QSQL = QSQL & " Format$(p.totalpedido,'###,##0.00') as TOTALPEDIDO, IIF(P.PENDENTE=0,'FECHADO','PENDENTE') AS SITUAÇÃO, P.Chave"

'QSQL = QSQL & " FROM PEDIDOSDEVENDA AS P INNER JOIN Pessoas pe ON P.ChavePessoa

= Pe.Chave and P.Chavevendedor

= Pe.Chave " os campos pessoa e vendedor sao mostrados iguais como ex:sitado

 

pessoa é alex e o vendedor é o alex tambem ;

 

gostaria que mostrasse os campos pessoa e vendedor como esta gravado

 

ex:pedido :

 

numodc - pessoa - vendedor - data - status -

01 alex carlos 01/09 pendente

02 katia alex 01/09 fechado

 

ja tentei de tudo com inner join e left join e right join

ou outer left join e sempre mesma coisa

obragado;

Compartilhar este post


Link para o post
Compartilhar em outros sites

A pessoa é o que? O cliente?

 

Você está usando sua lógica de forma errada. Da forma como montou sua query, somente irá pegar os dados quando foram iguais mesmo por causa disso:

ON P.ChavePessoa = Pe.Chave and P.Chavevendedor
Você está dizendo que quer os dados somente quando chavepessoa for igual a chavevendedor.

 

Se não quer isso, precisa retirar essa condição.

Eu aconselho que você tenha uma tabela de pedidos, e nessa tabela você armazena o código da pessoa, o código do vendedor e tenha uma outra tabela com os dados do pedido e armazene o código dessa também na tabela pedidos.

 

Da forma como está, você não tem uma identificação da pessoa que fez a compra e do vendedor que vendeu.

Não pode selecionar pelas chaves iguais um do outro, pois não tem nada a ver um com outro.

Mas por outro lado, se não colocar uma condição de busca, irá retornar sua tabela toda, e isso também não é bom.

 

Caso fique ainda com alguma dúvida, avise que vou te direcionar para modelagem SQL, lá poderão lhe dar dicas melhor de como estruturar suas tabelas.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá claudio neto boa tarde ,ja tenho os pedidos separados em tabelas diferentes a tabela pessoas eu cadastro o cliente pessoa fisica e o vendedor pessoa fisica ambos tem chaves unicas e na tabela pedidosdevenda quando eu realizo um pedido de venda é gravada a chave da pessoa e a chave do vendedor.

ex cadastrei o cliente alexandre chave=5 e o vendedor carlos chave = 6 ok usando o sql seguinte

 

QSQL = "SELECT P.NumDoc AS [Nº DOC], iif(pe.pessoa_fisica,nome,razao_social) as PESSOA, iif(pe.pessoa_fisica,nome,razao_social) as VENDEDOR, P.Data AS DATA," 
QSQL = QSQL & " Format$(p.totalpedido,'###,##0.00') as TOTALPEDIDO, IIF(P.PENDENTE=0,'FECHADO','PENDENTE') AS SITUAÇÃO, P.Chave" 
'QSQL = QSQL & " FROM PEDIDOSDEVENDA AS P INNER JOIN Pessoas pe ON Pe.Chave = P.ChavePessoa  and Pe.Chave = P.Chavevendedor 
beleza chavepessoa é igual a chave da tabela pessoa entao mostra e chavevendedor = chave tasbela pessoa enntão mostra

 

ex: num doc pessoa vendedor data situação

 

01 carlos carlos pendednte

 

mas se a chavepessoa é diferente da chavevendedor ex chavepessoa = 5 e chavevendedor = 6 são mostrados

os campos chavepessoa e chavevendedor iguais ex:

 

ex: num doc pessoa vendedor data situação

 

01 chave=5 chave=6 pendednte , mas aparece na visualização

 

 

ex: num doc pessoa vendedor data situação

 

01 alexandre alexandre pendednte ,deveria de aparecer a pessoa alexandre e o vendedor carlos ok

 

 

ja tentei com left join e right join mas não aparece e as vezes aparece campos em branco se eu usar sinal chavepessoa <> chavevendedor.

 

tentei com where mas não consegui nenhuma solução como eu faria para listar os

dados quando eles forem diferentes

''-----------------------------------------------------minha sub esta abaixo ---------'

Private Sub ListaPedidos()
    Dim rsP As Recordset
    Dim QSQL As String

          On Error GoTo ListaPedidos_Error

 QSQL = "SELECT P.NumDoc AS [Nº DOC], iif(pe.pessoa_fisica,nome,razao_social) as PESSOA,iif(pe.pessoa_fisica,nome,razao_social) as VENDEDOR ,P.Data AS DATA,"
QSQL = QSQL & " Format$(p.totalpedido,'###,##0.00') as TOTALPEDIDO, IIF(P.PENDENTE=0,'FECHADO','PENDENTE') AS SITUAÇÃO, P.Chave"
QSQL = QSQL & " FROM PEDIDOSDEVENDA AS P INNER JOIN Pessoas pe ON P.ChavePessoa = Pe.Chave and P.Chavevendedor = Pe.Chave"
               
                
5             Set rsP = DB.OpenRecordset(QSQL)
6             Set Data1.Recordset = rsP

              'AtualizaRelacao

7             For i = 0 To Ordenar.UBound
8                 flexPedidos.ColWidth(i) = Ordenar(i).width
9             Next
10            flexPedidos.ColWidth(i) = 0
11            Set rsP = Nothing

12           On Error GoTo 0
13           Exit Sub

ListaPedidos_Error:
14            LOG_ERRO Err.Description, Err.Number, Erl, "frmListaPedidos.ListaPedidros"
End Sub
''------------------------------------------------------------------

no iff do sql ele deveria de me mostrar o nome vendedor quando for diferente do nome do cliente que é a pessoa do pedido .

tentei usar o inner dentro de outro mas da erro assim

 

QSQL = QSQL & " FROM PEDIDOSDEVENDA AS P INNER JOIN Pessoas pe ON P.ChavePessoa = Pe.Chave INNER JOIN PESSOAS VE ON p.ChaveVendedor = ve.Chave" preciso realmente de ajuda grato .

Compartilhar este post


Link para o post
Compartilhar em outros sites

Repare aqui:

iif(pe.pessoa_fisica,nome,razao_social) as PESSOA, iif(pe.pessoa_fisica,nome,razao_social)

Está selecionando o mesmo dado duas vezes, por isso pessoa está aparecendo duas vezes e nenhuma vez vendedor. Apesar de ter dados alias diferentes, o dado que está puxando do banco é o mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tem razao mas como eu poderia fazer entao na sub ,pois na minha tabela pessoa eu tenho o campo chave - tipo - nome para ambos sao iguais a diferenca esta na tipo quando é cliente o tipo é 100000 e pessoa_fisica esta marcado no banco e quando é vendedor o tipo é 001000 e o campo pessoa_fisica tambem esta marcado pois ambos sao pessoas fisica .se o campo pessoa_fisica não esta marcado é porque é pessoa juridica .com esta sub listapedidos apenas consegui visualizar na lista quando pessoa = vendedor mas quando pessoa é <> vendedor mostra igual tentei assim

 

QSQL = QSQL & " FROM PEDIDOSDEVENDA AS P INNER JOIN Pessoas pe ON P.ChavePessoa = Pe.Chave and P.Chavevendedor = Pe.Chave and P.ChavePessoa <> P.Chavevendedor "mas da erro sintaxe sql

 

tentei com where

 

 

QSQL = QSQL & " FROM PEDIDOSDEVENDA AS P INNER JOIN Pessoas pe ON P.ChavePessoa = Pe.Chave and P.Chavevendedor = Pe.Chave where P.ChavePessoa <> P.Chavevendedor

 

ex com o iif(pe.pessoa_fisica,nome,razao_social) as PESSOA, na coluna pessoa quando é pessoa fisica me mostra o nome da pessoa quando é juridica me mostra razao_social queria fazer a mesma coisa com o nome vendedor ja que é pessoa fisica

"mas não mostra nada dai tem alguma ideia.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas você está selecionando o mesmo campo da mesma tabela.

 

Na sua tabela pedido de venda você está armazenando somente a chave da pessoa e a chave do vendedor, logo precisa pegar em suas respectivas tabelas os dados para exibi-los.

Mas acredito eu que estejam em tabelas diferentes, o cadastro da pessoa em uma e o cadastro do vendedor em outra, ou estou enganado? Caso não esteja, sugiro que separe.

Pois bem, sendo assim, você terá que montar uma query com três tabelas, e não com duas, como está fazendo.

Um exemplo seria assim:

 

QSQL = "SELECT P.NumDoc AS [Nº DOC], iif(pp.pessoa_fisica,nome,razao_social) as PESSOA, iif(pv.pessoa_fisica,nome,razao_social) as VENDEDOR, P.Data AS DATA,"
QSQL = QSQL & " Format$(p.totalpedido,'###,##0.00') as TOTALPEDIDO, IIF(P.PENDENTE=0,'FECHADO','PENDENTE') AS SITUAÇÃO, P.Chave"
'QSQL = QSQL & " FROM PEDIDOSDEVENDA as p, pessoa as pp, vendedor as pv
where p.Chavepessoa = pp.Chave and pv.Chave = p.Chavevendedor

Só não tenho certeza se o alias das tabelas irá funcionar nesse caso, se não funcionar, altere o alias pelos nomas das tabelas na parte das consultas.

 

Diga se entendeu o que fiz, senão explico melhor.

PS: Tirei o inner join porque o access não trabalha com join usando mais de duas tabelas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim entendi ,mas chavepessoa e chavevendedor estao na mesma tabela eu uso o inner porque tenho que comparar se a chavepessoa = chave da tabela pessoa mostra o nome da pessoa e se a chave do vendedor = chave da tabela pessoa mostra o nome do vendedor ententeu a query é entre 2 tabelas pessoas e pedidodevenda

 

ex tentei assim agora :

 

QSQL = "SELECT P.NumDoc AS [Nº DOC], iif(pe.pessoa_fisica,nome,razao_social) as PESSOA, iif(pe.pessoa_fisica,nome) as VENDEDOR, P.Data AS DATA,"

3 QSQL = QSQL & " Format$(p.totalpedido,'###,##0.00') as TOTALPEDIDO, IIF(P.PENDENTE=0,'FECHADO','PENDENTE') AS SITUAÇÃO, P.Chave"

QSQL = QSQL & " FROM PEDIDOSDEVENDA AS P inner Join pessoas as pe on pe.Chave = p.chavepessoa and pe.Chave = p.chavevendedor "

QSQL = QSQL & "where p.chavepessoa = p.chavevendedor and p.chavepessoa <> p.chavevendedor"

 

apenas acresentei o QSQL = QSQL & "where p.chavepessoa = p.chavevendedor and p.chavepessoa <> p.chavevendedor"

para comparar quando iguais p.chavepessoa = p.chavevendedor mostra respectivos nomes

quando diferentes não ta mostrando nada ,por causa p.chavepessoa <> p.chavevendedor

 

entendeu

 

'-----------------------------------------------------------

 

tambem tentei assim

 

 

QSQL = "SELECT P.NumDoc AS [Nº DOC], iif(pe.pessoa_fisica,nome,razao_social) as PESSOA, iif(pe.pessoa_fisica,nome) as VENDEDOR, P.Data AS DATA,"

QSQL = QSQL & " Format$(p.totalpedido,'###,##0.00') as TOTALPEDIDO, IIF(P.PENDENTE=0,'FECHADO','PENDENTE') AS SITUAÇÃO, P.Chave"

QSQL = QSQL & " FROM PEDIDOSDEVENDA AS P,pessoas as pe "

QSQL = QSQL & "where p.chavepessoa = p.chavevendedor "

 

 

se esta duplicando os numeros ex:

 

teria que aparecer

 

num doc pessoa vendedor data

10 alexandre carlos 05/10

 

ok

 

mas aparece

 

 

num doc pessoa vendedor data

---------------------------------------

10 alexandre alexandre 05/10

10 carlos carlos 05/10

--------------------------------------

aparece 2 registros para cada pedido semo inner

Compartilhar este post


Link para o post
Compartilhar em outros sites

e se a chave do vendedor = chave da tabela pessoa mostra o nome do vendedor ententeu a query é entre 2 tabelas pessoas e pedidodevenda

 

Não, você não entendeu. Você não tem que comparar a chave do vendedor com a chave da tabela pessoa. Você tem que comparar a chave do vendedor com a chave da tabela vendedor.

Não há dados do vendedor na tabela pessoa, e sim na tabela vendedor.

Você precisa trabalhar com três tabelas, e não com duas.

 

Tente executar a query que te passei direto em seu banco de dados, veja se o resultado será o que você precisa.

 

 

VbNet, continuarei te auxiliando, mas movi seu tópico para Access, pois seu problema não é com o VB.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok obrigado por ainda me ajudar

 

cara não tenho a tabela vendedor quando eu cdastro a pessoa eu defino se vai ser pesssoa fisica ou pessoa juridica e se vai ser cliente ou vendedor

porisso da query consultar 2 tabelas tabela pessoa e pedidosdevenda.

 

essa query so vai funcionar se eu criar a tabela vendedor

 

sera que tem uma forma via sql para dizer quando chavepessoa = chave então mostra nome da pessoa e se chavevendedor = chave mostra vendedor mas e se a

chavevendedor for <> chavepessoa como eu mostro os nomes do flex grid você acha mais facil separar ou tem como eu fazer assim .

 

QSQL = "SELECT P.NumDoc AS [Nº DOC], iif(pp.pessoa_fisica,nome,razao_social) as PESSOA, iif(pv.pessoa_fisica,nome,razao_social) as VENDEDOR, P.Data AS DATA,"

QSQL = QSQL & " Format$(p.totalpedido,'###,##0.00') as TOTALPEDIDO, IIF(P.PENDENTE=0,'FECHADO','PENDENTE') AS SITUAÇÃO, P.Chave"

QSQL = QSQL & " FROM PEDIDOSDEVENDA as p, pessoa as pp, vendedor as pv

where p.Chavepessoa = pp.Chave and pv.Chave = p.Chavevendedor "

 

 

-------------------------------------------------------------------------------

porque assim não mostra nada

 

QSQL = QSQL & " FROM PEDIDOSDEVENDA AS P INNER JOIN Pessoas pe ON P.ChavePessoa = Pe.Chave and P.Chavevendedor = Pe.Chave and P.ChavePessoa <> P.Chavevendedor "mas da erro sintaxe sq

 

ou

 

QSQL = QSQL & " FROM PEDIDOSDEVENDA AS P INNER JOIN Pessoas pe ON P.ChavePessoa = Pe.Chave and P.Chavevendedor = Pe.Chave where P.ChavePessoa <> P.Chavevendedor "

 

porque o where não aceia esta condição = P.ChavePessoa <> P.Chavevendedor deveria de mostrar os nomes vendedor e pessoa ok

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como assim não tem a tabela vendedor?

Está tudo na mesma tabela? O cadastro dos clientes, dos vendedores? Tudo?

 

Nossa, ai você se complica sozinho.

Acho que vai precisar desmenbrar sim.

Vou fazer um esquema abaixo que vai te mostrar que sua lógica está errada montando suas tabelas dessa forma:

 

Tabela PedidosDeVenda:

chave  |  pessoa  |  vendedor  |  valor
1      |    1     |     2      |  R$10,00

Tabela Pessoas

ChavePessoa  |  NomePessoa  |  ChaveVendedor  |  NomeVendedor  |  TipoPessoa (1 p/ vendedor, 0 p/ pessoa)
    1        |     Zé       |                 |                |      0
             |              |       2         |      Fulano    |      1
Quando você faz uma consulta usando o join, a idéia é que ele pegue uma linha de uma tabela e uma linha correspondente da outra tabela. Ou duas e duas, três e três, tanto faz.

Nesse caso, para cada linha da tabela PedidosDeVenda, você precisa de duas linhas da Tabela Pessoa.

Não que isso seja impossível de fazer, mas o retorno não será da maneira como está esperando.

Nunca mostrará assim:

Zé, Fulano, R$10,00

 

O mais próximo que vai chegar desse resultado será:

Zé, null, R$10,00

null,Fulano, R$10,00

 

Ou você utiliza tabelas distintas para pessoa e vendedor ou "está na roça".

 

Boa sorte.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.