Luisveiga18 Posted June 21, 2013 at 01:43 PM Report #514229 Posted June 21, 2013 at 01:43 PM Bom eu tenho uma base de dados em Access e tenho um programa em Visual Basic para a gerir, de momento encontro-me com um problema que é na parte de realização de encomendas A Tabela "Encomendas" encontra-se ligada a duas tabelas "Produtos" e "Clientes", ou seja na tabela "Encomendas" em si so irão aparecer os ID's dessas duas tabelas em campos diferentes. O meu problema é que quando eu coloco isto num combobox aparecem os Id's das outras tabelas normalmente, mas eu queria era que aparecessem os nomes dos clientes e os nomes dos produtos associados ao ID e não o id em si. (E sim as tabelas encontra-se relacionadas)
nelsonr Posted June 21, 2013 at 01:46 PM Report #514231 Posted June 21, 2013 at 01:46 PM Podes mostrar o código que estás a usar para preencher a combobox?
Luisveiga18 Posted June 21, 2013 at 02:35 PM Author Report #514239 Posted June 21, 2013 at 02:35 PM (edited) Podes mostrar o código que estás a usar para preencher a combobox? Sim sim, isto é o que esta a preenche-las: Dim reader As OleDbDataReader cmd = New OleDbCommand("Select ID_Forn from Fornecedores", ConnectionString) reader = cmd.ExecuteReader While reader.Read FornCB1.Items.Add(reader.Item("ID_Forn")) FornCB2.Items.Add(reader.Item("ID_Forn")) End While ConnectionString.Close() ConnectionString2.Open() Dim reader2 As OleDbDataReader cmd2 = New OleDbCommand("Select ID_Prod_Peso from Produto_Peso", ConnectionString2) reader2 = cmd2.ExecuteReader While reader2.Read PesoCB.Items.Add(reader2.Item("ID_Prod_Peso")) End While ConnectionString2.Close() ConnectionString3.Open() Dim reader3 As OleDbDataReader cmd3 = New OleDbCommand("Select ID_Prod_Uni from Produto_Uni", ConnectionString3) reader3 = cmd3.ExecuteReader While reader3.Read UniCB.Items.Add(reader3.Item("ID_Prod_Uni")) End While ConnectionString3.Close() Edited June 21, 2013 at 02:40 PM by thoga31 GeSHi
nelsonr Posted June 21, 2013 at 02:59 PM Report #514251 Posted June 21, 2013 at 02:59 PM (edited) No primeiro post falas numas tabelas, mas o exemplo usa outras. De qualquer maneira, vais ter de usar o JOIN no select para juntar 2 tabelas. Por exemplo, se tiveres a tabela Clientes com o campo ID e Nome, e tiveres a tabela Encomendas com o campo ID_Cliente, podes usar o seguinte query para retornar as encomendas juntamente com o nome do cliente a que se refere SELECT Encomendas.ID_Cliente, Clientes.Nome FROM Encomendas INNER JOIN Clientes ON Encomendas.ID_Cliente = Clientes.ID Uma forma de facilmente fazeres os queries é usar o Query Design do Access Edited June 21, 2013 at 03:00 PM by nelsonr
Luisveiga18 Posted June 21, 2013 at 10:36 PM Author Report #514397 Posted June 21, 2013 at 10:36 PM (edited) No primeiro post falas numas tabelas, mas o exemplo usa outras. De qualquer maneira, vais ter de usar o JOIN no select para juntar 2 tabelas. Por exemplo, se tiveres a tabela Clientes com o campo ID e Nome, e tiveres a tabela Encomendas com o campo ID_Cliente, podes usar o seguinte query para retornar as encomendas juntamente com o nome do cliente a que se refere SELECT Encomendas.ID_Cliente, Clientes.Nome FROM Encomendas INNER JOIN Clientes ON Encomendas.ID_Cliente = Clientes.ID Uma forma de facilmente fazeres os queries é usar o Query Design do Access Bom adaptado o codigo deu isto: ConnectionString.Open() Dim reader As OleDbDataReader cmd = New OleDbCommand("SELECT Encomenda_Casa.ID_Fornecedor, Fornecedores.Nome FROM Encomenda_Casa INNER JOIN Fornecedores ON Encomenda_Casa.ID_Fornecedor = Fornecedores.ID_Forn", ConnectionString) reader = cmd.ExecuteReader While reader.Read FornCB1.Items.Add(reader.Item("Fornecedores.ID_Forn")) FornCB2.Items.Add(reader.Item("Fornecedores.ID_Forn")) End While ConnectionString.Close() (Este codigo encontra-se no Form Load) Mas não me esta a deixar abrir o form. Edited June 21, 2013 at 10:36 PM by Luisveiga18
nelsonr Posted June 21, 2013 at 10:41 PM Report #514399 Posted June 21, 2013 at 10:41 PM (edited) No select retorna 2 campos, ID_Fornecedor e Nome. No reader estás a ler Fornecedores.ID_Forn. Não coloques o nome da tabela no reader e poe o nome de acordo com o resultado do SELECT. E não sei se isso do item funciona (nao consigo experimentar). Senao podes ler com algo assim: FornCB1.Items.Add(reader.GetInt32(reader.GetOrdinal("ID_Fornecedor"))) Edited June 21, 2013 at 10:42 PM by nelsonr
Luisveiga18 Posted June 21, 2013 at 10:50 PM Author Report #514404 Posted June 21, 2013 at 10:50 PM No select retorna 2 campos, ID_Fornecedor e Nome. No reader estás a ler Fornecedores.ID_Forn. Não coloques o nome da tabela no reader e poe o nome de acordo com o resultado do SELECT. E não sei se isso do item funciona (nao consigo experimentar). Senao podes ler com algo assim: FornCB1.Items.Add(reader.GetInt32(reader.GetOrdinal("ID_Fornecedor"))) Se fizer assim: ConnectionString.Open() Dim reader As OleDbDataReader cmd = New OleDbCommand("SELECT Encomenda_Casa.ID_Fornecedor, Fornecedores.Nome FROM Encomenda_Casa INNER JOIN Fornecedores ON Encomenda_Casa.ID_Fornecedor = Fornecedores.ID_Forn", ConnectionString) reader = cmd.ExecuteReader While reader.Read FornCB1.Items.Add(reader.GetInt32(reader.GetOrdinal("ID_Fornecedor")) Apenas vão aparecer os ID do campo ID_Fornecedor da Tabela Encomenda_Casa (Ou seja os Id's já inseridos no campo) e não os id's da tabela fornecedores + nomes.
nelsonr Posted June 22, 2013 at 10:36 AM Report #514426 Posted June 22, 2013 at 10:36 AM Sim, se quiseres o id e o nome podes usar algo como: FornCB1.Items.Add( String.Format("{0} - {1}", reader.GetInt32(reader.GetOrdinal("ID_Fornecedor")), reader.GetString(reader.GetOrdinal("Nome")) )) Mas esse exemplo está a ir buscar os fornecedores que existem na tabela de encomeda_casa. O que é que pretendes exactamente?
Luisveiga18 Posted June 22, 2013 at 01:09 PM Author Report #514440 Posted June 22, 2013 at 01:09 PM Sim, se quiseres o id e o nome podes usar algo como: FornCB1.Items.Add( String.Format("{0} - {1}", reader.GetInt32(reader.GetOrdinal("ID_Fornecedor")), reader.GetString(reader.GetOrdinal("Nome")) )) Mas esse exemplo está a ir buscar os fornecedores que existem na tabela de encomeda_casa. O que é que pretendes exactamente? Bom explicado no inicio. Na Tabela Encomeda_Casa eu tenho um campo ID_Fornecedor que esta ligado (por relações) ao campo ID_Forn da Tabela Forncedores. O que eu queria é que ele fosse buscar o nome associado a cada id à tabela Fornecedores para assim na CoBoBox em vez de aparecerem os Id's (como estao a aparecer agora) aparecerem os nomes. Ou seja eu quero "mascarar" o id para aparecerem nomes em vez de numeros.
nelsonr Posted June 22, 2013 at 01:58 PM Report #514452 Posted June 22, 2013 at 01:58 PM (edited) Mas se queres ter na combo apenas os fornecedores (mostrando o nome), para que precisas da tabela encomenda_casa? Basta fazeres um select do tipo: cmd = New OleDbCommand("SELECT ID_Forn, Nome FROM Fornecedores", ConnectionString) E ao adicionares à lista, adicionas só o nome FornCB1.Items.Add(reader.GetString(reader.GetOrdinal("Nome")) ) Depois o mais provavel é precisares de guardar o ID algures ai para conseguires saber qual o fornecedor selecionado Edited June 22, 2013 at 01:59 PM by nelsonr
Luisveiga18 Posted June 22, 2013 at 02:13 PM Author Report #514454 Posted June 22, 2013 at 02:13 PM Mas se queres ter na combo apenas os fornecedores (mostrando o nome), para que precisas da tabela encomenda_casa? Basta fazeres um select do tipo: cmd = New OleDbCommand("SELECT ID_Forn, Nome FROM Fornecedores", ConnectionString) E ao adicionares à lista, adicionas só o nome FornCB1.Items.Add(reader.GetString(reader.GetOrdinal("Nome")) ) Depois o mais provavel é precisares de guardar o ID algures ai para conseguires saber qual o fornecedor selecionado Mas as encomendas vão ficar guardadas na Tabela Encomenda_Casa, e nesse tabela apenas existe o ID_Fornecedor (Que como já disse esta ligado ao ID_Forn da Tabela Fornecedores)
nelsonr Posted June 22, 2013 at 02:37 PM Report #514459 Posted June 22, 2013 at 02:37 PM Vai por partes... Queres ter na combo apenas a lista dos fornecedores, correcto? Ai não precisas da tabela de encomendas. Depois queres em outro sitio ir buscar as encomendas do fornecedor selecionado, é isso?
Luisveiga18 Posted June 22, 2013 at 02:45 PM Author Report #514461 Posted June 22, 2013 at 02:45 PM (edited) Vai por partes... Queres ter na combo apenas a lista dos fornecedores, correcto? Ai não precisas da tabela de encomendas. Depois queres em outro sitio ir buscar as encomendas do fornecedor selecionado, é isso? Depois noutro sitio em quero fazer encomendas a partir dessa lista de fornecedores, essas encomendas serão inseridas na tabela encomendas_casa Edited June 22, 2013 at 02:49 PM by Luisveiga18
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now