Programming
C++
Turbo Pascal
Delphi
Ver. 1.0 Beta, Don't have a compiler? Now you can write simple scripts ONLINE! This is a basic version -does not include all the Pascal statements. Only to learn basics
Klasa z tekstową bazą danych w Delphi
DBText – Tekstowa baza danych w delphiWażne!Jeśli szukasz sposobu na rozwiązanie zadania by zbudować jakąś bazę danych skorzystaj z linku o programowaniu baz danych w pascalu. W delphi jest bardzo podobnie. turbo_pascal,baza_danych.html. Ten rozdział poświęcony jest korzystaniu z gotowego modułu, który pomaga przy tworzeniu bazy danych czegokolwiek. Służy zapoznaniu się z pewnym prostym rozwiązaniem, ale zakłada, że posiadasz podstawową wiedzę na temat tworzenia programu w Delphi Informacje wstępneDBText to tekstowa, darmowa baza danych, która pozwala na dowolne rozszerzanie rekordu i zapis do pliku. Jej format wewnątrz pliku tekstowego:
DBText 1.0 - Tekstowa baza danych w delphi. Wersja do pobrania W kolejnych rekordach nie muszą występować te same nazwy kolumn. Baza jest odporna na inne znaki kodu ASCII. Wewnątrz zawartości pola nie występuje znak przeniesienia linii. Gdy jest potrzeba zapisania przeniesienia baza używa: #x0A#x0C Potrzebna znajomość klas: Może przydać się Baza może być kodowana. Wtedy zapis nie odbywa się do pliku tekstowego, tylko do binarnego. Format pliku: DBKoder1.0 Opis słownika: Słowo kodowane jest za pomocą znaku ASCII o numerze „m”, który oznacza kolejny numer kodowanego słowa. „m” jest z przedziału 0..”max_sl-1” W słowniku znajdują się nazwy znalezionych w bazie kolumn oraz używane znaki ASCII – posortowane. Od tego, którego jest najwięcej do tego, którego najmniej. Następnie do końca pliku Klasa TRekord Definicja TRekord = class (TList) function Add(const klucz, wartosc : string) : integer; overload; function Add(const klucz : string; wartosc : integer) : integer; overload; function Add(const klucz : string; wartosc : boolean) : integer; overload; function AddDate(const klucz : string; wartosc : TDateTime) : integer; overload; function Add(const klucz : string; wartosc : Real; miejsc : Integer = 0) : integer; overload; function Get(const klucz : string) : string; function GetF(const klucz : string) : real; function GetI(const klucz : string) : integer; function GetId(const klucz : string) : integer; // Oddaje pozycję klucza na liscie function Enabled : boolean; // Czy nie usunięte function Id : integer; function jestWartosc(const _wartosc : string) : boolean; function PobierzKlucz(const s: string; var i:integer) : string; function PobierzWartosc(const s: string; var i:integer) : string; function PobierzCalosc : string; procedure DodajZeStringa(const s : string); procedure Clear; override; constructor Create(const s : string); overload; constructor Create; overload; function Klonuj : TRekord; end; W praktyce używa się: r := TRekord.Create; r.Add('Imie', 'Robert'); r.Add('Wiek', 43); Caption := r.Get('Imie') + ' ' + IntToStr(r.GetI('Wiek')); Add przyjmuje różne parametry: można dodawać string, real, integer, boolean. Wszystkie dane zamieniane są w bazie na string! Nie ma powodów do obaw, programy korzystające z DBText są naprawdę szybkie. Poza tym w szczególności stosuje się je do aplikacji, które wykonują obliczenia na niewielkich ilościach danych -np. kilka tysięcy rekordów. Dane można pobrać r.GetI – Integer r.GetF – Float r.Get – string Ideą Add i Get było naśladowanie tablic asocjacyjnych php Stąd r.GetI('Imie') da wynik zero. Wpisanie na klawiaturze Add i Get jest szybkie, szybsze od Query.Fields.FindField().AsInteger Funkcja Klonuj tworzy w rezultacie swoją kopię (kopię klasy TRekord), której przydziela osobną pamięć TDBTabela Definicja TDBTabela = class (TList) nazwa : string; index : integer; // Wewenętrzny indeks przeszukiwania nast_index : integer; // Przy dodawaniu rekordów, automatycznie dodawany indeks Loading : Boolean; ZwolnijPamiec : Boolean; Filter : TFuncFiltruj; // Funkcja filtrująca wyniki, działa w powiązaniu z Enabled, // Jesli jej wynikiem jest false, procedury next i prev ominą jej wynik function PobierzId : integer; procedure Start; procedure PobierzDane(_tekst : TStringList); procedure WczytajPlik(const _dbNazwaPliku : string); function WczytajPlikCzesciowy(const _dbNazwaPliku : string; out_p : TProceduraOdbierajacaZKodera) : Boolean; function ZapiszPlikCzesciowy(const _dbNazwaPliku : string; in_p : TProceduraDodajacaDoKodera) : Boolean; procedure ZapiszPlik(const _dbNazwaPliku : string); procedure ZwrocDane(var _tekst : TStringList); procedure Usun(_id : integer); function ZnajdzKlucz(const key, val : string) : TRekord; overload; function ZnajdzKlucz(const key : string; val : Real) : TRekord; overload; function UsunRekordy(rekord : TRekord) : integer; function Add(_rekord : TRekord) : integer; overload; function Add(s, t: string) : integer; overload; function Add(s: string; r : real) : integer; overload; function Add(s: string; i : integer) : integer; overload; function Add(s: string; b : boolean) : integer; overload; function GetId(_id : integer) : TRekord; function GetIdPos(_id : integer) : integer; // Oddaje nr listy rekordu o nr id function Select(_rekord : TRekord) : integer; function SelectId(_rekord : TRekord) : integer; function Wyszukaj(const s : string; proc : TDBProceduraDodajaca; ListaPozycjonujaca : TDBTabela = nil) : integer; function WyszukajPosortowane(const s, sort : string; proc : TDBProceduraDodajaca) : integer; procedure Clear; override; destructor Destroy; override; constructor Create; function Get(const klucz : string) : string; function GetF(const klucz : string) : real; function GetI(const klucz : string) : integer; // Poruszanie sie po tabeli function Next : integer; function Prev : integer; function Koniec : boolean; function Poczatek : boolean; function Sortuj(kolumna : String) : TDBTabela; private end; W praktyce używa się: r := TRekord.Create; tab := TDBTabela.Create; tab.Add(r); tab.ZapiszPlik('plik.txt'); tab.Free; Gdy w bazie jest więcej rekordów można pobrać wskaźnik na TRekord za pomocą r := tab.GetId(4); Czyszczenie tabeli Bazę można wyczyścić tab.Clear; Sortowanie danych Można ją sortować według pola za pomocą res_tab := tab.Sortuj('Nazwisko'); res_tab ma na nowo przydzieloną pamięć. Nie trzeba tworzyć klasy tabeli Wyszukiwanie danych w tabeli tab var wyniki : TDBTabela; procedure DodajWynik(r : TRekord); begin wyniki.Add(r); end; wyniki := TDBTabela.Create; tab.Wyszukaj('szukane słowa', DodajWynik); Można wyszukać dane a wynik otrzymać już posortowany według 'Kolumna' tab.WyszukajPosortowane('szukane słowa', 'Kolumna', DodajWynik); TDBase Definicja TDBase = class (TList) // Lista obiektów TDBTabela dbSystem : TDBTabela; // Lista nazw plików z tabelkami AktualizacjaProc : TDBProceduraAktualizujacaPostep; // Wskaznik na procedurę, aktualizującą postęp wczytywania / zapisu function Add(_tabela : TDBTabela) : integer; function Wczytaj(_dbKatalog : string) : integer; function Zapisz(_dbKatalog : string) : integer; function Query(const _sql : string) : TResult; function Tabela(const _dbNazwa : string) : TDBTabela; constructor Create; destructor Free; end; TDBase służy do uporządkowania tabel. Dzięki TDBase nie trzeba wczytywać pojedynczo każdej tabeli. Wystarczy: db := TDBase.Create; db.Wczytaj('DB'); tab := db.Tabela('Klienci'); na końcu programu można użyć db.Zapisz('DB'); TDBase tworzy kilka plików w katalogu, stąd jako parametr nie podaje się nazwy pliku lecz katalogu, w którym są zapisane wszelkie dane. Wady Baza jest przechowywana w pamięci. Potrafi przepełnić bufor. Przy dużej ilości rekordów (ok. 100 000) wyszukiwanie nieposortowanych danych jest powolne. Przy takim obciążeniu bazy użytkownik jest w stanie zauważyć spowolnienie programu. Nie obsługuje zapytań SQL. Zalety Wygoda użycia. Kod programu tworzony znacznie szybciej. Dowolność ilości kolumn rekordu. Zgodność z graficznymi komponentami: KomponentyTech. Odporność na błędy danych. Zbliżenie do php. Sortowanie, wyszukiwanie dowolnej części wyrazu w bazie. Pozwala na dodawanie plików binarnych, w dodatku zmienia ich treść, nie da się jej rozszyfrować bez wiedzy programistycznej. Nie trzeba sterowników do zewnętrznej bazy. Nie trzeba instalować serwera. Idealna dla małych projektów. Nie trzeba definiować budowy tabel. Wystarczy dodać dane i zapisać. Dobre dla projektów, w których jakaś część danych jest stale powiększana (np. zapis opcji programu) |
ON-LINE scripts!
In tutorial
baza danych w delphi