Seabra 0 Report post Posted July 6, 2015 Boas, O código abaixo dá o erro: A first chance exception of type 'System.Data.OleDb.OleDbException' occurred in System.Data.dll Additional information: System resource exceeded. Este erro aparece na linha "cmd1.ExecuteReader()" e só depois de percorrer o ficheiro e já no ciclo Loop ao ler a linha 427 ou na linha 428 ou na linha 426 do ficheiro de texto que está a ler, é que dá o erro. Ou seja funciona tudo até 427 volta do loop e não é sempre na mesma posição do loop. Já reduzi i ficheiro de texto para verificar se havia problema com as linhas de texto, mas está tudo bem. Já me fartei de dar voltas à cabeça e não decubro Alguém me pode ajudar? Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click Dim ConStr As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " & My.Settings.Base_Dados & " ;Persist Security Info=False;" Dim Conn1 = New OleDb.OleDbConnection(ConStr) Dim file As String = "c:\18.txt" Dim Linha As String Dim Array_Dados() As String Dim Data_Txt As String Dim Data As Date Dim cmd As New OleDb.OleDbCommand Dim cmd1 As New OleDb.OleDbCommand Conn1.Open() If System.IO.File.Exists(file) = True Then Dim objReader As New System.IO.StreamReader(file) Do While objReader.Peek() <> -1 Linha = objReader.ReadLine() & vbNewLine Array_Dados = Linha.Split(";") Data_Txt = DateTime.Parse(Array_Dados(0) & " " & Array_Dados(1)) Data = Convert.ToDateTime(Data_Txt) cmd1 = Conn1.CreateCommand cmd1.CommandText = "SELECT DataHora FROM Registos WHERE DataHora =@Campo1" cmd1.Parameters.AddWithValue("@Campo1", SqlDbType.DateTime).Value = Data cmd1.ExecuteReader() Application.DoEvents() Loop End If End Sub End Class cumprimentos Share this post Link to post Share on other sites
FreiNando 22 Report post Posted July 6, 2015 (edited) O erro deve acontecer quando a data não é valida. O Access não aceita datas anteriores a 01-01-0100. Qual é o objectivo do teu procedimento? DateTime.Parse() faz quase o mesmo que Convert.ToDateTime(), e já devolve um valor DateTime, não precisa converter novamente. SELECT Devolve um resultado que pode ser lido com um OleDbDataReader = cmd1.ExecuteReader(). Não vejo onde queres chegar. E para que é o primeiro cmd? Edited July 6, 2015 by FreiNando O caminho mais curto para conseguir fazer muitas coisas é fazer uma de cada vez. Samuel Smiles Share this post Link to post Share on other sites
Seabra 0 Report post Posted July 6, 2015 O erro deve acontecer quando a data não é valida. O Access não aceita datas anteriores a 01-01-0100. Qual é o objectivo do teu procedimento? DateTime.Parse() faz quase o mesmo que Convert.ToDateTime(), e já devolve um valor DateTime, não precisa converter novamente. SELECT Devolve um resultado que pode ser lido com um OleDbDataReader = cmd1.ExecuteReader(). Não vejo onde queres chegar. E para que é o primeiro cmd? Olá Estou a utilizar os dois comandos porque a data vem separada da hora e tenho que os juntar. Por outro lado se eu colocar NOW à frente do Parametro "cmd1.Parameters.AddWithValue("@Campo1", SqlDbType.DateTime).Value = Now" dá erro de parâmetro inválido. Por isso utilizo os dois comandos juntos. Com o código pretendo saber se já existe aquela data que vem do ficheiro de texto, na base de dados, e se não existe vai gravar. O código que grava, fica mais a baixo e utiliza o cmd. Se poderes ajudar a organizar o código agradeço. Cumprimentos Share this post Link to post Share on other sites
FreiNando 22 Report post Posted July 6, 2015 (edited) Mas Data = DateTime.Parse(Array_Dados(0) & " " & Array_Dados(1)) não é suficiente? O cmd1.Parameters.AddWithValue("@Campo1", SqlDbType.DateTime).Value = Data não é a forma correta. Usa cmd1.Parameters.AddWithValue("@Campo1", Data) Ou cmd1.Parameters.Add("@Campo1", OleDbType.Date).Value = Data E para saber se o registo existe: Dim rd as OleDbDataReader=cmd1.ExecuteReader() If rd.HasRows then 'Existe! Pode fazer um UPDATE para receber Novos Valores Else 'Não Existe! Faz um INSERT para receber os novos valores End If rd.Close ' Importante fechar o DataReader Edited July 6, 2015 by FreiNando O caminho mais curto para conseguir fazer muitas coisas é fazer uma de cada vez. Samuel Smiles Share this post Link to post Share on other sites
Seabra 0 Report post Posted July 7, 2015 Mas Data = DateTime.Parse(Array_Dados(0) & " " & Array_Dados(1)) não é suficiente? O cmd1.Parameters.AddWithValue("@Campo1", SqlDbType.DateTime).Value = Data não é a forma correta. Usa cmd1.Parameters.AddWithValue("@Campo1", Data) Ou cmd1.Parameters.Add("@Campo1", OleDbType.Date).Value = Data E para saber se o registo existe: Dim rd as OleDbDataReader=cmd1.ExecuteReader() If rd.HasRows then 'Existe! Pode fazer um UPDATE para receber Novos Valores Else 'Não Existe! Faz um INSERT para receber os novos valores End If rd.Close ' Importante fechar o DataReader Com o teu método funciona. Tenho sempre que fazer "RD. close", caso contrário dá o mesmo erro. Obrigado pela ajuda Share this post Link to post Share on other sites