Prosta baza danych - magazyn części elektronicznych.

Prosta baza danych - magazyn części elektronicznych.
VI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 23
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

madmike
  • Rejestracja: dni
  • Ostatnio: dni
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)

VI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 23
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ć ?

madmike
  • Rejestracja: dni
  • Ostatnio: dni
0

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

VI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 23
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

MA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
0

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

madmike
  • Rejestracja: dni
  • Ostatnio: dni
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
VI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 23
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
madmike
  • Rejestracja: dni
  • Ostatnio: dni
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 :(

VI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 23
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ć?

madmike
  • Rejestracja: dni
  • Ostatnio: dni
VI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 23
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

madmike
  • Rejestracja: dni
  • Ostatnio: dni
0

Jak już musisz, to:

Kopiuj
SQLIteBaza.ExecSQL('ALTER TABLE tabela add ' + edit4.text + ' numeric(2,0)');
VI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 23
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

Kopiuj
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

madmike
  • Rejestracja: dni
  • Ostatnio: dni
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ąć):

Kopiuj
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:

Kopiuj
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.

N1
  • Rejestracja: dni
  • Ostatnio: dni
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)??

madmike
  • Rejestracja: dni
  • Ostatnio: dni
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.

VI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 23
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ź.

madmike
  • Rejestracja: dni
  • Ostatnio: dni
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 :>

VI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 23
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.

madmike
  • Rejestracja: dni
  • Ostatnio: dni
0

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

VI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 23
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. :)

madmike
  • Rejestracja: dni
  • Ostatnio: dni
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:

Kopiuj
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....

VI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 23
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; ; )

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.