CONSULTA NO BANCO ACCESS USANDO DATA
ai pessoal... consegui.. eu fiz o seguinte..
mas o problema é que agora nao consigo pesquisar só por telefone.. ele nao me retorna nada.. como ajustar??
Data1.RecordSource = "select Clientes.codigo_cliente, Clientes.Nome, Endereco,bairro, Cidades.nome , (select top 1 Telefone from Telefones where telefone like '*" & mskBuscarTelefone.Text & "*' and telefones.codigo_cliente = Clientes.codigo_cliente) as Telefone from Clientes, cidades where status = '1' and clientes.nome like '*" & Replace(txtBuscarNome.Text, "'", "") & "*' and endereco like '*" & Replace(txtBuscarEndereco.Text, "'", "") & "*' and bairro like '*" & Replace(txtBuscarBairro.Text, "'", "") & "*' and Clientes.codigo_cidade like '*" & txtBuscarCodCidade & "*' And Cidades.codigo_cidade = clientes.codigo_cidade order by Clientes.nome"
mas o problema é que agora nao consigo pesquisar só por telefone.. ele nao me retorna nada.. como ajustar??
??
??? ai pessoalll.. me ajudem...
,,,
Lendo o seu problema entendo que o que procura é um RecordSet Hierárquico.
Algo semelhante ao Acces onde se Existem Itens relacionados ao registro eles ficariam dispostos em uma "subconsulta" e se o user clicar no + estes registros seriam mostrados.
Para fazer isto precisamos de 2 coisas:
A- Um recordset que permita isto (Hierárquico)
A- Um controle que Mostre os dados Hierarquicamente ( O MSHFlexgrid ) tem a vantagem de a gente poder utilizar uma sintaxe do tipo:
Set MSHFlexgrid.RecordSet = RS
Ou seja , sem DataControl.
Para abrir um RS Hierárquico:
Precisamos de uma Conexão Especial ..
Cnn.Open "Provider=MSDataShape;Data Provider=Microsoft.Jet.OLEDB.4.0;data source= " & DBCAD & "\Geral.mdb;Persist Security Info=False;Jet OLEDB:Database Password=" & PASSWORD
StringSQL Especial ...
strSQL = "SHAPE {SELECT id_pedido as Pedido, nm_cliente + ' (' + cnpj_cliente + ')' as Cliente, ds_comprador as Comprador, dt_pedido as Data, vl_total as Valor FROM pedido p INNER JOIN cliente c"
strSQL = strSQL & "} APPEND ({SELECT id_pedido as Pedido, item & ' - ' & ds2_produto as Descrição, Quantidade , Unidade, Valor FROM detalhe_pedido dp ORDER BY item"
strSQL = strSQL & "} RELATE Pedido TO Pedido)"
(Atenção, Esta string SQL NAO está completa como no programa ... apenas coloquei a parte que interessava)
Agora basta fazer:
Set fg_ped.Recordset = RS
Moleza, não axam ?
Algo semelhante ao Acces onde se Existem Itens relacionados ao registro eles ficariam dispostos em uma "subconsulta" e se o user clicar no + estes registros seriam mostrados.
Para fazer isto precisamos de 2 coisas:
A- Um recordset que permita isto (Hierárquico)
A- Um controle que Mostre os dados Hierarquicamente ( O MSHFlexgrid ) tem a vantagem de a gente poder utilizar uma sintaxe do tipo:
Set MSHFlexgrid.RecordSet = RS
Ou seja , sem DataControl.
Para abrir um RS Hierárquico:
Precisamos de uma Conexão Especial ..
Cnn.Open "Provider=MSDataShape;Data Provider=Microsoft.Jet.OLEDB.4.0;data source= " & DBCAD & "\Geral.mdb;Persist Security Info=False;Jet OLEDB:Database Password=" & PASSWORD
StringSQL Especial ...
strSQL = "SHAPE {SELECT id_pedido as Pedido, nm_cliente + ' (' + cnpj_cliente + ')' as Cliente, ds_comprador as Comprador, dt_pedido as Data, vl_total as Valor FROM pedido p INNER JOIN cliente c"
strSQL = strSQL & "} APPEND ({SELECT id_pedido as Pedido, item & ' - ' & ds2_produto as Descrição, Quantidade , Unidade, Valor FROM detalhe_pedido dp ORDER BY item"
strSQL = strSQL & "} RELATE Pedido TO Pedido)"
(Atenção, Esta string SQL NAO está completa como no programa ... apenas coloquei a parte que interessava)
Agora basta fazer:
Set fg_ped.Recordset = RS
Moleza, não axam ?
Atenção quanto ao meu último post.
Caso sua tabela cliente tenha muitos registros e na média cada um tenha 5 telefones em média seu RecordSet e seu FlexGrid Podem apresentar grande lentidão e consumo de rede .
Neste caso seria melhor a exibição dos registros da cliente (De preferencia num RS paginado) em um ListView ou algo parecido com um botão de consultar onde pega os registros da telefone do item selecionado e exibe Just-In-Time.
Caso sua tabela cliente tenha muitos registros e na média cada um tenha 5 telefones em média seu RecordSet e seu FlexGrid Podem apresentar grande lentidão e consumo de rede .
Neste caso seria melhor a exibição dos registros da cliente (De preferencia num RS paginado) em um ListView ou algo parecido com um botão de consultar onde pega os registros da telefone do item selecionado e exibe Just-In-Time.
Quanto a sua ultima duvida, Entenda que vc tem 2 Consultas
(select top 1 Telefone from Telefones where telefone like '*" & mskBuscarTelefone.Text & "*' and telefones.codigo_cliente = Clientes.codigo_cliente)
na de dentro vc coloca o Telefone na clausula Where e 2º vc não coloca nenhum WHERE
Outra coisa, sua Sintaxe SQL ta esquisita, vc juntando 2 tabelas precisa informar o que liga as duas, por exemplo cliente.id_cidade = cidade.id_cidade senão a consulta se perde.
Mas tem jeito melhor de fazer o que vc ta querendo e a Forma é com RS.Hierárquico ou com :
"SELECT DISTINCT Clientes.codigo_cliente, Telefone.Telefones FROM cliente.id_cliente = telefones.id_cliente WHERE id_cliente=Algo" etc ...
Outra coisa:
cliente.id_cliente e telefones.id_cliente precisam estar relacionados no Banco.
(select top 1 Telefone from Telefones where telefone like '*" & mskBuscarTelefone.Text & "*' and telefones.codigo_cliente = Clientes.codigo_cliente)
na de dentro vc coloca o Telefone na clausula Where e 2º vc não coloca nenhum WHERE
Outra coisa, sua Sintaxe SQL ta esquisita, vc juntando 2 tabelas precisa informar o que liga as duas, por exemplo cliente.id_cidade = cidade.id_cidade senão a consulta se perde.
Mas tem jeito melhor de fazer o que vc ta querendo e a Forma é com RS.Hierárquico ou com :
"SELECT DISTINCT Clientes.codigo_cliente, Telefone.Telefones FROM cliente.id_cliente = telefones.id_cliente WHERE id_cliente=Algo" etc ...
Outra coisa:
cliente.id_cliente e telefones.id_cliente precisam estar relacionados no Banco.
Saco, errei o principal ...
"SELECT DISTINCT Clientes.codigo_cliente, Telefone.Telefones FROM cliente, telefones WHERE cliente.id_cliente = telefones.id_cliente" etc ...
"SELECT DISTINCT Clientes.codigo_cliente, Telefone.Telefones FROM cliente, telefones WHERE cliente.id_cliente = telefones.id_cliente" etc ...
Tópico encerrado , respostas não são mais permitidas