problema com querys

estrafalhote

Power Member
eu constriu uma query para a minha datagrid através do query builder e a query até funciona quando eu a executo no query builder mas eu nao sei como utiliza la no programa

a query é:

Código:
SELECT     produtos.idproduto, produtos.nome, produtos.quantidadestock, produtos.preco, produtos.caracteristicas, categorias.nome AS categoria, 
                      fornecedores.nome AS fornecedor
FROM         produtos, categorias, fornecedores
semttulopa9.jpg
 
acho que não era esta a tua questão, mas tens a certeza que essa query faz o que pretendes?

é que isso vai-te fazer um produto externo, quando me parece que aquilo que queres é um Inner Join... acho que te falta aí a claúsula WHERE.
 
acho que não era esta a tua questão, mas tens a certeza que essa query faz o que pretendes?

é que isso vai-te fazer um produto externo, quando me parece que aquilo que queres é um Inner Join... acho que te falta aí a claúsula WHERE.

pelo menos no query builder depois de criar a query eu faço executar e aparece tudo como eu desejo.
agora quanto iner join e à clausula where gostaria que me explicasses melhor isso:
 
Não percebi a tua pergunta, queres o q?

Queres saber como fazer uma query ao SQL apartir da tua linguagem (seja ela qual for)?, ou queres saber como obter os resultados da query?
 
Não percebi a tua pergunta, queres o q?

Queres saber como fazer uma query ao SQL apartir da tua linguagem (seja ela qual for)?, ou queres saber como obter os resultados da query?

eu queria construir uma query que me fizesse obter os resultados que eu tenho nas diferentes tabelas interligadas
 
select produtos.* , categorias.*, fornecedores.* FROM produtos , categorias , fornecedores WHERE Produtos.idcategoria = categorias.idcategoria and produtos.idfornecedore = fornecedores.idfornecedor


Ou entao com INNER JOIN



select tab1.* , fornecedores.* from (select produtos.* , categorias.* FROM produtos INNER JOIN categorias ON produtos.idcategoria = categorias.idcategoria) as tab1 INNER JOIN Fornecedores ON tab1.idfornecedor = fornecedores.idfornecedor.

Penso que os campos e tabelas estejam correctas. com esta query vais ter uns problemas por ter nomes de campos repetidos, mas resolves isso mudando-lhe os nomes como tens na tua query.

Mas para que isto funcione tens de criar as relações na Base de Dados
 
Última edição:
select produtos.* , categorias.*, fornecedores.* FROM produtos , categorias , fornecedores WHERE Produtos.idcategoria = categorias.idcategoria and produtos.idfornecedore = fornecedores.idfornecedor


Ou entao com INNER JOIN



select tab1.* , fornecedores.* from (select produtos.* , categorias.* FROM produtos INNER JOIN categorias ON produtos.idcategoria = categorias.idcategoria) as tab1 INNER JOIN Fornecedores ON tab1.idfornecedor = fornecedores.idfornecedor.

Penso que os campos e tabelas estejam correctas. com esta query vais ter uns problemas por ter nomes de campos repetidos, mas resolves isso mudando-lhe os nomes como tens na tua query.

Mas para que isto funcione tens de criar as relações na Base de Dados

tenho só duas pequenas dúvidas.
1ª o que ali em cima está com o nome de tab1.* corresponde a que?
2ª o que diz fornecedores.*, produtos.* isto são os nomes das tabelas e os asteriscos são para substituir pelo nome do campo na base de dados, não são?
 
1º o tab1 corresponde a 1 INNER JOIN entre 2 tabelas, ou seja, apos o INNER JOIN entre as tabelas Produtos e categorias dei-lhe o nome de tab1, podes dar o nome que quiseres.

2º os *s e para seleccionar todos os campos da tabela.
 
Última edição:
1º o tab1 corresponde a 1 INNER JOIN entre 2 tabelas, ou seja, apos o INNER JOIN entre as tabelas Produtos e categorias dei-lhe o nome de tab1, podes dar o nome que quiseres.

2º os *s e para seleccionar todos os campos da tabela.

tenho mais umas duvidazitas

1ª este código uso-o na parte de código do datagrid ou do form?
2ª o tab1 é para ser declarado como variável? porque diz sempre que name tab1 is not declared
 
Não é preciso declarar nada. Já experimentas-te a query no analyse da tua Base de Dados? Conforme eu pus ela não ia funcionar porque não se pode ter campos com o mesmo nome. mas resolves isso fazendo do genero, fornecedores.nome AS FornNome.

Isso metes onde queres chamar essa query metes no SELECT da datasource. Penso que isso seja para definir as colunas da DataGrid.
 
Não é preciso declarar nada. Já experimentas-te a query no analyse da tua Base de Dados? Conforme eu pus ela não ia funcionar porque não se pode ter campos com o mesmo nome. mas resolves isso fazendo do genero, fornecedores.nome AS FornNome.

Isso metes onde queres chamar essa query metes no SELECT da datasource. Penso que isso seja para definir as colunas da DataGrid.
por aquilo que eu percebi tenho de fazer assim:

Código:
 Dim strQuery As String = "iner JOIN produtos (nome, quantidadestock, preco, caracteristicas, idcategoria, idfornecedor) VALUES(@nome, @quantidadestock, @preco, @caracteristicas, @idcategoria, @idfornecedor)"

        Select Case "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=bd pap.mdb;"


        tab1.datg , fornecedores.nomef from (select produtos.fornecedor , categorias.nomec FROM produtos INNER JOIN categorias ON produtos.idcategoria = categorias.nomec)as tab1 INNER JOIN Fornecedores ON tab1.idfornecedor = fornecedore.idfornecedor.

        End Select
mas dá me erro em tab1.datg e categorias.nomec

se me puderes explicar mais detalhadamente agradecia pois eu preciso mesmo disto
 
o tab1.datg não existe por isso que te da erro.

e depois estas a igualar 2 campos que nem sequer os chamas-te. faz o seguinte:

SELECT tab.* , Fornecedores.nome as NomeFornecedor, fornecedores.idfornecedor as IdFornecedor FROM (SELECT Produtos.*, categorias.nome as NomeCategoria, categorias.idcategoria as IdCategoria FROM Produtos INNER JOIN categorias ON Produtos.idcategoria = categorias.idcategoria) as Tab INNER JOIN fornecedores ON tab.idfornecedor = fornecedores.idfornecedor
 
Back
Topo