[Delphi] Baza Paradox

0

Chciałbym stworzyć bazę paradox za pomocą Database Deskop i w zwiazkuz tym mam kilka pytań:

  1. Jak za pomocą DataBase Deskop utworzyc w bazie Indeksy?
  2. Czy do w jednej tabeli mozna utworzyc tylko jeden indeks czy kilka?
  3. Jak połączyc kilka tabel relacjami?
  4. Jak ustawic polski jezyk, żeby nasze znaczki były widoczne?

Nie dziwcie sie za pytania ale nie znam anglika i troche ten program jest mi niezrozumiały.

Pozdr. ;)

0
  1. Rozumiem, że pisząc "indeksy" masz na myśli klucze główne. Ustawiasz je przez podwójne kliknięcie w kolumnie "Key" w wierszu odpowiadającym nazwie pola klucza.
  2. Klucz jest jeden ale może składać się z kilku pól.
  3. Nie wiem, czy w Paradoxie jest to możliwe. Relacje możesz uwzględniać w zapytaniach.
  4. Bij, zabij - nie wiem :)
0

ad. 5 Otwierasz DatabaseDesktop, wczytujesz swoją tabelę -> Restructure -> Table Properties -> Table Language -> Modify -> Paradox Polish 852

0
  1. Klucz jest jeden ale może składać się z kilku pól.

Hes możesz mi to troszeczke rozjaśnić.

Pozdr. ;)

0

Zadaniem klucza głównego jest jednoznacza idetyfikacja rekordu w tabeli. Oznacza to, że każdy rekord zawiera niepowtarzalny klucz główny. Jeśli kluczem jest jedna kolumna to - rzecz jasna - w każdym rekordzie jej wartość musi być inna. Jeśli są to np. 2 kolumny, to ich wartości w rekordach mogą sie powtarzać, ale niepowtarzalna musi być kombinacja wartości tych dwóch kolulmn.

0

To jeszcz ejedno pytanie ma 3 kolumny 1, 2, 3 i j chciałbym ustawić jako klucz, tylko że np. 1 jest wypełniona, 2 nie, 3 też i tak rózne kombinacje - ale zawsze przynajmniej jedna kolumna z tych trzech jest wypełniona (wartości w poszczególnych polach kolumny nie będą si e powtarzać, no oprócz pustego pola).

Czy to będzie dobry klucz?

Pozdr.

0

Raczej unika się stosowania wartości NULL w kluczach, ale Paradox chyba na to pozwala, więc jeśli uważasz to za właściwe rozwiązanie... Bezpieczniej jest jednak wpisywać tam np. wartość 0. W ten sposób możesz uniknąć błędów powstałych na skutek braku wpisu w kluczu interpretowanych jako klucz.
W praktyce dąży się do uzyskania jednej kolumny klucza, nawet jeśli nie ma on innego zastosowania, jak tylko identyfikowanie rekordów.
Jeśli w swoim pytaniu masz na myśli konkretną tabelę to przedstaw jej opis. Postaram się powiedzieć Ci, czy rozsądnym rozwiązaniem jest stosowanie rozbudowanego klucza. Podejrzewam że nie.

0

Moja baza zaiwera dane podmiotów (firm i osób fizycznych) m.in.: REGON, NIP, PESEL, NAZWĘ, ADRES itd. Z pół REGON, NIP, PESEL chciałem stworzyć klucz tylko że firma nie ma PESELu więc pole to będzie miało wartość null no i firma ma tylko REGON i NIP nie zaś PESEL.
Póżniej chciałbym za pomocą tych trzech pól sortować i filtrować tabelę.

Czy te moje rozwiązanie jest dobre??

Pozdr. ;)

0

Ale chyba wszystkie rekordy będą miały NIP, więc kluczem mógłby być NIP. Ale możesz założyć, że do Twojej bazy możnaby wpisywać nowe dane nawet, jeśli NIP jest chwilowo nieznany. W praktyce zawsze robi się tak, że każda tabela tego typu ma dodatkową kolumnę ID, klucz główny, NOT NULL, najczęściej AUTO INCREMENT (IDENTITY), tak, że przy wpisywaniu nowego rekordu pole ID wypełniane jest automatycznie. Później w całej bazie do tej tabeli pozostałe tabele odnoszą się przez to ID. Jest to rozwiązanie zalecane i najbardziej chyba optymalne.

0

Dopisz się do tego tematu żeby nie zakłdać nowego. Chciałem się dowiedzić jak stworzyć baze Paradox'a w kodzie programu i poustawiać relacje między tabelami.

Tworzylem bazę komponentem Tsession, ale nie wiem jak poustawiać klucze główne i relacje między tabelami.

0
  1. jako kłucz główny najlepiej stosować pola typu integer + generator + trigger (w paradoxie autoinc). Nie ma komplikacji przy złączeniach z innymi tabelami. Na pola, które muszą być unikalne lepiej założyć index unique
  2. index to nie jest klucz główny. Index to jest index a klucz główny to klucz główny więc nie wymieniajcie tych pojęć zamiennie.
  3. klucz główny możesz mieć w danej tabeli tylko jeden (ale np. na wielu polach), natomiast indexów możesz mieć wiele
  4. indexy dodaje się przez AddIndex (czy jakoś tak, bo nie mam DD)
  5. paradox to zła baza do nauki, lepiej zainstaluj sobie FireBirda
  6. relacji się nie ustawia bo to jest byt "logiczny" czy też "wirtualny". W bazie do pilnowania poprawności relacji służą klucze obce (nie wiem czy paradox się ich dorobił).
0

Robisz jedną konkretną kolumnę z kluczem głównym i ona ma być NOT NULL, czyli zawsze tam musi być jakaś wartość liczbowa całkowita (Autoincrement) podana i wsio. Bez kombinowania.

Jeśli chodzi o język polski w tabeli to ja np. nie miałem z tym problemu i nie musiałem ustawiać nic.
Robi się to tak:
Tam gdzie tworzysz tabelę masz rozwijane Table Properties.
Zjedź suwakiem na sam dół i będziesz miał table Language.
Wybierz to a potem kliknij na Modify.
Znajdź takie coś jak: Paradox Polish 852.
Jeśli to nie pomoże to poszukaj też tam coś z 'PLK'.

A tak w ogóle to daj sobie spokój z Paradoxami, bo jest kaszanka i przerzuć się na bazy Interbase/Firebird.
Poczytaj kursy na temat składni SQL i wsio.

Super lekcje SQL: http://www.w3schools.com/sql/default.asp
FAQ SQL IB/FB: www.austrinus.prv.pl

Nerka.

0

Witam
Mam taki problem:
Chce stworzyć beze danych gdzie pomiędzy dwoma tablicami zachodzi relacja wiele-do-wielu. Np. załóżmy że jedna tablica zawiera nazwy miast a druga nazwy ulic. Zależy mi aby można było poprzez wskazanie w DBGrid danego miasta wyświetlały się np. w drugim DBGrid ulice TYLKO danego miasta. W innych DBGridach odwrotnie - po wskazaniu ulicy wszystkie miasta w których się znajdują takie nazwy ulic.
Ma ktoś pomysł jak to zrobić
Z góry dziękuje

0

dodatkowa tabela z dwoma polami - id_miasta i id_ulicy

0

Ok, rozumiem, ale jak wyświetlić tylko właściwe wyniki? Jakiś filtr, klucz?

0

powiedzmy, że masz takie tabele i pola
miasto

  • id_miasto
    nazwa
    inne

ulica

  • id_ulica
    nazwa
    inne

miastoulica

  1. id_miasto
  2. id_ulica
    • klucz główny
    • klucz obcy

wyświetlić w DBG1 wszystkie miasta a w DBG2 wszystkie ulice wybranego w DBG1 miasta

q1 (ds1) = SELECT * FROM miasto
q2 (ds2) = SELECT * FROM ulica u, miastoulica mu WHERE u.id_ulica = mu.id_ulica AND mu.id_miasto = :id_miasto

q2.MasterSource := ds1;

i masz gotowe. Na odwrót, tj DBG1 ulice a DBG2 miasta tak samo jak wyżej tylko zapytania jak było z tabeli miasto to teraz z ulica a jak z ulica to teraz z miasto.
Uwaga: w niektórych bazach parametry podaje się inaczej niż poprzedzając je : (o ile pamietam w MSSQLu poprzedza się je ?)

0

Mój błąd. Zapomniałem napisać że chodzi mi o tablice DBTable. Na Querach się nie znam a Twoja odpowiedź wygląda mi na wzór tablic SQL'owych.
Jeśli tak musze to zrobić to napisz mi prosze jak powiązać DBTable z SQL tak abym mógł normalnie pracować na DBTable (jeśli się da oczywiście) bo nie za bardzo wiem jak mam to wykorzystać :/

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