D3POD 1 Report post Posted April 22, 2012 Boas a todos, tenho um projecto novo para a empresa onde trabalho que consiste em criar um programa para registo e controlo das instalações do softwares de gestão. Esta aplicação que pretendo será utilizada para adicionar novos softwares e deverá ter alguns campos de preenchimento para controlo dos clientes. Da aplicação será necessário ter botões para Adicionar, Alterar e Eliminar... Opções da Aplicação: Acerca do Cliente: Nome / Empresa Morada Localidade/Zona Provincia Conctato: Email: Nome da pessoa de contacto preferencial: Contacto: Acerca do Software: Data Licença: Licença: Código de Confirmação: Data de Instalação: Tipo de Programa: Versão: Data da Ultima Intervenção: Data da Ultima Actualização: Numero de Postos de Trabalho: Estes são os campos que queria que estivessem lá, bem como um espaço no final para Observações... Gostaria de obter a vossa ajuda para saber o que vou precisar e por onde começar... Gostava também de saber se será possivel criar algum tipo de anexos, ou seja, colocar as folhas que fazemos ao ir aos clientes como anexo para termos sempre comprovativos... Agradeço toda a vossa ajuda Cumprimentos Share this post Link to post Share on other sites
bioshock 176 Report post Posted April 22, 2012 Acerca do Cliente: Nome / Empresa Morada Localidade/Zona Provincia Conctato: Email: Nome da pessoa de contacto preferencial: Contacto: Acerca do Software: Data Licença: Licença: Código de Confirmação: Data de Instalação: Tipo de Programa: Versão: Data da Ultima Intervenção: Data da Ultima Actualização: Numero de Postos de Trabalho: Estes são os campos que queria que estivessem lá, bem como um espaço no final para Observações... Queres e vão estar. Primeiro lê este artigo: Princípios das Bases de dados. Depois escolhes uma base de dados à medida da aplicação. E por fim começas a experimentar código: Access (Seleccionar, Inserir, Actualizar, Eliminar) Nota: o último link está direccionado para base de dados Access mas funciona para qualquer uma, desde que alteres os devidos parâmetros. Share this post Link to post Share on other sites
D3POD 1 Report post Posted April 22, 2012 Obrigado Já estou a tratar de ler tudo e ver se percebo como aplicar ao que pretendo... Tenho uma dúvida... <b>Dim command As New OleDbCommand(query, ConnectionString) command.Parameters.Add("@Nome", OleDbType.VarChar).Value = NomeTextbox.Text command.Parameters.Add("@Empresa", OleDbType.VarChar).Value = EmpresaTextbox.Text </b> Aqui terei de adicionar mais linhas para todos os que quero adicionar, por exemplo, para a morada e telefone... certo? E terei que adicionar o código do segundo tutorial nos respectivos botões certo? Isto só para me organizar em termos de código Share this post Link to post Share on other sites
acao 21 Report post Posted April 22, 2012 Queres e vão estar. Primeiro lê este artigo: Princípios das Bases de dados. Depois escolhes uma base de dados à medida da aplicação. E por fim começas a experimentar código: Access (Seleccionar, Inserir, Actualizar, Eliminar) Nota: o último link está direccionado para base de dados Access mas funciona para qualquer uma, desde que alteres os devidos parâmetros. parabéns bioshock, bons artigos, tem tudo o necessário. ainda não tinha lido. cumps acao Share this post Link to post Share on other sites
acao 21 Report post Posted April 22, 2012 afirmativo, para cada campo sua linha, e botões tambem. cumps acao Share this post Link to post Share on other sites
D3POD 1 Report post Posted April 22, 2012 Boas acao, obrigado pela resposta Hoje estou só a preparar tudo, tutoriais e a estudar como fazer as coisas, para com calma começar a fazer Sou muito iniciado nisto e quero aprender portanto nada melhor que primeiro estudar todas as hipoteses. Digam-me uma coisa, eu insiro um novo cliente, mas como o posso ir buscar mais tarde? Com o SELECT? a minha ideia era, ou criar uma lista lateral com todos e depois fazer scroll para encontrar o que pretendo... ou então um search... Não sei é que ferramenta usar e como colocar em prática esta parte... Cumprimentos Já agora um offtopic, este fórum não tem suporte para tapatalk? Share this post Link to post Share on other sites
acao 21 Report post Posted April 22, 2012 Boas acao, obrigado pela resposta Hoje estou só a preparar tudo, tutoriais e a estudar como fazer as coisas, para com calma começar a fazer Sou muito iniciado nisto e quero aprender portanto nada melhor que primeiro estudar todas as hipoteses. correcto mas não se preocupe está em boas maos o membro bioshock é excelente e disse «Queres e vão estar.» portanto estejá avontade é só fazer pela vida, e a comunidade é grande não se preocupe mesmo. Digam-me uma coisa, eu insiro um novo cliente, mas como o posso ir buscar mais tarde? Com o SELECT? a minha ideia era, ou criar uma lista lateral com todos e depois fazer scroll para encontrar o que pretendo... ou então um search... Não sei é que ferramenta usar e como colocar em prática esta parte... afirmativo é com o select. passe pelo link abaixo e pesquise também por «sql + consultas» que encontrará muitos exemplos. http://www.macoratti.net/vb_sql2.htm http://www.devmedia.com.br/tutorial-sql-seu-guia-pratico-para-execucao-de-consultas-parte-final/3291 cumps acao Share this post Link to post Share on other sites
D3POD 1 Report post Posted April 23, 2012 Boas estou aqui com uma dúvida... Ainda não comecei a colocar código, estou ainda na parte de criar o layout e tentar perceber o código... O que me está a por confusão é a parte de procurar um registo já criado, a maneira de depois o visualizar já percebi pelo código que posso usar um datagridview mas a dúvida é como procurar... Será que posso fazer assim? Dim ConnectionString As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Application.StartupPath & "\BD.mdb")Dim query As String = "SELECT * FROM Clientes WHERE ID = @IDCliente" Dim command As New OleDbCommand(query, ConnectionString) ' Seleccionar os dados APENAS do cliente 3 command.Parameters.Add("@NomeCliente", OleDbType.Integer).Value = SearchCliente.textbox Dim DataAdapter As New OleDbDataAdapter(command) Dim MyData As New DataSet DataAdapter.Fill(MyData, "Clientes") Me.DataGridView1.DataSource = MyData.Tables("Clientes") ' Neste caso utilizei uma datagridview para visualizar os dados Penso que assim ao colocar por exemplo João, Lda ele vai-me abrir no datagridview os dados do João, Lda certo? Ou já estou a inventar de mais...? Share this post Link to post Share on other sites
acao 21 Report post Posted April 23, 2012 boas não, pela simples razao de em: Dim query As String = "SELECT * FROM Clientes WHERE ID = @IDCliente" deverias ter: Dim query As String = "SELECT * FROM Clientes WHERE nomecliente = @nomecliente" command.Parameters.Add("@NomeCliente", OleDbType.VarChar).Value = NomedaTextbox.Text ou Dim query As String = "SELECT * FROM Clientes WHERE nomecliente = textbox.text" e eliminar command.Parameters.Add("@NomeCliente", OleDbType.VarChar).Value = NomedaTextbox.Text 'varchar é para (string). mas o mais usado é usar, Dim query As String = "SELECT * FROM Clientes WHERE nomecliente = @nomecliente" ps: a textbox podia ser substituida por por uma variavel, numerario etc. cumps acao Share this post Link to post Share on other sites
D3POD 1 Report post Posted April 23, 2012 ahhh ok, tinha-me esquecido de mudar também aí o @IDcliente Mudei só a baixo porque era onde tinha a dúvida... e também reparei que me corrigiste quanto ao nomecliente.textbox Vou analisar essa parte da variável... mas a diferença maior será apenas na interpretação do código certo? A nivel de funcionalidades será o mesmo? Vamos lá ver se consigo projectar isto na aplicação Share this post Link to post Share on other sites
acao 21 Report post Posted April 23, 2012 boas não te equeças que a base dados tem que estar na pasta «bin/debug, mas eu uso o disco D/ para estar fora do sistema operativo para se for necessário formatar não correr o risco de eliminar a base de dados. uso assim: Dim ConnectionString As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\BaseDados\db.accdb;Jet OLEDB:Database Password= " & vCodDB & ";") talvez fosse melhor usar db «accdb» em vez de mdb, é muito mais facil controlar a password.(acces 2007 ou superior). cumps acao Share this post Link to post Share on other sites
D3POD 1 Report post Posted April 24, 2012 Obrigado Por acaso tenho aqui um tutorial onde menciona isso da base de dados Vou começar hoje a pôr código Vamos lá ver Share this post Link to post Share on other sites
D3POD 1 Report post Posted April 24, 2012 Boas, começaram então os problemas No inicio com a base de dados dava logo um erro ao entrar em modo debug, mas lá resolvi... Agora tenho aqui um problema que me está a por doido, referente a este código: Dim ConnectionString As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Application.StartupPath & "\bd.accdb")Dim query As String = "INSERT INTO Clientes([Nome]) VALUES (@Nome)" Dim command As New OleDbCommand(query, ConnectionString) command.Parameters.Add("@Nome", OleDbType.VarChar).Value = NomeTextbox.Text ConnectionString.Open() O problema está que não cria nada na base de dados :S Agora as minhas dúvidas: Eu tenho a base de dados dentro da pasta do projecto \bin\debug será que está aqui algum problema? Também não percebo esta parte do código: Dim query As String = "INSERT INTO Clientes([Nome]) VALUES (@Nome)" Mais propriamente a parte do INSERT INTO Clientes... este clientes refere-se ao quê? Será que falta código ou já mexi de mais? Agradeço a vossa ajuda Cumprimentos Share this post Link to post Share on other sites
acao 21 Report post Posted April 24, 2012 boas compara com o meu post anterior. Dim ConnectionString As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Application.StartupPath & "\bd.accdb") olha para o providor, está a colocar referente a db.mdb cumps acao Share this post Link to post Share on other sites
D3POD 1 Report post Posted April 25, 2012 Boas, eu é que me enganei... eu tenho assim: Dim ConnectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & Application.StartupPath & "\BD.accdb" e não introduz nada :S Desculpem a demora mas hoje foi um dia complicado... Share this post Link to post Share on other sites
acao 21 Report post Posted April 25, 2012 Boas, eu é que me enganei... eu tenho assim: e não introduz nada :S Desculpem a demora mas hoje foi um dia complicado... pois mas está mal não viste bem o que te escrevi nem o link que o membro bioshock te sugeriu. segue um exemplo para tu veres http://dl.dropbox.com/u/65238129/Portugal_a_programar/testeforum.rar Share this post Link to post Share on other sites
D3POD 1 Report post Posted April 26, 2012 Obrigado acao Diz-me uma coisa no caso de na textbox colocar texto não posso colocar o "x" como integer certo? Ou seja também o if x < 1também não serve neste caso, ou estou a fazer confusão? EDIT1: Humm agora dá-me erro em: Dim x As Integer = command.ExecuteNonQuery OledDbException was unhandled Não tenho nada feito, só se for do lado da base de dados... Maneira de resolver... peguei na base de dados e alterei, a que vinha no .rar Pelos vistos o problema estava na base de dados pois agora funciona 5* Muito obrigado Share this post Link to post Share on other sites
acao 21 Report post Posted April 26, 2012 boas pois foi feita em access2010 não converti poderia ser isso. cumps acao Share this post Link to post Share on other sites
D3POD 1 Report post Posted April 26, 2012 não, a tua é que funciona ou funcionava Porque é que quando faço o debugging e escrevo nos campos ele dá-me erro no Dim x As Integer = command.ExecuteNonQuery() Estava a funcionar bem... deixou de funcionar depois de começar a adicionar mais campos na base de dados e no código do botão xS Share this post Link to post Share on other sites
acao 21 Report post Posted April 27, 2012 boas deve ter a ver com a query (select) ou parametros, para cada campo seu parametro. 'para carecteres (texto) ->Varchar command.Parameters.Add("@NomeCliente", OleDbType.VarChar).Value = NomedaTextbox.Text 'para numerario ->Integer command.Parameters.Add("@NumeroCliente", OleDbType.Integer).Value = NomedaTextbox.Text cumps acao Share this post Link to post Share on other sites
D3POD 1 Report post Posted April 28, 2012 Boas este é o erro que me dá... estou farto de tentar perceber onde está o problema... :S e nada... Espero que alguém me consiga ajudar Cumprimentos Share this post Link to post Share on other sites
acao 21 Report post Posted April 28, 2012 boas estás a colocar texto num campo numerico. coloca o codigo todo para verificar. para colocar o cod usa a combo inserir codigo. é so copiar e colar. cumps acao Share this post Link to post Share on other sites
D3POD 1 Report post Posted April 29, 2012 Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click Dim ConnectionString As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\bd.accdb") Dim query As String = "INSERT INTO clientes([nome], [morada], [zona], [provincia], [cont1], [cont2], [cont3], [email1], [email2], [nome1], [cont4], [cont5], [dlicenca], [licenca], [chaveact], [dinstalacao], [tprograma], [versao], [dintervencao], [dactualizacao], [npostos], [observacoes]) VALUES (@nome, @morada, @zona, @provincia, @contacto1, @contacto2, @contacto3, @email1, @email2, @nome1, @contacto4, @contacto5, @dlicenca, @licenca, @chaveact, @dinstalaçao, @tprograma, @versao, @dintervencao, @dactualizacao, @npostos, @observacoes)" Dim command As New OleDbCommand(query, ConnectionString) command.Parameters.Add("@nome", OleDbType.VarChar).Value = TextBox1.Text command.Parameters.Add("@morada", OleDbType.VarChar).Value = TextBox2.Text command.Parameters.Add("@zona", OleDbType.VarChar).Value = ComboBox5.Text command.Parameters.Add("@provincia", OleDbType.VarChar).Value = ComboBox4.Text command.Parameters.Add("@contacto1", OleDbType.Integer).Value = TextBox3.Text command.Parameters.Add("@contacto2", OleDbType.Integer).Value = TextBox4.Text command.Parameters.Add("@contacto3", OleDbType.Integer).Value = TextBox5.Text command.Parameters.Add("@email1", OleDbType.VarChar).Value = TextBox6.Text command.Parameters.Add("@email2", OleDbType.VarChar).Value = TextBox7.Text ConnectionString.Open() Dim x As Integer = command.ExecuteNonQuery() If x < 1 Then MessageBox.Show("Erro ao inserir", My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error) Else MessageBox.Show("Registo inserido com sucesso!", My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Information) End If ConnectionString.Close() command = Nothing 'limpa o valor da textbox1 TextBox1.Text = "" End Sub End Class Usei a aplicação que me mandas-te e fui lhe acrescentando mais campos... e só obtive o erro novamente quando não preenchi uma das textbox's... Cumprimentos, D3POD Share this post Link to post Share on other sites
acao 21 Report post Posted April 29, 2012 acrescente o cod conforme eu coloquei. ps: tem indicaçao acrescenta. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click Dim ConnectionString As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\bd.accdb") Dim query As String = "INSERT INTO clientes([nome], [morada], [zona], [provincia], [cont1], [cont2], [cont3], [email1], [email2], [nome1], [cont4], [cont5], [dlicenca], [licenca], [chaveact], [dinstalacao], [tprograma], [versao], [dintervencao], [dactualizacao], [npostos], [observacoes]) VALUES (@nome, @morada, @zona, @provincia, @contacto1, @contacto2, @contacto3, @email1, @email2, @nome1, @contacto4, @contacto5, @dlicenca, @licenca, @chaveact, @dinstalaçao, @tprograma, @versao, @dintervencao, @dactualizacao, @npostos, @observacoes)" Dim command As New OleDbCommand(query, ConnectionString) command.Parameters.Add("@nome", OleDbType.VarChar).Value = TextBox1.Text command.Parameters.Add("@morada", OleDbType.VarChar).Value = TextBox2.Text command.Parameters.Add("@zona", OleDbType.VarChar).Value = ComboBox5.Text command.Parameters.Add("@provincia", OleDbType.VarChar).Value = ComboBox4.Text command.Parameters.Add("@contacto1", OleDbType.Integer).Value = TextBox3.Text command.Parameters.Add("@contacto2", OleDbType.Integer).Value = TextBox4.Text command.Parameters.Add("@contacto3", OleDbType.Integer).Value = TextBox5.Text command.Parameters.Add("@email1", OleDbType.VarChar).Value = TextBox6.Text command.Parameters.Add("@email2", OleDbType.VarChar).Value = TextBox7.Text ConnectionString.Open() Dim x As Integer = command.ExecuteNonQuery() If x < 1 Then MessageBox.Show("Erro ao inserir", My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error) Else MessageBox.Show("Registo inserido com sucesso!", My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Information) End If ConnectionString.Close() command = Nothing 'acrescenta ConnectionString.Nothing 'limpa o valor da textbox1 TextBox1.Text = "" 'acrescenta TextBox2.Text = "" TextBox3.Text = "" TextBox4.Text = "" ComboBox4.SelectedIndex = -1 ComboBox5.SelectedIndex = -1 TextBox5.Text = "" TextBox6.Text = "" TextBox7.Text = "" End Sub End Class Usei a aplicação que me mandas-te e fui lhe acrescentando mais campos... e só obtive o erro novamente quando não preenchi uma das textbox's... Cumprimentos, D3POD se não der certo coloque a tabela em formato access para testar e ver. cumps acao Share this post Link to post Share on other sites
D3POD 1 Report post Posted April 29, 2012 Error 1 'nothing' is not a member of 'System.Data.OleDb.OleDbConnection'. C:\Users\Diogo\documents\visual studio 2010\Projects\Registo Clientes\Registo Clientes\Form1.vb 54 9 Registo Clientes deu me este erro... mas porque será que com o programa que me enviou funciona bem? já experimentei reproduzir o erro na aplicação que me enviou e só o consigo reproduzir se por exemplo tiver um command adicionado e na textbox que lhe definir não colocar nada... de resto funciona sempre bem :S Share this post Link to post Share on other sites