Problemi con file .dbf

mercoledì 06 dicembre 2006 - 16.54

zucco86 Profilo | Newbie

Salve io sto avendo motli problemi con dei file dbf che non si aprono con la connection string ad essi riservata da odbc....secondo me questi file sono danneggiati ma non ne ho la certezza come posso fare per togliermi questo dubbio???
e se sono danneggiati esiste un modo per recuperarli???

Qualcuno può aiutarmi perxhè sto diventando matto....

Grazie

Cteniza Profilo | Guru

Se i .dbf sono relativi al formato dbase ti consiglio di provare ad utilizzare il driver di foxpro.

zucco86 Profilo | Newbie

Si i file sono di formato dBase IV.
Io ho provato ad utilizzare tutti i driver che mi mette a disposizione ODBC per i dbf e visto che non ce la facevo ad effettuare il collegamento ho provato anche con quelli relativi ai file di visual fox ma niente...probabilmente perchè il file che cerco di aprire è stato salvato male o è danneggiato perchè con tutti gli altri dbf non ho problemi....Tu conosci un modo per poter aprire file danneggiati????perchè ho trovato alcuni programmi con i quali riesco ad aprire il file ed a visualizzare il suo contenuto ma non so a che struttura di programmazione facciano riferimento....puoi aiutarmi???

grazie mille

ciao

sisco22 Profilo | Newbie

Ciao, prova qui
http://www.dbf2002.com/

Con questo dovresti riuscire a capire se i file sono rovinati e anche il motore del database di appartenenza.
Francesco Benini

zucco86 Profilo | Newbie

hai trovato proprio il programma a cui stavo facendo riferimento ....con questo tipo di programmi riesco ad aprire tutti i file dbf cosa che non riesco a fare con vbnet tramite connessioni ADO,OLEDB,ODBC la cui correttezza è certa perchè per tutti gli altri file queste connessioni funzionano....

Cteniza Profilo | Guru

Con tutta probabilità ci sono dei problemi nel tuo programma vbnet (nel senso che non hai impostato correttamente qualche cosa).
Prova ad allegare zippato un miniprogetto con il relativo file dbf che lo verifichiamo.

zucco86 Profilo | Newbie

ti ho mandato il tutto via e-mail al tuo indirizzo.
grazie mille

Cteniza Profilo | Guru

A me non sembra che ci siano problemi nel leggere dei dati.
Probabilmente l'errore era nella tua stringa di connessione
Questo modulo lo dimostra
Imports System
Imports System.Collections.Generic
Imports System.Data
Imports System.Data.OleDb
Imports System.IO
Imports System.Text

Namespace ProvaDbf
Class MainClass
Public Shared Sub Main(ByVal args As String())
'posizionare il file sulla cartella del .exe
'entrare dal command sulla cartella dell'exe e richiamare l'eseguibile
'passando il nome del file dbf es: myexe.exe myfile.dbf
LeggiDbf(System.Environment.CurrentDirectory, args(0))

End Sub
Public Shared Sub LeggiDbf(ByVal filePath As String, ByVal fileName As String)
Dim cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties=dBASE IV;User ID=Admin;Password=")
Dim cmd As New OleDbCommand("SELECT * FROM [" + fileName + "]", cn)
cn.Open()
Dim dr As OleDbDataReader = cmd.ExecuteReader()
Dim wr As New StreamWriter("output.csv")
Dim primo As Boolean = True
Dim sb As StringBuilder
Dim c As Char = Chr(9)
While dr.Read()
If primo Then
sb = New StringBuilder()
For k As Integer = 0 To dr.FieldCount - 1
sb.Append(dr.GetName(k))
If k + 1 <> dr.FieldCount Then
sb.Append(c)
End If
Next
primo = False
wr.WriteLine(sb.ToString())
End If
sb = New StringBuilder()
For k As Integer = 0 To dr.FieldCount - 1
sb.Append(dr(k))
If k + 1 <> dr.FieldCount Then
sb.Append(c)
End If
Next

wr.WriteLine(sb.ToString())
End While
dr.Close()
wr.Close()
cn.Close()
End Sub

End Class
End Namespace

zucco86 Profilo | Newbie

guarda ho provato il tuo codice e ho notato che usiamo la stessa stringa di connessione o quasi quindi evidentemente anche il mio metodo era corretto...
però i problemi mi rimangono quando provo ad aprire i file bol_a.dbf,articor.dbf e coneuro.dbf.

ps:grazie per avermi risolto il problema delle intestazioni delle colonne

Cteniza Profilo | Guru

Aprendolo in binario magari si poteva leggere la firma.
Quello che faceva andare in errore il programma è che i file .dbf da te citati (ho provato su coneuro.dbf) erano in formato foxpro 3.
Ho aperto il file e applicato il comando:
COPY TO pippo.dbf TYPE FOXPLUS
e ho ottenuto un file dbaseIV che è apribile da programma

zucco86 Profilo | Newbie

potresti mandarmi le istruzioni che hai eseguito per convertire la tabella perchè non ho capito molto bene il tuo procedimento perchè non ho afferrato se i la conversione la fai via codice o "a mano" con qualche programma...
Grazie

zucco86 Profilo | Newbie

io sto provando a farlo via codice ma non sto ottenendo risultati in quanto quando cerco di eseguire il comando con le istruzioni di copia mi genera un errore.

Dim cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties=dBASE IV;User ID=Admin;Password=")

Dim cmd As New OleDbCommand("SELECT * FROM [" + fileName + "]", cn)

Dim cmdCopy As New OleDbCommand("COPY [" + fileName + "] TO pippo.dbf TYPE FOXPLUS", cn)

cn.Open()

cmdCopy.ExecuteNonQuery() 'sull'esecuzione di quest'ultima mi viene generata questa eccezione:
Eccezione non gestita di tipo "System.Data.OleDb.OleDbException" in system.data.dll

come posso fare???

zucco86 Profilo | Newbie

ho fatto varie prove anke con la classe File ma non riesco a convertirlo nel formato FoxPlus in quanto non ne conosco l'estensione...

Cteniza Profilo | Guru

Quello che non ti ho detto è che ho aperto i files con foxpro e poi da lì ho dato il comando

sisco22 Profilo | Newbie

Ciao
Se avete stabilito che sono file di Fox dovete installare OLE DB Provider for Visual FoxPro 9.0

http://www.microsoft.com/downloads/details.aspx?FamilyId=E1A87D8F-2D58-491F-A0FA-95A3289C5FD4&displaylang=en

e poi usare nella stringa di connessione Provider=VFPOLEDB.1

dovrebbe funzionare...

Francesco Benini

zucco86 Profilo | Newbie

I Driver di visual fox mi hanno aiutato x la maggior parte dei file che non riuscivo ad aprire ma non per tutti ahime....
ed ho notato che questi file non riesco a leggerli con il metodo READ del costruttore oledbdatareader

Avete idea di come posso arginare questo problema???

Grazi mille e Auguri di buone feste a tutti

Cteniza Profilo | Guru

Ti consiglio di aprire i file con Foxpro e a salvarli in altro file
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5