Eksport z pliku *.dbf do bazy danych - pilne

0

WITAm.... :)

Mam pewną prośbę z zarazem prosze o pomoc...
Mam do zrobienia na zaliczenie bazę danych w C pt. 'Książka adresowa'... Część mam już zrobiona ale nie mogę sobie poradzić z eksportowaniem do bazy zapisów z pliku *.dbf ...
Proszę więc o pomoc jak mam coś takiego wykonać....
W bazie znajdują sie takie wpisy:

  • imię
  • nazwisko
  • nr telefonu
  • miasto
  • ulica
  • kod
  • nr mieszkania
  • województwo

Będę bardzo wdzięczny za wskazówki lub jeżeli ktos posiada podobny kod w C lub C++ to bardzo bym prosił o podesłanie

Z góry dzięki :)

0

Hmm samego formatu dbf nie znam ale zamierzam sie za niego wziasc, ogladalem kiedys kod w pascalu i ogulny overviewm tego formatu zapisu. Poszukaj w SWAG'u i w innych zrodlach (google) o tym formacie,. Do zapisu trzebabedzie pewnie zrobic kilka prostych struktor ale to chyba nie powinno byc strasznie klopotliwe :)

0

To artykuł o plikach *.dbf znaleziony gdzieś w internecie. Niestety nie znam strony z której pochodzi ten artykuł , mam nadzieję,że nikt się nie obrazi z tego powodu, że nie podałem liku do jego strony.
Zamieszczam go bo może Ci się przydać.
[code]
Jak więc wygląda plik DBF w wersji III "od środka"? Składa się on z nagłówka i z części przechowywania danych. Dane w zbiorach DBF są przechowywane w rekordach zbudowanych z dowolnej ilości pól różnych typów (Character, Numeric, Date, Logical). Każdy plik ma określoną budowę takiego rekordu i tylko dane o identycznej strukturze można w nim zapisywać.

W nagłówku znajdują się informacje o budowie rekordu wykorzystywanego w danym pliku DBF. Jednak pierwsza część nagłówka to wiadomości ogólne. Jest ich tam 32 bajty tworzące rekord następującej postaci:
TInformacjeOgólne = record
Wersja : Byte;
Rok: Byte;
Miesiąc: Byte;
Dzień : Byte;
LiczbaRekordow: Longint;
RozmiarNagłówka: Word;
RozmiarRekordu: Word;
Zarezerwowane : Array [1..20] of Char;
end;

Otwieramy więc nasz plik (jako binarny) i odczytujemy te 32 bajty. A oto czego się dowiadujemy. W polu Wersja znajdować sie może liczba 2, 3 lub 131 zależnie od wersji formatu pliku, nas jednak interesuje jedynie plik z liczbą 3 (wersja II ma nieco inną strukturę, liczba 131 oznacza, że w pliku jest wykorzystywane pole MEMO, do którego dostęp jest na tyle skomplikowany, że przekracza ramy tego artykułu). Następne trzy pola tworzą datę ostatniej modyfikacji (RR-MM-DD). LiczbaRekordów , jak sama nazwa wskazuje, zawiera łączną liczbę rekordów znajdujących się w naszym pliku. RozmiarNagłówka to ilość bajtów zajmowanych przez jego wstępną cześć. Sposób obliczania wartości tego pola wyjaśnię w dalszej części artykułu. Kolejne dwa bajty (RozmiarRekordu) zawierają rozmiar rekordu danych (z czego wynika, że maksymalnie może on mieć 64kB). Ostatnie 20 bajtów nie jest wykorzystywanych w tej wersji dBase'a.

W dalszej części nagłówka odnajdujemy opisy poszczególnych pól rekordu danych. Dla każdego z nich przeznaczona jest struktura o długości 32 bajów i takiej oto budowie:

TInformacjeOPolu = record
Nazwa : Array[0..10] of Char;
Rodzaj : Char;
Adres : Longint;
Rozmiar : Byte;
Dziesiętne : Byte;
Zarezerwowane: Array [1..14] of Char;
end;

Nazwa może mieć długość maksymalnie 10 znaków i musi być zakończona znakiem #0. W polu Rodzaj określone jest, jakiego rodzaju jest opisywane pole rekordu danych. Możliwości są następujące:

  • 'C' oznacza typ CHARAKTER, który jest tablicą znaków o długości do 2048;

  • 'N' czyli NUMERIC - ciąg maksymalnie 19 cyfr (może zawierać kropkę);

  • 'D' od DATE - 8 znaków, w programach przedstawiana najczęściej w postaci RR/MM/DD, ale w pliku zapisana jako RRRRMMDD;

  • 'L' oznaczające typ LOGICAL, jeden znak o wartosci 'T' lub 'F';

  • 'M' czyli wspomniane wcześniej MEMO.

Adres zawiera przesunięcie opisywanego pola względem początku rekordu danych. Wartość tę obliczamy sumując długości wszystkich pól poprzedzających. Adres pierwszej danej wynosi jednak nie zero a jeden, gdyż każdy rekord poprzedzony jest "znacznikiem usunięcia". Jest to miejsce, w którym pojawi sie gwiazdka (*), jeśli zaznaczymy rekord jako usunięty (jego fizyczne skasowanie nastąpi w momencie wywołania polecenia zwanego najczęściej Pack).

W polu Rozmiar znajduje się długość pola danych. Jeśli jest ono typu Numeric, to jego rozmiar określa ilość znaków koniecznych do przedstawienia całej liczby (razem z kropką i częścią ułamkową). Innym rodzajem danych o zmiennej długości jest typ Character, pozostałe zaś mają zawsze jednakową, wcześniej opisaną długość.

Pole Dziesiętne dotyczy właściwie tylko typu Numeric i zawiera liczbę cyfr ułamkowych (po kropce). Dla innych rodzajów danych wartość tego pola powinna wynosić zero.

Dalszych czternaście znaków rekordu TInformacjeOPolu nie jest wykorzystywanych w wersji III pliku DBF.

Chciałbym wrócić do pominiętego wcześniej tematu długości nagłówka pliku DBF. Teraz, znając jego organizację, możemy łatwo ją określić. Wynosi ona 32 bajty (opis ogólny) plus 32 bajty razy ilość pól w naszym rekordzie danych (opisy poszczególnych pól) i plus jeszcze jeden bajt (znacznik końca nagłówka, jest nim znak #13).

Dalej w naszym pliku znajdują się dane. Jest ich, zgodnie z informacjami zawartymi w nagłówku, LiczbaRekordów razy RozmiarRekordu bajtów. Ostatnim elementem pliku DBF jest znacznik końca pliku (znak #26).

Mam nadzieję, że powyższy opis jest dostatecznie szczegółowy i pozwoli wszystkim, którzy tego bedą potrzebowali, napisać własną bibliotekę obsługi plików DBF.
[/code]

1 użytkowników online, w tym zalogowanych: 0, gości: 1