2010-09-25 23 views

Odpowiedz

14

Można użyć ADO dostępu do plików DBF

Zobacz ths przykładowy kod (przy użyciu TAdoConnection i TAdoDataSet komponenty).

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; 
+1

+1 dla "out-of-the-box" rozwiązania Delphi –

+0

To po prostu działa dla mojego celu – eKek0

+0

błąd: "błąd sieci lub dysku" :( –

0

Nie jest trudno odczytać plik DBF, jeśli nie potrzebujesz indeksów. Format jest dość prosty. Nagłówek został zastosowany dla rejestrów o ustalonym rozmiarze. W każdym rejestrze znajduje się flaga wskazująca, czy została usunięta, czy nie. Sugeruję poszukiwanie komponentu, który robi to, co chcesz. Możesz znaleźć numer in Torry's Delphi pages.

1

Użyłem Topaz z Software Science przez wiele lat, zanim zacząłem pracę z Firebird. Zawsze była to doskonała biblioteka, miała świetny podręcznik i dobre wsparcie techniczne. Obsługuje indeksy, a nawet ma opcję w pamięci. Myślę, że byłby to dobry wybór.

+0

Niestety dowiedziałem się niedawno (po tym, jak spędził już zbyt wiele godzin na kod konwersji), że nie obsługuje wartości NULL. Są automatycznie konwertowane na puste ciągi lub 0 w zależności od typu pola. Ta brakująca cecha sprawiła, że ​​Topaz stał się dla mnie bezwartościowy. :-(Teraz ubiegam się o ich ofertę "60 dni zwrotu pieniędzy" Mam nadzieję, że pozostaną przy niej, więc przynajmniej otrzymam te 100 USD z powrotem. Czas już jest stracony – dummzeuch

+0

Naprawdę przykro, że nie był odpowiedni Byli bardzo profesjonalną firmą zorientowaną na klienta, kiedy zajmowałem się nimi regularnie Mam nadzieję, że twoje doświadczenie jest tak dobre, jak moje Było mi przykro, że wskazałem ci ślepy zaułek – jrodenhi

+0

jrodenhi: To z pewnością To nie była twoja wina, znalazłem twoją odpowiedź po tym, jak już ustaliłem, że Topaz nie zrobił tego, czego potrzebowałem. Wysłałem ten komentarz, aby inni wiedzieli o tym niedociągnięciu, aby nie tracili na nim tyle czasu, co ja. – dummzeuch

8

Kiedyś pracowałem z plikami DBF (niektóre starsze aplikacje). Nadal używam go do utrzymywania tych aplikacji tu i tam. Jest bezpłatny, ma wiele funkcji i działa dobrze.

+0

"wolny" czyli LGPL w tym przypadku. Nie nadaje się do komercyjnych aplikacji. – dummzeuch

+0

Dlaczego nie byłoby dobrze dla komercyjnych aplikacji? Musisz tylko opublikować źródło TDBF, jeśli je modyfikujesz; w przeciwnym razie możesz po prostu połączyć kod. – reiniero

+1

Jeśli * statycznie * link to musisz podać nie tylko kod źródłowy tdbf, ale pełne źródło twojego programu. Aby dynamicznie łączyć tdbf, musisz pracować z pakietami. – dummzeuch

0

ADO nie działa dla mnie, ale udało mi się otworzyć pliku DBF przy użyciu BDE:

Z dostępu do danych (lub BDE, zależy od wersji Delphi) Sekcja I umieścić TDataBase, a komponenty TTable (możesz użyć TQuery, jeśli chcesz).

Po dwukrotnym kliknięciu komponentu TDataBase otworzyłem okno dialogowe instalacji. Wypełnione pole Nazwa z "db_name" (nazwa jest dowolna), nazwa sterownika = "STANDARD", pole Parametry: "PATH = C: \ Path \ To \ DBF_FILES \ '. Następnie ustawiam Connected = True.

Następnie w komponencie TTable ustawiam DatabaseName = 'db_name' - tę ustawioną w komponencie TDataBase. I właściwość TableName ustawiona "DB_FILE.dbf", która znajdowała się w określonym folderze. Aktywny = Prawda.

Wiesz, co robić dalej