Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    VB.net - Problema connesione .dbf

    Salve,
    ho compilato un servizio windows accede ad un file .dbf usando connessione odbc.

    Mi restituisce l'errore :
    ERROR [42S02] [Microsoft][Driver ODBC dBase] Il modulo di gestione di database Microsoft Jet non è riuscito a trovare l'oggetto CARPANold.dbf'. Assicurarsi che l'oggetto esista e che il nome e il percorso siano digitati correttamente.
    Il codice è:

    codice:
    Dim Connection As Odbc.OdbcConnection
    Dim CARPANcommand As Odbc.OdbcCommand
    Dim CARPANreader As Odbc.OdbcDataReader
    
    Try
                Connection = New Odbc.OdbcConnection("Driver={Microsoft dBASE Driver (*.dbf)};Driverid=277;Dbq=C:\")
                
                Connection.Open()
                CARPANcommand = New Odbc.OdbcCommand("SELECT * FROM [CARPANold.dbf]", Connection)
                CARPANreader = CARPANcommand.ExecuteReader
                While CARPANreader.Read
                    Try
                        File.AppendAllText(LogPath, CARPANreader.Item("PARTITA").ToString)
                        Message = CARPANreader.Item("PARTITA").ToString
                        EventLog.WriteEntry("TEST", Message, EventLogEntryType.Error)
                    Catch ex As Exception
                        Message = "Errore creazione file (File.AppendAllText)" & vbCrLf & ex.Message
                        EventLog.WriteEntry("TEST", Message, EventLogEntryType.Error)
                    End Try
                End While
            Catch ex As Exception
                Message = "Errore di connessione" & vbCrLf & ex.Message
                EventLog.WriteEntry("TEST", Message, EventLogEntryType.Error)
            End Try
    Potete aiutarmi ?
    Grazie

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    dove imposti il percorso del file? :master:

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Visual Basic e tutti i linguaggi .NET vengono trattati nel forum "Visual Basic e .NET Framework".
    VB.NET, poi, ha anche un forum chiamato VB.NET per conto suo.

    A parte questo, quando si posta del codice, esso deve essere indentato e si devono usare i tag CODE, come espressamente indicato nel Regolamento interno di ciascuna area.

    Sposto e correggo.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Ho due perplessità:

    1) Come faccia a restituire un errore il JET, quando stai usando il Driver={Microsoft dBASE Driver è un mistero.

    2) SELECT * FROM [CARPANold.dbf]
    si deve indicare solo il nome della tabella, senza l'estensione, ovvero
    SELECT * FROM CARPANold


  5. #5
    Scusate per aver sbagliato sbagliato sezione.


    Rispondo alle domande:

    dove imposti il percorso del file?
    E' indicato alla fine della stringa di connessione (Dbq)

    codice:
    Connection = New Odbc.OdbcConnection("Driver={Microsoft dBASE Driver (*.dbf)};Driverid=277;Dbq=C:\")

    si deve indicare solo il nome della tabella, senza l'estensione, ovvero
    SELECT * FROM CARPANold
    Ho provato anche così ma l'errore è lo stesso

  6. #6
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Non hai risposto alla domanda 1 (errore JET)...

    In ogni caso, che tipo e versione di DBF stai usando?
    dBase III, IV, V oppure FoxPro....


  7. #7
    Perchè è il JET a dare l'errore non ne ho la più pallida idea
    I dbf sono dbase IV, e cmq anche specificandolo nella stringa l'errore persiste.

    Questa è la stringa che viene generata automaticamente
    codice:
    Driver={Microsoft dBase Driver (*.dbf)};collatingsequence=ASCII;defaultdir=C:\;deleted=0;driverid=277;fil=dBase IV;filedsn=C:\Connection.dsn;maxbuffersize=2048;maxscanrows=8;pagetimeout=5;safetransactions=0;statistics=0;threads=3;uid=admin;usercommitsync=Yes
    L'errore è lo stesso


    Il problema è che in un altra applicazione (non service) utilizzo questa connessione e funziona.

    codice:
    Driver={Microsoft dBASE Driver (*.dbf)};datasource=\\172.16.16.20\cartellacondivisa
    codice:
    SELECT * FROM \\172.16.16.20\cartellacondivisa\CARPAN
    Se la stessa la uso nel servizio non va.

  8. #8
    Vi aggiorno che sono riuscito ad eseguire la connessione.

    Ho provato ad eseguire lo stesso codice in un form windows e questo è quello che accade.
    Usando la stringa

    codice:
    Driver={Microsoft dBASE Driver (*.dbf)};driverid=277;dbq=\\172.16.16.20\cartellacondivisa
    con questo select
    codice:
    CARPANcommand = New Odbc.OdbcCommand("SELECT * FROM CARPAN", Connection)
    Quindi collegandomi in server remoto al file CARPAN (6 caratteri), nel form windows funziona, mentre nel servizio ho questo errore

    ERROR [HY024] [Microsoft][Driver ODBC dBase] "(sconosciuto)" non è un percorso valido. Assicurarsi che il nome del percorso sia corretto e di essere collegati al server in cui si trova il file. ERROR [IM006] [Microsoft][Driver Manager ODBC] Funzione SQLSetConnectAttr del driver non riuscita. ERROR [HY024] [Microsoft][Driver ODBC dBase] "(sconosciuto)" non è un percorso valido. Assicurarsi che il nome del percorso sia corretto e di essere collegati al server in cui si trova il file.
    Se tento di leggere CARPANold(9 caratteri) anche nel windows form non funge perche no trova il file.

    Successivamente ho provato a copiare in locale il file CARPAN quindi la stringa è
    codice:
    Driver={Microsoft dBASE Driver (*.dbf)};driverid=277;dbq=C:\
    e in questo modo nel servizio funziona tutto correttamente.

    Le conclusioni:
    Perchè CARPAN lo legge e CARPANold no ?
    Perchè Windows form riesce a leggere direttamente da remoto mentre il servizio no ?

  9. #9
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Potrebbe proprio essere quello l'errore: CARPANold è quello che si definisce in gergo un "nome lungo perchè non conforme alle specifiche sui nomi in DOS, ovvero 8.3 .
    In questo caso CARPANold è lungo 9, mentre il servizio lo vuole lungo 8...

    Nel servizio, prova a passare il nome della tabella utilizzando la funzione GetShortPathName() che restituisce invece il 'nome corto'

    http://www.pinvoke.net/default.aspx/...tShortPathName


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.