JUNTAR TABELAS
queria juntar duas tabelas mostrar o seu conteudo em um msflexgrid sera possivel ?
Qual Banco de Dados vc está usando? SQL Server, Acess, Excel ou outro tipo? Se for o SQL, eu tenho um projeto q tem o comando q pucha informação de duas tabelas, mas eu usei no DataGridView. se quiser testar no msflexgrid!
eu estou usando acess .
no caso, não sei exatamente o comando de pesquisa, mas posso te ajudar usando Dataset ou DataReader
com Dataser, fica mais ou menos assim:
Public Function Lista(ByVal strDescricao As String) As DataSet
Dim strQuery As New StringBuilder
strQuery.Append([Ô]Select cod,Produto,ValorVen,Codbar From t_Produto Where Produto like [ô]%[Ô] & strDescricao & [Ô]%[ô][Ô])
Dim _cldBancoDados As New cldBancoDados
Return _cldBancoDados.RetornaDataSet(strQuery.ToString)
End Function
Dentro das aspas, vc coloca o comando de pesquisa, só q vc vai ter q fazer isso duas vezes com nomes diferentes, por exemplo: Lista1 e Lista2
Com DataReader ficara mais ou menos assim:
Public Function Lista(ByVal Prod As String) As SqlDataReader
Dim strQuery As String
strQuery = [Ô]select * from t_Produto Where Produto=[ô][Ô] & Prod & [Ô][ô][Ô]
Dim _cldBancoDados As New cldBancoDados
Return _cldBancoDados.RetornaDataReader(strQuery.ToString)
End Function
No caso vc muda a importação do SQLDATAREADER pelo do ACCESS, e altere a função do strQuery dentro das aspas para o comando de pesquisa dentro do Script do Access...
Como estou muito acostumado com o SQL, não sei exatamente o comando, mas se quiser posso pesquisar e enviar o comando por mensagem interna para você... e no DataReader como no DataSet, vc vai ter q criar dois, um para primeira tabela, e outro para a segunda, depois na hora de jogar no formulario vai ficar mais ou menos assim:
Dim drDados As System.Data.SqlClient.SqlDataReader
drDados = agenda.ListarUsuario(txtCod.Text)
If drDados.Read Then
txtBairro.Text = CStr(drDados([Ô]Bairro[Ô]))
txtCEP.Text = CStr(drDados([Ô]CEP[Ô]))
txtCod.Text = CStr(drDados([Ô]cod[Ô]))
txtComplemento.Text = CStr(drDados([Ô]Complemento[Ô]))
txtData.Text = CStr(drDados([Ô]Data[Ô]))
txtEmail.Text = CStr(drDados([Ô]Email[Ô]))
txtEndereco.Text = CStr(drDados([Ô]Endereco[Ô]))
txtNome.Text = CStr(drDados([Ô]Nome[Ô]))
txtNr.Text = CStr(drDados([Ô]nr[Ô]))
txtObs.Text = CStr(drDados([Ô]Obs[Ô]))
txtTelCel.Text = CStr(drDados([Ô]TelCel[Ô]))
txtTelRec.Text = CStr(drDados([Ô]TelRec[Ô]))
txtTelRes.Text = CStr(drDados([Ô]TelRes[Ô]))
txtCidade.Text = CStr(drDados([Ô]Cidade[Ô]))
preencheUF()
txtUF.Text = CStr(drDados([Ô]UF[Ô]))
cbUF.Text = CStr(drDados([Ô]UF[Ô]))
End If
drDados = Login.Listar(txtCod.Text)
If drDados.Read Then
txtUser.Text = CStr(drDados([Ô]Usuario[Ô]))
End If
Este é um exemplo q recomendo no caso de um DataReader. Para o dataset, só se for para apresentar em uma DataGridView ou algo similar.
com Dataser, fica mais ou menos assim:
Public Function Lista(ByVal strDescricao As String) As DataSet
Dim strQuery As New StringBuilder
strQuery.Append([Ô]Select cod,Produto,ValorVen,Codbar From t_Produto Where Produto like [ô]%[Ô] & strDescricao & [Ô]%[ô][Ô])
Dim _cldBancoDados As New cldBancoDados
Return _cldBancoDados.RetornaDataSet(strQuery.ToString)
End Function
Dentro das aspas, vc coloca o comando de pesquisa, só q vc vai ter q fazer isso duas vezes com nomes diferentes, por exemplo: Lista1 e Lista2
Com DataReader ficara mais ou menos assim:
Public Function Lista(ByVal Prod As String) As SqlDataReader
Dim strQuery As String
strQuery = [Ô]select * from t_Produto Where Produto=[ô][Ô] & Prod & [Ô][ô][Ô]
Dim _cldBancoDados As New cldBancoDados
Return _cldBancoDados.RetornaDataReader(strQuery.ToString)
End Function
No caso vc muda a importação do SQLDATAREADER pelo do ACCESS, e altere a função do strQuery dentro das aspas para o comando de pesquisa dentro do Script do Access...
Como estou muito acostumado com o SQL, não sei exatamente o comando, mas se quiser posso pesquisar e enviar o comando por mensagem interna para você... e no DataReader como no DataSet, vc vai ter q criar dois, um para primeira tabela, e outro para a segunda, depois na hora de jogar no formulario vai ficar mais ou menos assim:
Dim drDados As System.Data.SqlClient.SqlDataReader
drDados = agenda.ListarUsuario(txtCod.Text)
If drDados.Read Then
txtBairro.Text = CStr(drDados([Ô]Bairro[Ô]))
txtCEP.Text = CStr(drDados([Ô]CEP[Ô]))
txtCod.Text = CStr(drDados([Ô]cod[Ô]))
txtComplemento.Text = CStr(drDados([Ô]Complemento[Ô]))
txtData.Text = CStr(drDados([Ô]Data[Ô]))
txtEmail.Text = CStr(drDados([Ô]Email[Ô]))
txtEndereco.Text = CStr(drDados([Ô]Endereco[Ô]))
txtNome.Text = CStr(drDados([Ô]Nome[Ô]))
txtNr.Text = CStr(drDados([Ô]nr[Ô]))
txtObs.Text = CStr(drDados([Ô]Obs[Ô]))
txtTelCel.Text = CStr(drDados([Ô]TelCel[Ô]))
txtTelRec.Text = CStr(drDados([Ô]TelRec[Ô]))
txtTelRes.Text = CStr(drDados([Ô]TelRes[Ô]))
txtCidade.Text = CStr(drDados([Ô]Cidade[Ô]))
preencheUF()
txtUF.Text = CStr(drDados([Ô]UF[Ô]))
cbUF.Text = CStr(drDados([Ô]UF[Ô]))
End If
drDados = Login.Listar(txtCod.Text)
If drDados.Read Then
txtUser.Text = CStr(drDados([Ô]Usuario[Ô]))
End If
Este é um exemplo q recomendo no caso de um DataReader. Para o dataset, só se for para apresentar em uma DataGridView ou algo similar.
Citação:SQL Server, Acess, Excel
Desses Três, só o SQLSever é banco de dados.
Para selecionar duas tabelas utilize: INNER JOIN
Exemplo:
SELECT *from produtos INNER JOIN produtos_inventario ON produtos.Cod_Prod = produtos_inventario.Cod_Prod
Existem instruçôes sql enorme nesses casos, essa é uma bem simples.
Mouser, você tem que responder de forma literal.
Seu código não serve para ele. Isto não funciona em vb6
Nilsontres.
Ele quer juntar duas tabelas distintas tipo.
Select Cliente.Nome,Cliente.Endereco,Produto.Descricao.Produto.Valor From Cliente,Produto.
Eu acredito que seja desta forma.
Estranho,nunca fiz isto e acredito que não vai dar certo.
Seu código não serve para ele. Isto não funciona em vb6
Nilsontres.
Ele quer juntar duas tabelas distintas tipo.
Select Cliente.Nome,Cliente.Endereco,Produto.Descricao.Produto.Valor From Cliente,Produto.
Eu acredito que seja desta forma.
Estranho,nunca fiz isto e acredito que não vai dar certo.
o problema e que a instruçao so da um registro quando havia de aparecer dois e mostralos num flexgrid
JOAOSOARES
vc teria que dar mais detalhes, vc pretende unir dois selects ? ou unir duas, tres tabelas numa consulta usando JOIN ?
passe seu código, e a faça uma tabelinha no excel, manda o print pra sabermos o resultado que vc quer que seja mostrado no grid.
vc teria que dar mais detalhes, vc pretende unir dois selects ? ou unir duas, tres tabelas numa consulta usando JOIN ?
passe seu código, e a faça uma tabelinha no excel, manda o print pra sabermos o resultado que vc quer que seja mostrado no grid.
acho que ta faltando detalhes ai, você deveria postar o select que fez até então para sabermos onde está o erro.
mas o mais plausÃvel, é o que o NILSONTRES postou, ou seja usar o inner join para fazer a consulta em duas tabelas.
mas o mais plausÃvel, é o que o NILSONTRES postou, ou seja usar o inner join para fazer a consulta em duas tabelas.
Eu estou usando a lógica para auxilia-lo na criação do código, mas o que o Marcelo Treze acabou de dizer pode ser mais útil do que o meu exemplo. Mas concordo com todos... Desculpa se atrapalhei...
Citação::
acho que ta faltando detalhes ai, você deveria postar o select que fez até então para sabermos onde está o erro.
mas o mais plausÃvel, é o que o NILSONTRES postou, ou seja usar o inner join para fazer a consulta em duas tabelas.
O codigo sql e este. obrigado
.
sql1 = [Ô]Select from avarias,pagamentos where avarias.codigo = pagamentos.npagamento[Ô]
Set emp1 = New ADODB.Recordset
emp1.Open sql1, cnn, adOpenStatic, adLockOptimistic, adCmdText
emp1.Requery
Total.Caption = emp1.RecordCount
Carrega_grid_pagamentos_todos
Private Sub Carrega_grid_pagamentos_todos()
Dim ld As Integer
gridRelat.Rows = 1
gridRelat.Rows = emp1.RecordCount + 1
ld = 1
Do While Not emp1.EOF
gridRelat.TextMatrix(ld, 1) = emp1!codigo
gridRelat.TextMatrix(ld, 1) = emp1!Npagamento
[ô]///////
If Not IsNull(emp1!nom) Then
gridRelat.TextMatrix(ld, 2) = emp1!nom
Else
gridRelat.TextMatrix(ld, 2) = [Ô][Ô]
End If
If Not IsNull(emp1!nomeempresa) Then
gridRelat.TextMatrix(ld, 2) = emp1!nomeempresa
Else
gridRelat.TextMatrix(ld, 2) = [Ô][Ô]
End If
[ô]//////
If Not IsNull(emp1!Data) Then
gridRelat.TextMatrix(ld, 3) = emp1!Data
Else
gridRelat.TextMatrix(ld, 3) = [Ô][Ô]
End If
[ô]/////
If Not IsNull(emp1!tota) Then
gridRelat.TextMatrix(ld, 4) = emp1!tota
Else
gridRelat.TextMatrix(ld, 4) = [Ô][Ô]
End If
[ô]////
If Not IsNull(emp1!TotHoras) Then
gridRelat.TextMatrix(ld, 5) = emp1!TotHoras
Else
gridRelat.TextMatrix(ld, 5) = [Ô][Ô]
End If
If Not IsNull(emp1!Liquidado) Then
If emp1!Liquidado = [Ô]Não[Ô] Then
gridRelat.Row = ld
gridRelat.Col = 6
gridRelat.Text = [Ô]Nao[Ô]
gridRelat.CellFontBold = True
gridRelat.CellBackColor = &HC0C0FF
gridRelat.CellForeColor = vbWhite
[ô] gridRelat.TextMatrix(l, 6) = [Ô]Não[Ô]
Else
gridRelat.Row = ld
gridRelat.Col = 6
gridRelat.Text = [Ô]Sim[Ô]
gridRelat.CellFontBold = True
gridRelat.CellBackColor = &HC0FFC0
gridRelat.TextMatrix(ld, 6) = [Ô]Sim[Ô]
End If
Else
gridRelat.TextMatrix(ld, 6) = [Ô][Ô]
End If
[ô]////
gridRelat.Col = 7
[ô] gridRelat.Row = r
gridRelat.CellFontName = [Ô]Wingdings[Ô]
gridRelat.CellFontSize = 14
gridRelat.Text = strChecked
[ô] sql3 = [Ô]UPDATE pagamentos set Ntemp = [ô]Sim[ô] where npagamento= [ô][Ô] & gridRelat.TextMatrix(ld, 1) & [Ô][ô][Ô]
[ô] Set emp3 = New ADODB.Recordset
[ô] emp3.Open sql3, cnn, adOpenStatic, adLockOptimistic, adCmdText
[ô] Set emp3 = Nothing
ld = ld + 1
emp1.MoveNext
Loop
End Sub
.
sql1 = [Ô]Select from avarias,pagamentos where avarias.codigo = pagamentos.npagamento[Ô]
Set emp1 = New ADODB.Recordset
emp1.Open sql1, cnn, adOpenStatic, adLockOptimistic, adCmdText
emp1.Requery
Total.Caption = emp1.RecordCount
Carrega_grid_pagamentos_todos
Private Sub Carrega_grid_pagamentos_todos()
Dim ld As Integer
gridRelat.Rows = 1
gridRelat.Rows = emp1.RecordCount + 1
ld = 1
Do While Not emp1.EOF
gridRelat.TextMatrix(ld, 1) = emp1!codigo
gridRelat.TextMatrix(ld, 1) = emp1!Npagamento
[ô]///////
If Not IsNull(emp1!nom) Then
gridRelat.TextMatrix(ld, 2) = emp1!nom
Else
gridRelat.TextMatrix(ld, 2) = [Ô][Ô]
End If
If Not IsNull(emp1!nomeempresa) Then
gridRelat.TextMatrix(ld, 2) = emp1!nomeempresa
Else
gridRelat.TextMatrix(ld, 2) = [Ô][Ô]
End If
[ô]//////
If Not IsNull(emp1!Data) Then
gridRelat.TextMatrix(ld, 3) = emp1!Data
Else
gridRelat.TextMatrix(ld, 3) = [Ô][Ô]
End If
[ô]/////
If Not IsNull(emp1!tota) Then
gridRelat.TextMatrix(ld, 4) = emp1!tota
Else
gridRelat.TextMatrix(ld, 4) = [Ô][Ô]
End If
[ô]////
If Not IsNull(emp1!TotHoras) Then
gridRelat.TextMatrix(ld, 5) = emp1!TotHoras
Else
gridRelat.TextMatrix(ld, 5) = [Ô][Ô]
End If
If Not IsNull(emp1!Liquidado) Then
If emp1!Liquidado = [Ô]Não[Ô] Then
gridRelat.Row = ld
gridRelat.Col = 6
gridRelat.Text = [Ô]Nao[Ô]
gridRelat.CellFontBold = True
gridRelat.CellBackColor = &HC0C0FF
gridRelat.CellForeColor = vbWhite
[ô] gridRelat.TextMatrix(l, 6) = [Ô]Não[Ô]
Else
gridRelat.Row = ld
gridRelat.Col = 6
gridRelat.Text = [Ô]Sim[Ô]
gridRelat.CellFontBold = True
gridRelat.CellBackColor = &HC0FFC0
gridRelat.TextMatrix(ld, 6) = [Ô]Sim[Ô]
End If
Else
gridRelat.TextMatrix(ld, 6) = [Ô][Ô]
End If
[ô]////
gridRelat.Col = 7
[ô] gridRelat.Row = r
gridRelat.CellFontName = [Ô]Wingdings[Ô]
gridRelat.CellFontSize = 14
gridRelat.Text = strChecked
[ô] sql3 = [Ô]UPDATE pagamentos set Ntemp = [ô]Sim[ô] where npagamento= [ô][Ô] & gridRelat.TextMatrix(ld, 1) & [Ô][ô][Ô]
[ô] Set emp3 = New ADODB.Recordset
[ô] emp3.Open sql3, cnn, adOpenStatic, adLockOptimistic, adCmdText
[ô] Set emp3 = Nothing
ld = ld + 1
emp1.MoveNext
Loop
End Sub
Tópico encerrado , respostas não são mais permitidas