Prosta baza danych - magazyn części elektronicznych.

0

Witam
Z dwoma kolegami postanowiliśmy napisać małą, prostą bazę danych w delphi - magazyn części elektronicznych.
Na początku stworzyliśmy bazę BDE wg. tego Rozdział 16 ale po paru próbach doszliśmy do wniosku ,że to kombajn i jest z nim za dużo kłopotu.
Program ma wyglądać tak:

  • kategorie np. coś tam > tranzystory > jakieś tam. Po wybraniu ostatniej kategorii poniżej pokazuje się tabelka podzielona na kolumny np. Nazwa, rodzaj, ilość.
  • użytkownik ma mieć możliwość w każdej chwili usunąć/ dodać kolumnę, usunąć/dodać kategorię - tabelę (bazę), dodać/usunąć/ edytować wpis w tabeli.

To chyba tyle, na czym byłoby najłatwiej to uzyskać ?
Zastanawiam się nad plikami HOL, to dobry pomysł?
Z góry dzięki za pomoc.
Pozdrawiam

0

masz do wyboru całą masę rozwiązań: firebird embed (silnik potężnej bazy z przeznaczeniem do lokalnego zastosowania - zdaje się, że możesz użyć komponentów bazodanowych z delphi) lub np. moją ulubioną SQLite (mała, świetna na bazy lokalne, bez instalowania zbędnych rzeczy, pojedynczy plik dll - w internecie znajdziesz sporo o niej)

0

Hmm, może rzeczywiście SQLite to dobry pomysł, nie wiem wszystko wyjdzie w praniu (pisaniu).
Chciałem pobawić się plikami HOL z tego artykułu Bazy danych oparte na własnych formatach lecz plik który trzeba pobrać holfile.dcu jest już niedostępny. Może ktoś go posiada i mógłby udostępnić ?

0

Osobiście polecam SQLite, ale skoro chcesz hol, to hol masz w załączniku :)

0

Dzięki, właśnie coś próbuję zrozumieć tego SQL w delphi tylko oczywiście jak zwykle mam problem który doprowadza mnie do szały bo to powinno i pewnie jest proste a mi jak zwykle nie działa. :D Tj. wyskakuje mi błąd [Fatal Error] Unit1.pas(7): File not found: 'SQLiteTables3.dcu' korzystam z tego artykułu SQLite w Delphi . Pliki mam skopiowane do folderu z projektem ale dalej coś nie działa. Spróbowałem dodać component ale coś się posypało :)
Oczywiście przykład z paczki działa bez problemu, grahh :D

0

Można także skorzystać z Automatyzacji - Excel, Access.....

0
  1. jeśli programujesz tylko dodając komponenty to daleko nie zajedziesz :( To co ściągnąłeś to nie komponent
  2. tam masz przykładowy projekt, zobacz w pliku uTestSqlite.pas jak to się wszystko obsługuje
  3. musisz w uses swojego unitu dodać SQLiteTable3 - patrz jak to jest w powyższym pliku
0
  1. wiem, i wcale tak nie jest jak mówisz :P
  2. oglądałem i już do tego doszedłem
  3. wpisałem, bez przesady - zamiast SQLiteTable3 miałem SQLiteTables3. Jedna literka a ile zmienia :D
0

czyli dasz sobie radę, jak nie będziesz zapominał literek :P

Ściągnij sobie z http://sqlitestudio.one.pl program do zarządzania bazami sqlite (świetne narzędzie przy projektowaniu, sprawdzaniu), z tym, że polecałbym ściągnąć starszą wersję (np. 1.1.3) o ile nie masz bardzo dobrego kompa - nowa ssie :(

0

Jest jeszcze jedna sprawa która mnie trapi i z którą był problem na BDE tj. dodawanie nowej kolumny do stworzonej wcześniej tabeli.
Da się to zrobić?

0

Tak, już do tego doszedłem ale dzięki za odp.
Te SQLite jest świetne :D

Edit
SQLIteBaza.ExecSQL('ALTER TABLE tabela add nazwa numeric(2,0)');
Tak działa, dodało ale czy da się zamiast nazwa dać zmienną lub zawartość edita?
Próbuję tak:
SQLIteBaza.ExecSQL('ALTER TABLE tabela add 'edit4.text' numeric(2,0)');
ale oczywiście nie działa xD

0

Jak już musisz, to:

SQLIteBaza.ExecSQL('ALTER TABLE tabela add ' + edit4.text + ' numeric(2,0)');
0

Dobra, od teraz będę tutaj pisał w ostateczności bo znowu ledwo po kliknięciu wyślij udało mi się to zrobić, trochę na okrętkę ale jest :D

SQLIteBaza.ExecSQL('ALTER TABLE tabela add "'+edit4.text+'" numeric(2,0)');

Dzięki, za poświęcenie mi czasu. Widać ,że się na tym (sql i delphi) znasz :D

0

I jeszcze mała podpowiedź, często będziesz miał w zapytaniu wstawiane wartości z editów itp. Można to zrobić tak (łatwo się machnąć):

SQLIteBaza.ExecSQL('ALTER TABLE tabela add ' + edit4.text + ' numeric(2,0)');

lub w bardziej rozsądny sposób, czasem tych editów może być więcej:

var
  sql : String;
begin
  sql := 'ALTER TABLE tabela add :EDIT numeric(2,0)';  
  SQLIteBaza.AddParamText(':EDIT', edit4.text) ;
  SQLIteBaza.ExecSQL(sql);

I to już pozostawiam ci do rozpracowania - polecam źródła samej biblioteki.

0

Cześć, ja mam takie dodatkowe pytanie dotyczące SQLite.
Istnieje możliwość zapisania do pola typu BLOB zdjęcia? Chodzi mi o to aby w bazie było zapisane zdjęcie (a nie ścieżka do niego) i w razie potrzeby można byłoby na podstawie zawartości BLOBa wyświetlić obraz na Image (bez konieczności posiadania .jpg,.bmp na dysku)??

0

nr1kacper, tak oczywiście istnieje. Jeśli korzystasz z tej biblioteki: http://www.itwriting.com/repos/sqlitewrapper/trunk/sqlitesimpledelphi.zip , to masz tam przykład takiego zapisu i odczytu zdjęcia. Przejrzyj źródła i wszystko będzie jasne.

0

Cześć, to znowu ja.
Jak zrobić żeby np. do komponentu zostały wrzucone wszystkie tabele z bazy i gdy wybiorę odpowiednią tabelę wtedy program się z nią połączy i będzie można wykonywać na niej operacje ?
Z góry dzięki za odpowiedź.

0

Wrzucić to można coś do kosza - wyjaśnij po polsku co właściwie chcesz. Program nie jest połączony z pojedynczą tabelą, ale z bazą zawierającą tabele. Napisz w ludzki sposób o co chodzi :>

0

Hmm, ok może rzeczywiście trochę ,źle to ująłem. :)
Mam komponent comboBox (rozwijana lista). Przykładowo w mojej bazie baza2 mam 10 tabel: tabela1, tabela2, tabela3 itd.
Jak zrobić tak żeby te wszystkie tabele były do wyboru w tym comboboxie?
Oczywiście on ma się aktualizować tzn jeżeli dodam tabele o nazwie samochody to do tego komponentu też ma się dodać.
Po wyborze jakieś tabeli w tym komponencie program ma się z tą tabelą połączyć żeby potem np dodać kolumnę.
Mam nadzieję ,że teraz trochę przejrzyściej to pisze :)

EDIT
Coś takiego jak na załączniku, wybieram tabelę, potem wpisuje nazwę nowej kolumny, wybieram jej typ i jej dodaję. Tylko do tego właśnie potrzebuję tego comboboxa i automatycznego dodawania do niego wszystkich tabel.

0

Dobrze, ale najpierw mi wytłumacz po co chcesz z programu dodawać kolumny do tabel? Nie lepiej mądrze zaplanować samą tabelę?

0

No właśnie w tym wypadku nie, znajomy dla którego ten program jest tworzony sam sobie będzie w programie tworzył te tabele, uzupełni danymi i np. przypomni mu się, że zapomniał dodać jedną kolumnę no to ciach dodaje ją sobie i po problemie. Tak samo chcę zrobić z usuwaniem kolumny. Podobnie tzn. w comboboxie wszystkie tabele i którą sobie wybierze ta mu się wyświetli tylko jeszcze nie wiem w czym ( w jakim komponencie będzie najłatwiej) + edycja i usuwanie rekordów. :)

0

Nie umiesz pobrać tych informacji (np. nazw tabel) czy nie umiesz ich wsadzić do combobox'a?

Do wyświetlania informacji zgromadzonych w bazie możesz wykorzystać np. TWebBrowser - przeglądarkę internetową - po prostu generujesz html, wsadzasz do niego to co wyciągnąłeś z bazy i się wyświetla. Tym bardziej, że nie znasz właściwie liczby kolumn jaka będzie do wyświetlenia.

Naprawdę przemyśl sobie stworzenie dobrze zaprojektowanych tabel - wtedy bez ingerencji w strukturę bazy będzie można wkładać tam bardzo różne rzeczy.

No dobra, niech ci będzie - przykład jak korzystając z wyżej wspomnianej biblioteki "wsadzić" nazwy tabel do combobox'a:

Tabela := Baza.GetTable('select name from sqlite_master where type = "table"');
while not Tabela.EOF do
   begin
   ComboBox1.Items.Add(Tabela.FieldByName['name']);
   Tabela.Next;
   end;

Zaglądaj na stronę http://sqlite.org/ - to jest naprawdę prosta baza, a tam znajdziesz prawie wszystko...

Ot, poczytaj sobie np. Pomoc w utworzeniu relacji w bd. - tu np. trzeba by było dodawać kolumny jeśli jest tłumacz lub je usuwać - przemyśl sobie projekt bazy!!!

Ok, jeśli jutro znajdę trochę czasu napiszę jaka zaprojektować taką bazę np. dla elementów elektronicznych, żeby można było tam wszystko przechowywać bez konieczności jakichś dziwnych operacji....

0

Cześć
Dzięki za pomoc, przydała się.
W końcu odszedłem od pomysły dodawania kolumn itd.
Jednak teraz mam problem z czymś innym.
Stworzyłem sobie ładnie backup danych który pakuje mi przez komponent DelphiZip plik z bazą i takie tam moje pomocnicze potrzebne do działania do pliku.zip. Wszystko ładnie działa ale problem pojawia się przy Imporcie plików tzn. jak zrobić to za pomocą tego w/w komponentu aby stare pliki podmienić wypakowywanymi ? Kolejny problem jest taki ,że program nadal jak by używał plik baza.dat czyli naszą bazę przez nie mogę go usunąć ani podmienić. Jak przerwać te połączenie między nimi?
Z góry dzięki za pomoc. : )

EDIT
Poradziłem sobie z drugim problemem przez SQLiteTabela.Destroy; ; )

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