Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[Pascal] Prosta baza danych

Saviko 30 Gru 2017 15:37 399 9
  • #1 30 Gru 2017 15:37
    Saviko
    Poziom 12  

    Witam, mam do stworzenia "bazę danych". Na typie rekordowym.

    Mam mieć w niej kilka procedur:
    -dodającą użytkowników;
    -usuwającą użytkowników;
    -wyszukującą za pomocą nr PESEL;
    -sortującą po nazwisku rosnąco

    Oraz dwie funkcję:
    -sprawdza czy ludzie wprowadzeni są pełnoletni;
    -sprawdza czy jest podana @ w mailu;

    Elementy mają być wprowadzane pojedynczo. Chcę zrobić, aby wypisywało wszystkich wprowadzonych użytkowników. Jednak problem w tym, że gdy wprowadzę już drugiego, to pierwszy jest jakoby nadpisywany i mi go nie wyświetla. W czym jest błąd?

    Kod: delphi
    Zaloguj się, aby zobaczyć kod


    Tak to wygląda mniej więcej:
    [Pascal] Prosta baza danych

    0 9
  • #3 31 Gru 2017 12:49
    Saviko
    Poziom 12  

    Już wyświetla poprawnie, dzięki. Jeszcze mam pytanie:
    Do napisania procedura, która usuwa wprowadzonych użytkowników. Zrobiłem do tego specjalną tablicę boolean, której wartość przy dodawaniu zmienia się na true jw. I chcę zrobić tak, żeby przy usuwaniu użytkownika wartość danego indeksu zmieniała się na false. Wtedy w razie potrzeby można "przywrócić" użytkownika, wiadomo nie zwolni to pamięci ale będzie taka możliwość. Jakieś wskazówki jak mniej więcej odnieść się do tej tablicy?

    Pomysł jest taki, by procedura startowała z wcześniejszego menu bodajże spod nr.3.
    Użytkownik zostanie poproszony o podanie który element tablicy ma zostać usunięty.
    Wtedy program ma zmienić wartość podanego pola w tab2 na false.

    Jeszcze nie wiem czy potrzebne jest przesuwanie tych elementów w tym wypadku, bo mimo wszystko gdy będzie 5 elementów, a usunę przykładowo 3, to ich kolejność się nie zmieni.

    0
  • #4 31 Gru 2017 12:58
    oloam
    Poziom 20  

    Sugerowalbym zrobienie osobnej tablicy do ktorej bedziesz kopiowal 'usuniete' rekordy.
    W celu przywrocenia rekordu wyswietlasz tablice z kopiami usunietych rekodrow nastepnie po wskazaniu rekordu , ktory chcesz odzyskac, kopiujesz go do wlasciwej tablicy a kasujesz z zapasowej.

    0
  • #6 31 Gru 2017 13:32
    oloam
    Poziom 20  

    Nie pamietam juz czy tak moze byc ale poprostu przepisujesz rekord do drugiej tablicy:

    Kod: delphi
    Zaloguj się, aby zobaczyć kod

    Ogolnie kasowanie:
    kopia rekordu do tablicy skasowanych
    usuniecie elemetu z tablicy podstawowej (przesuniecie wszystkich elementow tablic za 'usuwanym' elementem w lewo) (pamietaj o aktualizacji wielkosci tablicy
    Odzyskanie elementu:
    to samo co wyzej tylko tablice zamieniaja sie 'stronami'

    0
  • #7 31 Gru 2017 13:36
    drobok
    Poziom 28  

    Nie lepiej zrobić listę i zamiast kopiować cały rekord skopiować tylko wskaźnik ? Wtedy można by też zrobić dość prosto fifo do usuwania, by nie zajmować za dużo pamięci.

    0
  • #8 31 Gru 2017 13:42
    oloam
    Poziom 20  

    Pewnie lepiej. Z tym, ze :
    -wyglada mi to na zadanie ze szkoly, wiec zawezam wykorzystana wiedze do granic mozliwosci (chyba ze wskazniki tez byly :P)
    -wydaje mi sie, ze autor chce dodac taka funkcjonalnosc do zadania, bo nie mam mowy o przywracaniu rekordow w tresci zadania.

    0
  • #9 31 Gru 2017 14:08
    Saviko
    Poziom 12  

    Niestety nie mogę zrobić tego na listach, a wiem że byłoby prościej. Człowiek jak ograniczony, to i ślepy. A była mowa, że można zrobić to przesuwając dany element na koniec tablicy i po prostu usunąć, tak jak ja chcę(z możliwością przywrócenia) przy okazji dodawania do tablicy rekordu, to dodawać element do tablicy boolean i zastępowanie danego indeksu wartością true, albo właśnie kopiowanie. Tylko nie wiem jak się zabrać, żeby to skleić w całość, bo w przypadku zmiany wartości w tablicy boolean, w pętli w procedurze wyświetlania, zmieni mi jej wartość na false ale i tak wyświetli.

    0
  • #10 31 Gru 2017 14:29
    oloam
    Poziom 20  

    Saviko napisał:
    przy okazji dodawania do tablicy rekordu, to dodawać element do tablicy boolean i zastępowanie danego indeksu wartością true, albo właśnie kopiowanie. Tylko nie wiem jak się zabrać, żeby to skleić w całość, bo w przypadku zmiany wartości w tablicy boolean, w pętli w procedurze wyświetlania, zmieni mi jej wartość na false ale i tak wyświetli.


    Nie zabardzo widze o co ci tu chodzi...

    Jezeli uwazasz ze podane przeze mnie rozwiazanie nie jest zbyt prostackie to uzyj je. Jest proste w implementacji i zrozumieniu...

    0