Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 18 su 18
  1. #11
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    La prima che mi viene in mente è quella di usare il driver di testo che sfrutta lo Schema.ini:
    Schema.ini File (Text File Driver)
    http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

    Ecco un esempio.

    Questo è il contenuto del file SCHEMA.INI (che deve risiedere nella cartella di destinazione):
    codice:
    [DL-IMA-PUSH.csv]
    ColNameHeader=False
    Format=FixedLength
    MaxScanRows=0
    CharacterSet=ANSI
    col1=DataOra Text Width 20
    col2=Tipo Text Width 6
    col3=Desc Text Width 100


    - txtTargetFolder contiene la cartella di destinazione
    - l'estensione del file deve essere modificata in CSV, altrimenti ti da errore.

    codice:
    Imports System
    Imports System.Data
    Imports System.IO
    Imports System.Data.OleDb
    
    
    Public Class Form1
    
    
        Private Sub btnImport_Click(sender As Object, e As EventArgs) Handles btnImport.Click
            'D:\DL-IMA-PUSH.log
            Dim targetFile As String = "DL-IMA-PUSH.csv"
            Dim LogFile As String = txtTargetFolder.Text + "\" + targetFile
            File.Delete(LogFile)
            File.Copy("D:\DL-IMA-PUSH.log", LogFile)
            Dim fi As FileInfo = New FileInfo(LogFile)
            Dim sFolderPath As String = fi.DirectoryName() '+ "\"
    
    
            Dim sConnString As String = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & sFolderPath & ";Extended Properties='Text;HDR=NO;'"
            Dim sql As String = "SELECT DataOra, Tipo, Desc FROM [" & targetFile & "]"
            sql = sql + " WHERE CDate(Left(DataOra, 10)) >= #05/01/2014#"
            Using connJET As OleDbConnection = New OleDbConnection(sConnString)
                Try
                    connJET.Open()
                    Dim aCommand As OleDbCommand = New OleDbCommand(sql, connJET)
                    Using aReader As OleDbDataReader = aCommand.ExecuteReader()
                        While aReader.Read()
                            ListBox1.Items.Add(aReader.GetString(0) + " " + aReader.GetString(1) + " " + aReader.GetString(2))
                        End While
                    End Using
                Catch ex As Exception
                    MessageBox.Show(ex.Message)
                End Try
            End Using
        End Sub
    End Class
    Ho aggiunto alcune righe a quelle che hai postato tu, cambiando la data e funziona.

    Avevo anche provato ad impostare il primo campo DataOra come tipo DateTime, ma mi restituiva errore.
    Come vedi, la condizione WHERE ti permette di caricare solo le righe che ti interessano.
    Poi ci si può lavorare su...


  2. #12
    Quote Originariamente inviata da gibra Visualizza il messaggio
    La prima che mi viene in mente è quella di usare il driver di testo che sfrutta lo Schema.ini: Schema.ini File (Text File Driver) http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx Ecco un esempio. Questo è il contenuto del file SCHEMA.INI (che deve risiedere nella cartella di destinazione):
    codice:
     [DL-IMA-PUSH.csv] ColNameHeader=False Format=FixedLength MaxScanRows=0 CharacterSet=ANSI col1=DataOra Text Width 20 col2=Tipo Text Width 6 col3=Desc Text Width 100
    - txtTargetFolder contiene la cartella di destinazione - l'estensione del file deve essere modificata in CSV, altrimenti ti da errore.
    codice:
     Imports System Imports System.Data Imports System.IO Imports System.Data.OleDb   Public Class Form1       Private Sub btnImport_Click(sender As Object, e As EventArgs) Handles btnImport.Click         'D:\DL-IMA-PUSH.log         Dim targetFile As String = "DL-IMA-PUSH.csv"         Dim LogFile As String = txtTargetFolder.Text + "\" + targetFile         File.Delete(LogFile)         File.Copy("D:\DL-IMA-PUSH.log", LogFile)         Dim fi As FileInfo = New FileInfo(LogFile)         Dim sFolderPath As String = fi.DirectoryName() '+ "\"           Dim sConnString As String = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & sFolderPath & ";Extended Properties='Text;HDR=NO;'"         Dim sql As String = "SELECT DataOra, Tipo, Desc FROM [" & targetFile & "]"         sql = sql + " WHERE CDate(Left(DataOra, 10)) >= #05/01/2014#"         Using connJET As OleDbConnection = New OleDbConnection(sConnString)             Try                 connJET.Open()                 Dim aCommand As OleDbCommand = New OleDbCommand(sql, connJET)                 Using aReader As OleDbDataReader = aCommand.ExecuteReader()                     While aReader.Read()                         ListBox1.Items.Add(aReader.GetString(0) + " " + aReader.GetString(1) + " " + aReader.GetString(2))                     End While                 End Using             Catch ex As Exception                 MessageBox.Show(ex.Message)             End Try         End Using     End Sub End Class
    Ho aggiunto alcune righe a quelle che hai postato tu, cambiando la data e funziona. Avevo anche provato ad impostare il primo campo DataOra come tipo DateTime, ma mi restituiva errore. Come vedi, la condizione WHERE ti permette di caricare solo le righe che ti interessano. Poi ci si può lavorare su...
    Impressionante!!! provo subito e ti lascio feedback!

  3. #13
    Scusa @gibra ma ottengo sempre questo errore:
    errore.JPG
    Ho provato a scaricare il driver... da qui: http://www.itzoz.com/2013/03/how-to-...edb40-and.html
    ma niente sempre stesso messaggio di errore..... ho comunque windows 7 64bit potrebbe essere quello il problema?

    grazie

  4. #14
    Ok! testato funziona perfetto!!!
    il problema è seven x64 sul 32 va..... :-)

    @gibra
    grazie del prezioso aiuto :-)

  5. #15
    Utente di HTML.it
    Registrato dal
    Mar 2014
    residenza
    Vicenza
    Messaggi
    318
    Guarda che l'approccio suggerito da Gibra è proprio quello corretto !!

    Dentro nel ciclo While devi prima leggere una riga con ReadLine mettendo il risultato su una variabile stringa, diciamo ad esempio:
    codice:
    Dim Riga As String = streamer.ReadLine
    Poi ti calcoli la data presente in questa variabile. Dato che la data è fissa a 10 caratteri, puoi tranquillamente considerare solo i primi 10 caratteri della tua riga:
    codice:
    Dim Data As Date = Date.Parse(Riga.Substring(0,10))
    Adesso confronti se la variabile Data è la data odierna, e se sì, la aggiungi a ListBox1:
    codice:
    If Data = Date.Today Then Me.ListBox1.Items.Add(Riga)
    Sergio

  6. #16
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Quote Originariamente inviata da kerberos5 Visualizza il messaggio
    Ok! testato funziona perfetto!!!
    il problema è seven x64 sul 32 va..... :-)

    @gibra
    grazie del prezioso aiuto :-)
    Apri il file del progetto ed imposta il target di destinazione su x86 (né su Any CPU, né su x64) perchè il Provider JET 4.0 non esiste per 64bit.
    Così potrai usarlo sia su x86 che x64.

    N.B. Chissà perché mai gli sviluppatori di MS hanno dato per scontato che non si userà più il JET...
    N.B. 2: però nello stesso tempo raccomandno di installare Office a 32bit, non quello a 64bit... Mistero.

  7. #17
    Quote Originariamente inviata da gibra Visualizza il messaggio
    Apri il file del progetto ed imposta il target di destinazione su x86 (né su Any CPU, né su x64) perchè il Provider JET 4.0 non esiste per 64bit.
    Così potrai usarlo sia su x86 che x64.

    N.B. Chissà perché mai gli sviluppatori di MS hanno dato per scontato che non si userà più il JET...
    N.B. 2: però nello stesso tempo raccomandno di installare Office a 32bit, non quello a 64bit... Mistero.
    Mitico! funza!
    Altro piccolo problemino con le date.... prendendo il tuo codice funziona perfettamente! ma se setto stranamente una data antecedente mi spiego meglio postando la funzione:

    codice:
        'TIMER1
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            Dim intervallo As Integer = frmSettings.txtimer.Text
            Timer1.Interval = intervallo
            Dim targetFile As String = "DL-IMA-PUSH.csv"
            Dim LogFile As String = dirlog + "\" + targetFile
            File.Delete(LogFile)
            File.Copy(frmSettings.txtwitter.Text, LogFile)
            Dim fi As FileInfo = New FileInfo(LogFile)
            Dim sFolderPath As String = fi.DirectoryName() '+ "\"
    
            'imposto la data a ieri altrimenti non mi carica nada
            Dim datamenouno As String = DateAdd(DateInterval.Day, -1, Date.Today)
    
            Dim sConnString As String = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & sFolderPath & ";Extended Properties='Text;HDR=NO;'"
            Dim sql As String = "SELECT Distinct DataOra, Tipo, Desc FROM [" & targetFile & "]"
            '## qui non riesco a capire perchè se imposto Date.Today non funziona
            'sql = sql + " WHERE CDate(Left(DataOra, 10)) >= #" + datamenouno + "#"
            sql = sql + " WHERE CDate(Left(DataOra, 10)) >= #05/05/2014#"
    
            Using connJET As OleDbConnection = New OleDbConnection(sConnString)
                Try
                    'pulisco la listbox
                    ListBox1.Items.Clear()
                    connJET.Open()
                    Dim aCommand As OleDbCommand = New OleDbCommand(sql, connJET)
                    Using aReader As OleDbDataReader = aCommand.ExecuteReader()
                        While aReader.Read()
    
                            ListBox1.Items.Add(aReader.GetString(0) + " " + aReader.GetString(1) + " " + aReader.GetString(2))
                        End While
                    End Using
                    Call TwitterFind()
                Catch ex As Exception
                    MessageBox.Show(ex.Message)
                End Try
            End Using
    
        End Sub
    Nella select se imposto >= a Date.Today e inserisco un record con data odierna non lo legge allora ho provato sottraendo 1 giorno e ieri pareva andare..... riprovo oggi ma nada! se imposto data fissa antecedente va! che tu sappia vb.NET ha problemini con le funzioni delle date?

    P.S. ho controllato per scrupolo il pc che lo esegue ha orario e data allineati! sto sclerando per sta cavolata!

  8. #18
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Perchè Date.Today ti restituisce una data nel formato di sistema, che è ovviamente in italiano, DD/MM/YYYY cioè oggi è: 07/05/2014
    mentre i database memorizzano tutti (comunque vi sono dei 'distinguo') la data nel formato americano MM/DD/YYYY: 05/07/2014.

    Se ricontrolli meglio il mio codice vedrai che ho filtrato usando infatti il formato americano: #05/01/2014#"
    per indicare il 1° maggio 2014.

    Per cui, devi formattare la data prima di passarla alla query.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.