In Delphi per Win32, come leggere e scrivere un file dbf in modo nativo, senza il BDE? So che ci sono alcuni componenti disponibili nel web, ma non ne ho mai usato nessuno, quindi non so quale scegliere (se esiste).Come leggere e scrivere dbf in modo nativo?
risposta
È possibile utilizzare ADO per accedere a un file DBF
Vedi THS codice di esempio (utilizzando un TAdoConnection
e TAdoDataSet
componenti).
var
dbf_folder : string;
begin
dbf_folder:='c:\bdd';//set your dbf folder location here
ADOConnection1.LoginPrompt:=false;
ADOConnection1.ConnectionString:=Format('Provider=Microsoft.JET.OLEDB.4.0;Data Source=%s;Extended Properties=dBase IV;',[dbf_folder]);
try
ADOConnection1.Connected:=True;
ADODataSet1.CommandText:='Select * from file.dbf'; //make your SQL query using the name of the dbf file
ADODataSet1.Open;
while not ADODataSet1.eof do
begin
//do your stuff here
//ADODataSet1.FieldByName('').AsString
ADODataSet1.Next;
end;
except
on E : Exception do
ShowMessage(E.Message);
end;
end;
Non è difficile leggere un file DBF se non sono necessari gli indici. Il formato è piuttosto semplice. Un'intestazione seguita per registri di dimensioni fisse. C'è una bandiera in ogni registro che indica se è stata cancellata o meno. Suggerisco di cercare un componente che faccia ciò che vuoi. È possibile trovare alcuni in Torry's Delphi pages.
Ho usato Topaz da Software Science per molti anni prima di iniziare con Firebird. Era sempre una biblioteca eccellente, aveva un manuale fantastico e un buon supporto tecnico. Supporta gli indici e ha anche un'opzione in memoria. Penso che sarebbe una buona scelta.
Purtroppo ho scoperto di recente (dopo che avevo già speso troppe ore sul codice di conversione) che non supporta valori NULL. Vengono automaticamente convertiti in stringhe vuote o 0 a seconda del tipo di campo. Questa caratteristica mancante ha reso Topaz completamente inutile per me. :-(Ora ho fatto domanda per la loro offerta di "60 giorni soddisfatti o rimborsati", spero che si attenano ad essa, così almeno riesco a recuperare quei 100 US $ Il tempo è già perso – dummzeuch
Mi dispiace davvero che non fosse adatto Erano una compagnia molto professionale orientata al cliente quando mi occupavo di loro regolarmente, spero che la tua esperienza sia buona come la mia.Per ancora, mi dispiace di averti indicato in un vicolo cieco – jrodenhi
jrodenhi: Certamente non è stata colpa tua, ho solo trovato la tua risposta dopo aver già stabilito che Topaz non ha fatto quello che mi serviva, ho postato questo commento per rendere gli altri consapevoli di questa mancanza, in modo che non perdano tutto il tempo che ho fatto – dummzeuch
Ho usato questo, ma migrato a TDBF, principalmente a causa della velocità ragioni ving ha acquistato Apollo –
Ho usato TDBF indietro quando stavo ancora lavorando con i file DBF (alcune applicazioni legacy). Lo uso ancora per la manutenzione di quelle app qui e là. È gratuito, ha molte funzioni e funziona bene.
"libero" che significa LGPL in questo caso. Non va bene per le app commerciali. – dummzeuch
Perché non dovrebbe essere buono per le app commerciali? Devi solo pubblicare il sorgente TDBF se lo modifichi; altrimenti puoi semplicemente collegare il codice .. – reiniero
Se * lo * link * staticamente devi fornire non solo il codice sorgente tdbf ma la fonte completa del tuo programma. Al fine di collegare dinamicamente tdbf dovresti lavorare con i pacchetti. – dummzeuch
ADO non ha funzionato per me, ma sono riuscito ad aprire il mio file dbf utilizzando BDE:
Dal punto di accesso ai dati (o BDE, dipende dalla vostra versione di Delphi) sezione ho messo un TDatabase e, componenti TTable (puoi usare TQuery se vuoi).
Facendo doppio clic sul componente TDataBase ho aperto la finestra di dialogo di configurazione. Riempito il campo Nome con 'db_name' (il nome è arbitrario), nome driver = 'STANDARD', campo Parametri: 'PATH = C: \ Path \ To \ DBF_FILES \'. Quindi ho impostato Connesso = Vero.
Quindi nel componente TTable ho impostato DatabaseName = 'db_name' - quello che ho impostato nel componente TDataBase. E la proprietà TableName impostava "DB_FILE.dbf" che si trovava nella cartella specificata. Attivo = Vero.
si sa che cosa fare dopo
- 1. C# come scrivere correttamente in un file .dbf (foxpro)
- 2. Modo consigliato di leggere e scrivere file .ini in VBA
- 3. Come leggere e scrivere file xml?
- 4. Leggere e scrivere cookie in Symfony2
- 5. Il modo più semplice per scrivere e leggere un XML
- 6. Il modo migliore per leggere, modificare e scrivere XML
- 7. ConcurrentHashMap leggere e scrivere blocchi
- 8. Come leggere e scrivere dalla porta seriale
- 9. Leggere e scrivere transazioni in Amazon Kinesis
- 10. Come leggere e scrivere tag ID3v1 e ID3v2 in Elixir
- 11. Come leggere velocemente e scrivere in listview in delphi?
- 12. Leggere e scrivere un file in groove
- 13. In Clojure 1.3, Come leggere e scrivere un file
- 14. Come leggere e scrivere un file in C#
- 15. Come leggere e scrivere valori dal registro in Windows CE?
- 16. Come leggere e scrivere Session in Cakephp 3.0
- 17. FlatBuffers: scrivere e leggere dal file binario?
- 18. C# TcpClient, leggere e scrivere stream simultaneamente
- 19. PHP leggere e scrivere JSON da file
- 20. DBF - codifica cp1250
- 21. Come posso leggere e scrivere in modo efficiente file troppo grandi per adattarli alla memoria?
- 22. Come posso leggere, sostituire e scrivere file di grandi dimensioni?
- 23. Leggere e scrivere int in un file binario in C++
- 24. Come posso leggere e scrivere dati JPEG su base pixel?
- 25. Scrivere e leggere l'oggetto php in un file di testo?
- 26. Come leggere da TCP e scrivere su stdout?
- 27. È possibile leggere e scrivere in un file contemporaneamente?
- 28. Leggere e scrivere in un file usando VBScript
- 29. C'è un modo per leggere e scrivere file in memoria in R?
- 30. Scrivere e leggere le matrici 3D in R
+1 per una soluzione Delphi "pronta all'uso" –
Questo funziona solo per il mio scopo – eKek0
errore: "errore di rete o disco" :( –