jafm Posted June 11, 2012 at 05:26 PM Report Share #462027 Posted June 11, 2012 at 05:26 PM Olá Pessoal, Estou com o seguinte problema, Comecei por importar um ficheiro txt para uma datagrid... até aqui tudo bem, já consigo por na minha datagrid todo o ficheiro txt formatado... Agora não estou conseguir é por o datagrid a guardar a informação na base de dados sqlserver... Alguém me pode dar alguma sugestão de como possa resolver o meu problema? Link to comment Share on other sites More sharing options...
Caça Posted June 12, 2012 at 08:13 AM Report Share #462101 Posted June 12, 2012 at 08:13 AM Já tens algum código? Pedro Martins Não respondo a duvidas por PM Link to comment Share on other sites More sharing options...
jafm Posted June 12, 2012 at 10:54 AM Author Report Share #462135 Posted June 12, 2012 at 10:54 AM não não tenho código nenhum... experimentei um insert mas não resultou, podiam dar alguma sugestão de como contornar o problema? Link to comment Share on other sites More sharing options...
Caça Posted June 12, 2012 at 11:16 AM Report Share #462141 Posted June 12, 2012 at 11:16 AM Mostra o código que tens. Pedro Martins Não respondo a duvidas por PM Link to comment Share on other sites More sharing options...
jafm Posted June 12, 2012 at 11:49 AM Author Report Share #462155 Posted June 12, 2012 at 11:49 AM (edited) O código que possuo é o seguinte, em que este me dá o seguinte erro: "erro ao ler arquivo texto. objbject reference not set to an instance of an object" o código é: Imports System.IO Imports System.Data.SqlClient Public Class Form1 Dim da As SqlDataAdapter Dim connBD As SqlConnection Dim ds As DataSet Dim dt As New DataTable Dim row As DataRow Dim totalcaracters As Integer Dim CodProdAcabado, Descricao, PrecoVenda As String Dim conta As Integer Dim linhaTexto As String = "" 'Conecção à base de dados GiTeste Dim sqlConnector As New SqlConnection Private Sub btnPreencheListView_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPreencheListView.Click 'verifica se o caminho e nome do arquivo estão ok If txtArquivoOrigem.Text = String.Empty Or Not txtArquivoOrigem.Text.Contains(".txt") Then MsgBox("Informe o caminho do arquivo texto origem.") Return End If DataGridView1.ColumnHeadersVisible = True 'define a estrutura da DataTable que vai receber os dados dt.Columns.Add("COD. PRODUTO", Type.GetType("System.String")) dt.Columns.Add("DESCRIÇÃO", Type.GetType("System.String")) dt.Columns.Add("PREÇO DE VENDA", Type.GetType("System.String")) Try 'declara um streamReader, passa o caminho e nome do arquivo texto Dim SR As New StreamReader(txtArquivoOrigem.Text) 'percorre o arquivo Do While SR.Peek() <> -1 linhaTexto = SR.ReadLine() linhaTexto.TrimStart() linhaTexto.TrimEnd() linhaTexto.Trim() totalcaracters = linhaTexto.Length 'particiona a linha lida em campos para serem adicionados à datagrid CodProdAcabado = (Mid(linhaTexto, 1, 10)) Descricao = (Mid(linhaTexto, 11, 35)) PrecoVenda = (Mid(linhaTexto, 46, 16)) conta = 2 row = dt.NewRow Do While conta <> -1 dt.Rows.Add(CodProdAcabado, Descricao, PrecoVenda) conta -= 1 Loop Loop 'atribui ao datagridview o objeto datatable criado DataGridView1.DataSource = dt SR.Close() 'AQUI ESTÁ A MINHA DUVIDA Dim sqlInclui As String Dim sqlComando As SqlCommand sqlInclui = "INSERT INTO teste (Codproduto, Descricao,PrecoVenda)VALUES ('" & CodProdAcabado & "','" & Descricao & "','" & PrecoVenda & "')" sqlComando = New SqlCommand(sqlInclui, sqlConnector) da.InsertCommand = sqlComando Catch ex As Exception MsgBox("Erro ao ler o arquivo texto." & ex.Message) End Try End Sub Private Sub btnProcurarArquivo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnProcurarArquivo.Click Dim AbrirComo As OpenFileDialog = New OpenFileDialog() Dim caminho As DialogResult Dim Arquivo As String AbrirComo.Title = "Abrir como" AbrirComo.FileName = "Nome Arquivo" AbrirComo.Filter = "Arquivos Textos (*.txt)|*.txt" caminho = AbrirComo.ShowDialog Arquivo = AbrirComo.FileName If Arquivo = Nothing Then MessageBox.Show("Arquivo Invalido", "Salvar Como", MessageBoxButtons.OK) Else txtArquivoOrigem.Text = Arquivo End If End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load sqlConnector.ConnectionString = "Server=NOME\SQLEXPRESS;Database=GiTeste;User ID=++++;Password=+++++" Try sqlConnector.Open() Catch ex As Exception MessageBox.Show(ex.Message, "Ligação Falhada") End Try If sqlConnector.State = 1 Then MessageBox.Show("Ligação à BD GiTeste efectuada com Sucesso") PictureBox1.Visible = True End If End Sub Edited June 12, 2012 at 12:36 PM by Caça Link to comment Share on other sites More sharing options...
Caça Posted June 12, 2012 at 12:39 PM Report Share #462169 Posted June 12, 2012 at 12:39 PM Troca esta linha da.InsertCommand = sqlComando por esta sqlComando.ExecuteNonQuery Pedro Martins Não respondo a duvidas por PM Link to comment Share on other sites More sharing options...
jafm Posted June 12, 2012 at 12:54 PM Author Report Share #462176 Posted June 12, 2012 at 12:54 PM Obrigadão... já tá a passar para a base de dados... Link to comment Share on other sites More sharing options...
jafm Posted June 15, 2012 at 11:16 AM Author Report Share #463024 Posted June 15, 2012 at 11:16 AM Abri novamente este novo o tópico, pois surgiu umas alterações, pois existiram mais campos com diferentes cumprimentos... E pode voltar a surgir novos campos, e ter que mudar sempre o cumprimento torna-se muito pouco vantajoso, para o código, pois está sujeito a erros de código... Andei a pesquisar sobre o "textfiel pacer"... Alguém me sabe ajudar de como se simplifica o processo de cumprimentos das tabelas, e que torne o código torne mais prático, para alterações dos cumprimentos... Link to comment Share on other sites More sharing options...
Caça Posted June 15, 2012 at 11:19 AM Report Share #463026 Posted June 15, 2012 at 11:19 AM Para ser mais fácil o ficheiro deveria ser um csv, se for um txt por posições o melhor é criar um ficheiro de configuração. Pedro Martins Não respondo a duvidas por PM Link to comment Share on other sites More sharing options...
jafm Posted June 15, 2012 at 11:27 AM Author Report Share #463035 Posted June 15, 2012 at 11:27 AM (edited) Pois, o ficheiro tem mesmo ser em txt... E como seria o ficheiro de configuração.... Edited June 15, 2012 at 11:30 AM by jafm Link to comment Share on other sites More sharing options...
Caça Posted June 15, 2012 at 12:24 PM Report Share #463056 Posted June 15, 2012 at 12:24 PM Teria de ter o nome do campo, posição inicial, posição final Pedro Martins Não respondo a duvidas por PM Link to comment Share on other sites More sharing options...
jafm Posted June 15, 2012 at 05:05 PM Author Report Share #463146 Posted June 15, 2012 at 05:05 PM (edited) Fiz o seguinte código onde usei o TextFielParser... Só que agora fiquei com o mesmo problema que me fez abrir este tópico, nao consigo guardar na base de dados.. na datagrid ja aparece tudo nos cumprimentos correctos, mas nao grava a informaçao na BD, Será que me podem ajudar? Private Sub btnImportar_Click(sender As System.Object, e As System.EventArgs) Handles btnImportar.Click 'Conecção à base de dados GiTeste sqlConnector.ConnectionString = "Server=local\SQLEXPRESS;Database=GiTeste;User ID=ers;Password=ers" Try sqlConnector.Open() Catch ex As Exception MessageBox.Show(ex.Message, "Ligação Falhada") End Try If sqlConnector.State = 1 Then MessageBox.Show("Ligação à BD GiTeste efectuada com Sucesso") ' Label1.Visible = True End If Using leitor As New TextFieldParser(txtArquivo.Text) 'Informamos que será importado com Delimitação leitor.TextFieldType = FieldType.FixedWidth 'Informamos o Delimitador leitor.SetFieldWidths(10, 35, 16) Dim linhaAtual As String() While Not leitor.EndOfData Try linhaAtual = leitor.ReadFields() dgvDados.Rows.Add(linhaAtual) 'insere os dados no SQL Server sqlInclui = "IF NOT EXISTS(SELECT CodProdAcabado FROM Artigos WHERE CodProdAcabado = '" & CodProdAcabado & "' ) BEGIN INSERT INTO Artigos (CodProdAcabado, Descricao, PrecoVenda) VALUES ('" & CodProdAcabado & "','" & Descricao & "', '" & PrecoVenda & "')END" sqlComando = New SqlCommand(sqlInclui, sqlConnector) sqlComando.ExecuteNonQuery() Catch ex As MalformedLineException 'Ignoramos a linha atual caso não seja válida MsgBox("Linha: " & ex.Message & " não é válida e será ignorada.") End Try End While MsgBox("Arquivo Importado com Sucesso!") End Using End Sub Edited June 18, 2012 at 10:35 AM by Caça Link to comment Share on other sites More sharing options...
jafm Posted June 17, 2012 at 08:57 AM Author Report Share #463383 Posted June 17, 2012 at 08:57 AM Ajuda precisa-se... Link to comment Share on other sites More sharing options...
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