DUVIDA SQL
Boa tarde pessoal, sou novo tanto em sql como em vb.net, porém insistindo muito eu estou conseguindo criar um programa do jeito que eu quero, porém me surgiu uma grande dúvida, o banco de dados usado é um .DBF usando códigos de SQL eu consigo manipula-lo porém preciso de ajuda para abrir dois bancos ao mesmo tempo e comparar uma coluna com a outra.
Deixa eu explicar melhor tenho o arquivo OR.DBF que representa os Orçamentos emitidos e o VE.DBF onde ficam os vendedores, no banco OR tenho o orvended onde corresponde quem fez o Orçamento e nessa listagem ficam os números de cada vendedor, exemplo 10, 15 , 77 etc.
Já no banco VE.DBF eu tenho as colunas vecodigo e venome onde o vecodigo contém o mesmo número que o orvended e o venome que é correspondente ao nome do vendedor.
Agora onde eu quero chegar, eu quero puxar quase todas as informações do OR.DBF mas no lugar do orvended que são os numeros, eu gostaria de carregar o outro banco comparar se os numeros do orvended batem com o do vecodigo e assim imprimir no datagridview o nome do funcionário.
Um exemplo de como está apenas até o momento.
[ô] INICIO VER ORÇAMENTOS DO DIA
Private Sub btn_orc_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_orc.Click
[ô]Dim orcamento As String = [Ô]G:\TITE\dados\OR.DBF[Ô]
[ô]System.IO.File.Copy(orcamento, [Ô]\ iteloja\C\Tite_Eletricidade\OR.DBF[Ô], True)
[ô]System.IO.File.Copy(orcamento, [Ô]C:\Documents and Settings\TITE ELETRICIDADE\Meus documentos\Visual Studio 2010\Projects\buscaprodutos\buscaprodutos\bin\Debug\OR.DBF[Ô], True)
Dim item As String = [Ô]01[Ô]
Dim data As DateTime = DateTime.Now
TextBox8.Clear()
Dim oConn As New OdbcConnection()
oConn.ConnectionString = [Ô]Driver={Microsoft dBase Driver (*.dbf)};SourceType=DBF;SourceDB=G:\TITE\dados\;Exclusive=No;Collate=Machine;NULL=NO;DELETED=NO;BACKGROUNDFETCH=NO;[Ô]
oConn.Open()
Dim oCmd As OdbcCommand = oConn.CreateCommand()
oCmd.CommandText = [Ô]SELECT DISTINCT ornumero AS Orçamento,ordata AS Data,orclient AS Cliente,ornome AS Nome FROM G:\TITE\dados\OR.DBF WHERE oriten LIKE[Ô] & [Ô][ô][Ô] & item & [Ô][ô][Ô] & [Ô]AND ordata LIKE[Ô] & [Ô][ô][Ô] & Format(data, [Ô]d[Ô]) & [Ô][ô][Ô] & [Ô]ORDER BY ornumero ASC[Ô]
Dim dt As New DataTable()
dt.Load(oCmd.ExecuteReader())
oConn.Close()
DataGridView4.DataSource = dt
DataGridView4.AutoResizeColumns()
DataGridView4.AutoResizeRows()
TextBox8.Text = DataGridView4.Rows.Count.ToString
End Sub
[ô]FIM VER ORÇAMENTOS DO DIA
Se alguém não entender por favor me diga, como disse sou novo na programação de vb e bancos de dados, para fazer o código todo do programa até agora eu pesquisei muito google e fui unindo dados até conseguir fazer o que queria, mas surgiu essa dúvida que não faço nem idéia de como fazer.
Obrigado pela ajuda desde já.
Deixa eu explicar melhor tenho o arquivo OR.DBF que representa os Orçamentos emitidos e o VE.DBF onde ficam os vendedores, no banco OR tenho o orvended onde corresponde quem fez o Orçamento e nessa listagem ficam os números de cada vendedor, exemplo 10, 15 , 77 etc.
Já no banco VE.DBF eu tenho as colunas vecodigo e venome onde o vecodigo contém o mesmo número que o orvended e o venome que é correspondente ao nome do vendedor.
Agora onde eu quero chegar, eu quero puxar quase todas as informações do OR.DBF mas no lugar do orvended que são os numeros, eu gostaria de carregar o outro banco comparar se os numeros do orvended batem com o do vecodigo e assim imprimir no datagridview o nome do funcionário.
Um exemplo de como está apenas até o momento.
[ô] INICIO VER ORÇAMENTOS DO DIA
Private Sub btn_orc_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_orc.Click
[ô]Dim orcamento As String = [Ô]G:\TITE\dados\OR.DBF[Ô]
[ô]System.IO.File.Copy(orcamento, [Ô]\ iteloja\C\Tite_Eletricidade\OR.DBF[Ô], True)
[ô]System.IO.File.Copy(orcamento, [Ô]C:\Documents and Settings\TITE ELETRICIDADE\Meus documentos\Visual Studio 2010\Projects\buscaprodutos\buscaprodutos\bin\Debug\OR.DBF[Ô], True)
Dim item As String = [Ô]01[Ô]
Dim data As DateTime = DateTime.Now
TextBox8.Clear()
Dim oConn As New OdbcConnection()
oConn.ConnectionString = [Ô]Driver={Microsoft dBase Driver (*.dbf)};SourceType=DBF;SourceDB=G:\TITE\dados\;Exclusive=No;Collate=Machine;NULL=NO;DELETED=NO;BACKGROUNDFETCH=NO;[Ô]
oConn.Open()
Dim oCmd As OdbcCommand = oConn.CreateCommand()
oCmd.CommandText = [Ô]SELECT DISTINCT ornumero AS Orçamento,ordata AS Data,orclient AS Cliente,ornome AS Nome FROM G:\TITE\dados\OR.DBF WHERE oriten LIKE[Ô] & [Ô][ô][Ô] & item & [Ô][ô][Ô] & [Ô]AND ordata LIKE[Ô] & [Ô][ô][Ô] & Format(data, [Ô]d[Ô]) & [Ô][ô][Ô] & [Ô]ORDER BY ornumero ASC[Ô]
Dim dt As New DataTable()
dt.Load(oCmd.ExecuteReader())
oConn.Close()
DataGridView4.DataSource = dt
DataGridView4.AutoResizeColumns()
DataGridView4.AutoResizeRows()
TextBox8.Text = DataGridView4.Rows.Count.ToString
End Sub
[ô]FIM VER ORÇAMENTOS DO DIA
Se alguém não entender por favor me diga, como disse sou novo na programação de vb e bancos de dados, para fazer o código todo do programa até agora eu pesquisei muito google e fui unindo dados até conseguir fazer o que queria, mas surgiu essa dúvida que não faço nem idéia de como fazer.
Obrigado pela ajuda desde já.
Olha um sql bem simples em duas tabelas, sem complicações.
Select tabelaorcamento.numero, tabelaorcamento.codvendedor, tabelavendedor.nome from tabelaorcamento, tabelavendedor where tabelaorcamento.campo = criterio and tabelavendedor.codvendedor = tabelaorcamento.codvendedor order by tabelaquequiser.campo
Sem usar DISTINCT, JOIN, ALIAS, nada bem simples. Coloque quantos campos e critérios quiser.
vlu//
Select tabelaorcamento.numero, tabelaorcamento.codvendedor, tabelavendedor.nome from tabelaorcamento, tabelavendedor where tabelaorcamento.campo = criterio and tabelavendedor.codvendedor = tabelaorcamento.codvendedor order by tabelaquequiser.campo
Sem usar DISTINCT, JOIN, ALIAS, nada bem simples. Coloque quantos campos e critérios quiser.
vlu//
Ramos eu tentei da maneira que você disse, veja se a sintaxe está certa a maneira que eu usei
oCmd.CommandText = [Ô]SELECT OR.ornumero,OR.orvendend,VE.codigo,VE.venome from OR,VE WHERE VE.vecodigo = OR.orvendend order by OR.ornumero[Ô]
deixei bem simples apenas para testar usando o critério de comparação. OBS: o banco é em dbf são varios arquivos que rodam dentro do servidor da empresa aqui, no caso as [Ô]tabelas[Ô] nesse caso para teste eu deixei dentro da pasta do .exe então não precisei colocar o caminho completo, senão o código ficaria from G:\TITE\dados\OR.DBF,G:\TITE\dados\VE.DBF não sei se isso vai ter alguma diferença na hora do uso.
Agora voltando, quando executei o comando do jeito que você me disse com o exemplo que postei acima. o VB me retornou isso
ERROR [42000] [Microsoft][Driver ODBC para dBase] Erro de sintaxe (operador faltando) na expressão de consulta [ô]OR.ornumero[ô].
oCmd.CommandText = [Ô]SELECT OR.ornumero,OR.orvendend,VE.codigo,VE.venome from OR,VE WHERE VE.vecodigo = OR.orvendend order by OR.ornumero[Ô]
deixei bem simples apenas para testar usando o critério de comparação. OBS: o banco é em dbf são varios arquivos que rodam dentro do servidor da empresa aqui, no caso as [Ô]tabelas[Ô] nesse caso para teste eu deixei dentro da pasta do .exe então não precisei colocar o caminho completo, senão o código ficaria from G:\TITE\dados\OR.DBF,G:\TITE\dados\VE.DBF não sei se isso vai ter alguma diferença na hora do uso.
Agora voltando, quando executei o comando do jeito que você me disse com o exemplo que postei acima. o VB me retornou isso
ERROR [42000] [Microsoft][Driver ODBC para dBase] Erro de sintaxe (operador faltando) na expressão de consulta [ô]OR.ornumero[ô].
Com o código abaixo eu filtrava os dados e os exibia em um datagrid, veja se consegue entender um pouco a lógica de como funciona.
Private Sub pesquisa()
Dim oConn As New OleDbConnection()
[ô]define a string de conexão com a fonte de dados Northwind.mdb
oConn.ConnectionString = [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=[Ô] & caminhopasta & [Ô] ;Extended Properties=dBASE IV;[Ô]
[ô] Cria uma string de conexão , um data adapter e um data table.
Dim TableAdapterClientes As New OleDbDataAdapter([Ô]SELECT CODIGO, descricao FROM [Ô] & caminhobd & [Ô] where descricao like [ô][Ô] & txtdescricao.Text.ToUpper & [Ô]%[ô] [Ô], oConn)
Dim tabelaCliente As New DataTable()
[ô] preenche o adapter com o conteúdo da tabela Customers.
TableAdapterClientes.Fill(tabelaCliente)
[ô] Define a fonte de dados para o BindingSource1.
BindingSource1.DataSource = tabelaCliente
[ô] Ordena os itens pela cidade ascendente e nome da companhia em ordem descendente
[ô] Define a fonte de dados para o dataGridView1 e o BindingSource1.
DataGridView1.DataSource = BindingSource1
End Sub
Altair não consegui compreender, o modo que você está usando é diferente do meu, como sou novo é dificil compreender, teria como você me dar um exemplo usando a base do meu? E manipulando os arquivos (tabelas) que eu informo? Sei que é pedir muito, mas é que me ajudaria a compreender mais facil a ideia.
Obrigado.
Obrigado.
Posta aà o seu projeto que eu dou uma olhada.
Altair me desculpa a ignorancia, para postar é só anexar o arquivo na mensagem certo? caso for não vou poder... a não ser que você não precise dos bancos, o banco de orçamento tem 100mbs :s posso hospedar em outro host e colocar aqui? ou que outra maneira posso proceder?
Compactado ficou 8 MB se quiser hospedo em algum host e coloco o link aqui, caso for autorizado fazer isso, postar links externos.
Compactado ficou 8 MB se quiser hospedo em algum host e coloco o link aqui, caso for autorizado fazer isso, postar links externos.
Testei com umas tabelas DBF aqui e consegui fazer o relacionamento. Basta adaptar o código.
Private Sub pesquisa()
Dim oConn As New OleDbConnection()
[ô]define a string de conexão com a fonte de dados Northwind.mdb
oConn.ConnectionString = [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:;Extended Properties=dBASE IV;[Ô]
[ô] Cria uma string de conexão , um data adapter e um data table.
Dim TableAdapterClientes As New OleDbDataAdapter([Ô]SELECT * FROM C:\SET_PROD.DBF As Produto inner join C:\SET_FORN.DBF As Fornecedor on Produto.GRUPO = Fornecedor.ESTADO where descricao like [ô][Ô] & txtdescricao.Text.ToUpper & [Ô]%[ô] [Ô], oConn)
Dim tabelaCliente As New DataTable()
[ô] preenche o adapter com o conteúdo da tabela Customers.
TableAdapterClientes.Fill(tabelaCliente)
[ô] Define a fonte de dados para o BindingSource1.
BindingSource1.DataSource = tabelaCliente
[ô] Ordena os itens pela cidade ascendente e nome da companhia em ordem descendente
[ô] Define a fonte de dados para o dataGridView1 e o BindingSource1.
DataGridView1.DataSource = BindingSource1
End Sub
Altair como me recomendou estou hospedando o arquivo, desculpa se o código parece bagunçado, é que é meu primeiro programa que estou desenvolvendo, eu tento deixar as linhas comentadas para me achar ai no meio depois kkk.
Os .DBF[ô]S estão na primeira pasta dentro do projeto com os nomes or.dbf (orçamentos) ve.dbf (vendedores)
Os .DBF[ô]S estão na primeira pasta dentro do projeto com os nomes or.dbf (orçamentos) ve.dbf (vendedores)
Tentou adaptar o código que lhe passei?
Altair consegui aqui desse jeito que você me disse, porém agora quero só ajeitar a tabela, usei a sintaxe assim
oCmd.CommandText = [Ô]SELECT * FROM OR AS orcamentos inner join VE AS vendedores on orcamentos.orvended = vendedores.vecodigo WHERE orcamentos.ornumero >= [ô]049097[ô] AND orcamentos.ornumero <= [ô]049097[ô][Ô]
só não entendi a parte do on orcamentos.orvended = vendedores.vecodigo,porém funcionou e obtive o retorno da seguinte maneira.
Tem como eu filtrar o que eu quero que apareça Altair?
Por exemplo em vez de mostrar todos os campos mostrar apenas o ornumero,orclient,ornome,venome?
oCmd.CommandText = [Ô]SELECT * FROM OR AS orcamentos inner join VE AS vendedores on orcamentos.orvended = vendedores.vecodigo WHERE orcamentos.ornumero >= [ô]049097[ô] AND orcamentos.ornumero <= [ô]049097[ô][Ô]
só não entendi a parte do on orcamentos.orvended = vendedores.vecodigo,porém funcionou e obtive o retorno da seguinte maneira.
Tem como eu filtrar o que eu quero que apareça Altair?
Por exemplo em vez de mostrar todos os campos mostrar apenas o ornumero,orclient,ornome,venome?
Tópico encerrado , respostas não são mais permitidas