Skocz do zawartości
Cynkiel

Delphi ---> pytanie trywialne

Rekomendowane odpowiedzi

Otóż jak w temacie pytanie jest zapewne trywialnie proste, otóż mam do zrobienia projekt (baze danych). Mam problem ze wszystkim (niedawno zaczelem sie w to bawic). Więc chcialbym stworzyc sobie jakis tam plik rekordowy który bedzie przechowywał dane np. studentów, a dodawac ich, wyswietlac i edytowac chcialbym w okienkach edit.. podobnie z wyszukiwaniem. Wiem ze do moze byc dla niektórych naprawde banalne i moze nie chciec sie wam pisac, ale jak mozecie to piliss :wink:

A moje pytania sa nastepujace:

1. Jak ztworzyc plik rekordowy

2. Jak zapisywac z poszczególnych editów poszczególne dane, a nastepnie w nowej formie pokazac je tak jak powinny czyli np. imie w imieniu itd.

Dzieki bardzo

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

1. Jak ztworzyc plik rekordowy

type  osoba = record            imie : string[20];            nazw : string[30];            wiek : byte;          end;var  plik : file of osoba;
Zapis:

os.imie := 'imie';os.nazw := 'nazwisko';os.wiek := 21;write(plik, os);

2. Jak zapisywac z poszczególnych editów poszczególne dane, a nastepnie w nowej formie pokazac je tak jak powinny czyli np. imie w imieniu itd.

A moglbys jeszcze raz normalnie wytlumaczyc o co Ci chodzi?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

A moglbys jeszcze raz normalnie wytlumaczyc o co Ci chodzi?

Mam forme bazy, prezentuje sie ona tak:

 

Dołączona grafika

 

I tutaj mają być wyświetlane osoby których szukam, np. wpisuje sobie w szukaniu Kowalski i obok go widze (nie dodałem jeszcze przycisku szukaj ale luz).

 

Natomiast dodawanie do bazy wygląda tak:

 

Dołączona grafika

 

No i oczywiście jak sie domyślasz to co tutaj wpisze chcię zby było dodane do np. baza.dat, a wyswietlone w/g szukania w pierszym oknie.

--> Z góry dzieki za podpowiedz

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

No i oczywiście jak sie domyślasz to co tutaj wpisze chcię zby było dodane do np. baza.dat, a wyswietlone w/g szukania w pierszym oknie.

No rozumiem, ale z czym konkretnie masz problem? Z zapisem wpisanych w okienko danych do pliku? Z odczytem ich i wpisaniem do okienek?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

No i oczywiście jak sie domyślasz to co tutaj wpisze chcię zby było dodane do np. baza.dat, a wyswietlone w/g szukania w pierszym oknie.

No rozumiem, ale z czym konkretnie masz problem? Z zapisem wpisanych w okienko danych do pliku? Z odczytem ich i wpisaniem do okienek?
Tak dokładnie o to chodzi. No a potem z szukaniem, ale najpierw chciałbym mieć chociaż coś zrobione :wink:

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Przykladowy zapis rekordu do pliku juz podalem, kazde kolejne wywolanie write(plik, rekord) powoduje dopisanie rekordu do pliku, mozesz na taki plik "patrzec" w pewnym sensie jak na tablice rekordow (bo sa to rekordy poukladane jeden obok drugiego).

Odczyt jest podobny (na przykladzie powyzszych deklaracji):

var os : osoba;...read(plik, os);
Teraz w rekodzie 'os' masz dane z odczytanego rekordu z pliku. Kazde kolejne wywolanie read z tymi parametrami powoduje wczytanie nastepnego rekordu z pliku (w ten sposob w petli wczytujesz calosc).

 

Zapis danych z okienka do pliku?

Najpierw trzeba wypelnic rekord danymi z Edit'ow a potem to zapisac, wiec dla powyzszego przykladu w procedurze OnClick jakiegos przycisku mialbys mniej wiecej cos takiego:

var   os : osoba;  plik : file of osoba;  os.imie := EditImie.Text;os.nazw := EditNazw.Text;os.wiek := StrToInt(EditWiek.Text); { nie pamietam czy dokladnie tak sie nazywala f. konwertujaca string na liczbe, ale nie o to tu chodzi...}assign(plik, 'jakas_nazwa');append(plik);write(plik, os);close(plik);

Odwrotnie z pliku do okienka juz sobie chyba przez analogie poradzisz?

 

A co do szukania to najprosciej w petli wczytywac rekord po rekordzie i sprawdzac czy ten wlasnie wczytany ma takie nazwisko jak chcemy, jesli ma to wpisanie jego danych do okienka i break.

 

edit: byl maly blad ;]

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Chyba jestem na dobrej drodze :D

Otóż tworze plik, dodaje do niego rekord, czytam z niego rekord tylko, że każdy kolejny dodany rekord nadpisuje sie na ten wczesniej zapisany. A

append(plik);

nie może chyba być ((incompatible types)zrobilem reset ale nadpisuje pliki) Tak wiec mój problem polega teraz nie na tworzeniu a na dodawaniu, zebym mógł dodac wiecej niz jeden rekord nie wiem moze jakos +1 ale jak to zapisac? :?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

No tak.. append dziala tylko dla plikow tekstowych, teraz mam dostep do helpa to mozemy poszalec ;)

 

uzyj wiec:

reset(plik);Seek(plik, FileSize(plik));
To przesunie "wskaznik plikowy" na sam koniec i zapisanie czegos (rekordu) doda go na koniec, czyli to co chcesz.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

"seek" działa, chyba zaczynam coraz wiecej qmac z tego wszystkiego. Jezeli chce wyswietlic ktoregos z zapisanych ziomków w pliku, to musze go przeczytac tak jak wczesniej napisales przez read(plik) i jezeli znajdzie to co zapisalem w edicie szukania to wtedy ma wyswielic write(plik) i wyszczególnionych editach tak :?: Jezeli tak to zorzumienie tego nie jest takie złe (gorzej moze byc w praktyce), oki teraz spadam próbowac jak do jutra nie zrobie to sie odezwe :wink:

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jezeli chce wyswietlic ktoregos z zapisanych ziomków w pliku, to musze go przeczytac tak jak wczesniej napisales przez read(plik) i jezeli znajdzie to co zapisalem w edicie szukania to wtedy ma wyswielic write(plik) i wyszczególnionych editach tak  :?:

Do momentu znalezienia dobrze, ale po co Ci write?? Jak juz znajdzie ten rekord to poprostu wyswietlasz go w sposob podany wyzej w editach (kazde pole rekordu w swoim) i przerywasz petle czytajaca z pliku (no chyba ze kilka osob ma takie same nazwisko, ale wtedy juz musialbys zdecydowac co w takim przyapdku robic, czy wsywietlac wszystkie znalezione czy, prosciej, tylko pierwszy znaleziony).

 

Powodzenia.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

No to już sie odzywam, jednak nie jest to tak trywialne jak sie wydawalo na poczatku. Z czytaniem nie mam problemu ale jednego wpisu, natomiast jak mam ich więcej no to musz ich szukać i tutaj zaczynają sie schody... plssss ja musze to miec zrobione na 10.I.2k4 :roll: A jaeszcze tyle rzeczy zostało edycja, usówanie i wyświetlanie w lisboxie ... ah strach myśleć. Dobrze że chociaż ktoś jest na forum kto mnie rozumie :lol:

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

natomiast jak mam ich więcej no to musz ich szukać i tutaj zaczynają sie schody...

No przeciez wyszukiwanie jest liniowe, czyli czytasz jeden po drugim i sprawdzasz...

while not eof(plik) do begin  read(plik, os);  if os.nazw = 'szukane_nazwisko' then begin    EditImie.Text := os.imie;    ...    break;  end;end;

plssss ja musze to miec zrobione na 10.I.2k4  :roll:

No to juz nie moja wina, ze sie tak pozno obudziles... przyznaj sie kiedy Wam to zadali? :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

No to juz nie moja wina, ze sie tak pozno obudziles... przyznaj sie kiedy Wam to zadali?

No więc zadali przed świętami, czyli rok temu :oops: ...

 

Oczywiście szukanie działa, za co wielkie dzięki.

Rozumiem, że usówanie bedzie wyglądało tak jak z szukaniem, tzn najpierw szukam, jak znajde chce usónąć, tylko jak sie zapisuje usunięcie z rekordu :?:

 

Sorry za te ciągłe pytania ale z tego co piszesz to @ll qmam i weim o so chodzi :wink:

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Rozumiem, że usówanie bedzie wyglądało tak jak z szukaniem, tzn najpierw szukam, jak znajde chce usónąć, tylko jak sie zapisuje usunięcie z rekordu  :?:

Po pierwsze to usUwanie ;p a po drugie to juz nie takie hop siup, w wersji prostszej robisz tak, ze usuniety rekord zapisujesz rekordem zerowym (wszystkie skladowe na 0, stringi na '' etc.) i potem taki przy szukaniu/wyswietlaniu pomijasz.

Druga, trudniejsza, wersja to odczytac ostatni rekord z pliku, wsadzic go na miejsce tego usuwanego i usunac ten ostatni (funkcja truncate).

Sorry za te ciągłe pytania ale z tego co piszesz to @ll qmam i weim o so chodzi  :wink:

Jak na moje kiepskie zdolnosci pedagogiczne to jestem w szoku ;)

Wykaz tylko troche wiecej swojej inicjatywy, bo mi juz semestr leci i mam swoje rzeczy do roboty, a te stawiam wyzej niz Twoje ;P

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nie mogę tego zrobić, mam to na jutro, a jak stosuje truncate to obcina mi całość, nie mam pojęcia jak to zrobić, jak pomożecie ok, jak nie to jakos bede sie tłumaczył :cry:

Ale jeszcze bede dzisiaj próbował :idea:

// dodano

Co w tym jest źle ? Pod dane w rekordzie który znajduje, chce podstawic '' czyli nic i zapisac czemu nie chce działac ?

var

plik: file of osoba;

os: osoba;

szuk:string;

begin

 assignfile(plik, 'baza.dat');

 reset(plik);

 szuk:=edit11.Text;

 while not eof(plik) do

   begin

     read(plik, os);

       if os.nazwisko = szuk then

         begin

           os.imie:='';

           os.nazwisko:='';

           os.ulica:='';

           os.ulnr:='';

           os.miasto:='';

           os.miastokod:='';

           os.telkier:='';

           os.teldom:='';

           os.telkom:='';

           os.mail:='';

           write(plik,os);

         end;

 

 closefile(plik);

   end;

\\dodano

 

Już mam :!: :!: :!:

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...