Generowanie numeru serii

0

Witam

Mam problem, w związku z generowaniem numeru seryjnego. Chodzi o to, że na drukowanym bilecie ma się pojawić numer serii. Seria zaczyna się od 0 do 100000 + data (dzień, miesiąc). Po upływie 100000 cykl się powtarza. Zupełnie nie wiem jak się do tego zabrać, choć to podstawy..., ale świeżak jestem i proszę o pomoc.

pozdrawiam

0

for .. to, IntToStr, FormatDateTime - i wszystko. Pokaż co już masz...

albo zacznij od tego: http://4programmers.net/Delphi/Kompendium/Rozdział_2#id-Ptle

0
 procedure blalalall1Click(Sender: TObject);
var
  pop: Integer;

begin

  for pop := 1 to 100000 do



form5.label5.Caption:=inttostr(pop);

end;

pokazuje mi 100001 :/, a chce by bylo jeden, pozniej 2, itd...
z data będzie ok... to czaje :)
ale ta pętla??

0
for pop := 1 to 100000 do
   form5.label5.Caption:=IntToStr(pop);

Toż ci pokazuje, ale tak szybko, że nie zauważyłeś, że przeleciały wszystkie ;)

Daj sobie na formę Memo i zmień trochę program, zobaczysz, że generuje wszystkie:

for pop := 1 to 100000 do
   Memo1.Lines.Add(IntToStr(pop));
0

Możesz wygenerować sobie numery tak jak pokazali powyżej chłopaki za pomocą pętli lub pojedynczo klikając na Button np.:

var
  nrb:cardinal; //zmienna globalna

//przypisz wartosc 0 do zmiennej przy starcie prog.
procedure TForm1.FormCreate(Sender: TObject);
begin
  nrb:=0;
end;

//generuj nr biletu z dzisiejsza data
procedure TForm1.Button1Click(Sender: TObject);
begin
  Inc(nrb);  //zwieksz o 1 lub Dec - zmniejsz o 1
  Memo1.Lines.Add('Nr: '+IntToStr(nrb)+' - data: '+FormatDateTime('dd-MM', Now));
  if nrb = 100000 then Button1.Enabled:=False;
end;

A tak w ogóle to zacznij od podstaw

0

Dziękuję wszystkim bardzo za pomoc. Spoko wszystkie wersje sprawdzone i działają. Chyba muszę zakupić jakiś podręcznik, bo na helpie nie ujadę :P.

Wracając do prg to problem jest jeszcze taki, że po wyłączeniu programu seria idzie od 1 znowu. Ogólnie program jest z bazą danych. Może nadpisywać numer serii w polu w bazie po każdym drukowaniu(kliknięciu) ? A po ponownym uruchomieniu sprawdzać jaki jest numer w polu i zaczynać od tej wartości. Tylko,że jak baza będzie pusta, bez recordów to i numeru nie będzie... może jakoś inaczej to zapisywać? choćby w pliku.txt?

pozdrawiam

0
czapka123 napisał(a)

Tylko,że jak baza będzie pusta, bez recordów to i numeru nie będzie... może jakoś inaczej to zapisywać? choćby w pliku.txt?

Skoro masz bazę to dodatkowy plik tekstowy to już nadmiar szczęścia. Przecież możesz sprawdzić ilość rekordów w bazie i jeśli jest równa 0 to ustawić numer na 0. Jeśli nie, to wybierasz największy numer, dodajesz do niego 1 i jedziesz dalej.

Co do podręcznika, to nie lepiej wydać kasę na dobre piwo? I poczytać sobie:

  1. http://4programmers.net/Delphi/Kompendium
  2. http://4programmers.net/Delphi/Vademecum
0

Wszystko spoko tylko muszę się odwołać do konkretnego pola tak ? Dajmy na to,ze mam kolumnę w bazie na numer seryjny..., a numer zapisywany jest różnie...raz w 3 rzędzie, raz w 6, raz w 7... itp.... czy mogę mieć przypisaną jedną jedyną komórkę (pole) na numer seryjny i do niej się odwoływać ?

0
czapka123 napisał(a)

Wszystko spoko tylko muszę się odwołać do konkretnego pola tak ? Dajmy na to,ze mam kolumnę w bazie na numer seryjny..., a numer zapisywany jest różnie...raz w 3 rzędzie, raz w 6, raz w 7... itp.... czy mogę mieć przypisaną jedną jedyną komórkę (pole) na numer seryjny i do niej się odwoływać ?

Przepraszam, ale to co piszesz jest albo bardzo niejasne, albo brakuje Ci podstaw. W każdym razie nie rozumiem tych "rzędów"

Np. masz w bazie tabelę BILETY

id | numerSeryjny | miejsceRzad | miejsceNumer |

wtedy za pomocą zapytania sql możesz wydobyć interesujące informacje

ilość rekordów

select count(*) from bilety

najwyższy numer

select max(numerSeryjny) from bilety

miejsce i numer na jaki został wydany bilet o numerze np. 1

select miejsceRzad, miejsceNumer from bilety where numerSeryjny = 1
0
madmike napisał(a)
czapka123 napisał(a)

Wszystko spoko tylko muszę się odwołać do konkretnego pola tak ? Dajmy na to,ze mam kolumnę w bazie na numer seryjny..., a numer zapisywany jest różnie...raz w 3 rzędzie, raz w 6, raz w 7... itp.... czy mogę mieć przypisaną jedną jedyną komórkę (pole) na numer seryjny i do niej się odwoływać ?

Przepraszam, ale to co piszesz jest albo bardzo niejasne, albo brakuje Ci podstaw. W każdym razie nie rozumiem tych "rzędów"

Np. masz w bazie tabelę BILETY

id | numerSeryjny | miejsceRzad | miejsceNumer |

wtedy za pomocą zapytania sql możesz wydobyć interesujące informacje

ilość rekordów

select count(*) from bilety

najwyższy numer

select max(numerSeryjny) from bilety

miejsce i numer na jaki został wydany bilet o numerze np. 1

select miejsceRzad, miejsceNumer from bilety where numerSeryjny = 1

Przecież on nawet podstaw nie kuma, a ty mu tu z zapytaniami wylatujesz. :) :)

0

OK, program generuje numer serii. Dochodzi kolejny problem. Dla każdej różnej (zmiennej) ceny biletu, seria ma mieć wyróżnienie literowe np. bilet za 1 zł seria: A000001 itd., bilet za np. 3 zł seria: B000001, za 4 zł C0000001 itd, za blablabla zł seria: XYZ000001. baza BDE komponent TTable.

w DBGridie mam takie kolumny:

NAZWA|CENA ulgowa|CENA norm|DATA| GODZ.|Table1m1|Table1m...|

Czy szanowni koledzy mieliby jakiś pomysł ? Od 1,5 miesiąca mam styczność z programowaniem w delphi i w ogóle. Staram się edukować w trakcie pisania programu i zaglądam często na http://4programmers.net/Delphi/Kompendium. Prawda jest tak, że w większości dochodzę do wszystkiego na "piechotę".Wiem też, że można dojść do określonego celu prościej. To wymaga czasu, a tego jak zawsze mało;) Proszę o wyrozumiałość

pozdrawiam

0

Po pierwsze przemyśl sobie wszystko dobrze i poskładaj do kupy to co chcesz zrobić. Na razie to wygląda na prowizorkę, która zmienia się w trakcie pracy. W każdym razie nie chciałbym używać programu, który w ten sposób powstaje.
Teraz pytanie: to jest jakiś zlecony projekt, na zaliczenie czy dla przyjemności?
Jeśli zlecony czy też dla przyjemności uczenia się, to bym odradzał bde, a raczej użył bym czegoś z czego "rozgryzania" w przyszłości można wyciągnąć jakąś korzyść.

0

Projekt hobbystyczny dla mnie na przyszłość :). Forma nauki.

Czyli co, w BDE nie ogarnę tej serii ?

0

Ogarniesz, ale IMHO to jest trochę bez sensu, zwłaszcza, że czas cię nie goni. O ile się nie mylę, to na tym forum znajdziesz opinie, że BDE to przeżytek.

Inna sprawa - naucz się nie wiązać bazy danych z komponentami bazodanowymi w delphi. "w dbgridzie mam takie pola" - to jest mylące i niepokojące.
Na twoim miejscu jako bazę wybrałbym np. firebirda albo sqlite. Może trochę więcej pisania kodu, ale nabyte wiadomości przydadzą się na przyszłość.

Rozpisz sobie tabele jakie tworzysz w celu zapisania danych. Rozpisz je na kartce i spóbuj sobie wyobrazić jakie dane pobierasz. Co naprawdę jest potrzebne. Rozbij te dane, nie muszą się zawierać w jednej tabeli. Np.

Tabela ceny (tu masz ceny biletów i identyfikator serii - w bazie to nie musi być A, B ale np. 1, 2, 3 - później to się zamieni). Jeśli zapiszesz ceny w osobnej tabeli masz możliwość dodawania nowych typów biletów, zmiany ich cen bez ingerowania w program. Zmieniasz tylko dane w tej tabeli.

id oznaczenie cena
1 A 20
2 B 30

tabele bilety, gdzie zapisujesz sobie dane biletu czyli serię, miejsce, datę

id idCeny numerSerii
1 2 0001
2 1 0002

Naucz się operować na danych z bazy danych za pomocą zapytań sql. Np. sqlite zapytanie na takich tabelach:

select (ceny.oznaczenie || bilety.seria) as NumerBiletu, ceny.cena from ceny, bilety where ceny.id = bilety.idCeny

daje odpowiedź:

NumerBiletu Cena
B0001 30
A0002 20

Zobacz, że próbuję zrzucić część pracy na bazę danych.

A w tabeli bilety zapisuję w idCeny identyfikator ceny czy też rodzaju biletu. Zobacz, że np. bilet o id = 1 to bilet o numerze serii 0001 i cenie 30 zł (patrzę na idCeny=2 i zaglądam sobie to tabeli ceny, żeby zobaczyć co znaczy ta 2, a oznacza oznaczenie biletu B i cenę 30). Te wszystkie dane można sobie wydobywać z tabel zapytaniami sql.

Ściągnij sobie np. program SQLStudio i spróbuj za pomocą prostych zapytań stworzyć tabele i wydobywać z nich dane, takie jakie ciebie interesują. Jeśli się tego nauczysz, to odejdzie ci połowa roboty z każdym przyszłym programem. Inna sprawa, że łatwo jest zrobić, żeby baza danych generowała numer serii, czas itp. Wtedy delphi używasz do sterowania tym procesem, prezentowania danych.

BTW: ostatni program z wykorzystaniem BDE robiłem jakieś 8 lat temu i prawdę mówiąc wcale mi się nie pali, żeby sobie przypominać jak to się robi ;)
BTW: Starałem się wyjaśnić prosto, dać jakiś pomysł, nie wiem czy mi się udało... Aha, speców przepraszam za uproszczenia :)

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