Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Autonumeracja (licznik), zalezna od roku
SamoChwała
post
Post #1





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 28.07.2004
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Witam,

Jak mozna rozwiązć problem autonumeracji (licznika) pola np. ID zaleznego od roku, zachowując ciągłoś numerowania danego rocznika. Baza jest aktualizowana praktycznie na bieżąco, jedna zdarza się wstawiać rekord lub kilka z lat poprzednich. Do tej pory dane były zapisywane w osobnych tabelach, ale zaczyna to być uciążliwe.

Czy zechce mi ktoś pomóc!


--------------------
Pozdrawiam, SamoChwała
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
mhs
post
Post #2





Grupa: Zarejestrowani
Postów: 764
Pomógł: 3
Dołączył: 30.04.2003

Ostrzeżenie: (0%)
-----


a czy nie lepiej jest przechowywac w osobnym polu date danego zdarzenia? nie wiem jak chcesz wplynac na system zarzadzania baza danych aby ten uzaleznial numerowanie rekordow (w tym przypadku mowimy o polu AUTO_INCREMENT, ktore jest kluczem (sztucznym) glownym tabeli) od roku....... mozesz podac wiecej szczegolow dotyczacych tego w jaki sposob sa do tej pory zorganizowany jest projekt bazy oraz jaki mialby byc po przeprowadzonych zmianach?
Go to the top of the page
+Quote Post
SamoChwała
post
Post #3





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 28.07.2004
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Obecnie wygląda to tak (wykaz tabel):
1. tab_2001 (id, data, opis, komentarz)
2. tab_2002 (id, data, opis, komentarz)
3. tab_2003 (id, data, opis, komentarz)
4. tab_2004 (id, data, opis, komentarz)

gdzie:

id - (AUTO_INCREMENT)
data - (date)
opis - (text)
komentarz - (text)

Chcę to trzymać w jednej tabeli. Probowałem sam coś napisać, ale bez rezultatu. Oczywiście pole id (AUTO_INCREMENT) zmieniłem na INT.

Obecnie jesli chcę dodać rekord z rocznika 2003 to muszę otwierać tabelę tab_2003 itd. Jest to dość uciążliwe przy dużej ilości danych (o pomyłkę w rocznikach nietrudno) gdyż ciągle muszę pamiętać o wybraniu prawidłowej tabeli.

Chcialbym by wyglądało to tak:
1. wpisuję date np. 12-05-2003
2. pojawia się komunikat (czy wprowadzona data jest prawidłowa)
3. potwierdzam (lub nie)
4. jesli potwierdziłem nadawany jest kolejny nr (id) dla danego rocznika zgodnego z datą
dla przykładu: (2001 ma id = 123; 2002 ma id = 76; 2003 ma id = 201) jeśli data będzie zawierała rok 2003 to po dodaniu id powinno otrzymać 202)
5. uzupełniam pozostałe dane
6. jeśli nie potwierdzę, pole daty jest czyszczone i ponownie dostępne do wprowadzenia poprawnej daty


--------------------
Pozdrawiam, SamoChwała
Go to the top of the page
+Quote Post
mhs
post
Post #4





Grupa: Zarejestrowani
Postów: 764
Pomógł: 3
Dołączył: 30.04.2003

Ostrzeżenie: (0%)
-----


sluchaj... jak dla mnie to fakt z jakiego przedzialu jest wartosc klucza glownego tabeli nie ma zadnego znaczenia... i nie ma sensu bawic sie w jakies przedzialy..

w modelu relacyjnym nie ma znaczenia w jakiej kolejnosci sa poukladane wiersze w tabeli... wg. bledem bylo tworzenie 4 (i pewnie juz nie dlugo wiecej) tabel dla opisu tej samych obiektow czy zdarzen...

ja na Twoim miejscu (aczkolwiek nie znam dokladnie projektu) po prostu wzialbym i utworzyl jedna tabele do ktorej skopiowalbym wszystkie rekordy z tych tabel...

a jezeli chodzi o samo dodawanie rekordow to wystarczy stworzyc formularz gdzie utworzysz pola ktore bedzie trzeba wypelnic.. po wypelnieniu uzytkownik wysyla dane... ktore sa sprawdzane a nastepnie w przypadku ich poprawnosci dodawane do bazy danych...
Go to the top of the page
+Quote Post
SamoChwała
post
Post #5





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 28.07.2004
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Cytat(mhs @ 2004-07-28 11:51:43)
w modelu relacyjnym nie ma znaczenia w jakiej kolejnosci sa poukladane wiersze w tabeli... wg. bledem bylo tworzenie 4 (i pewnie juz nie dlugo wiecej) tabel dla opisu tej samych obiektow czy zdarzen...

Co do spójności danych jak najbardziej masz rację i to nie podlega żadnej dyskusji. W tym odrębnym jednak przypadku ma to znaczenie zasadnicze. Id jest nr kolejnym protokołu pomiarowego i zasady przyjete w zakładzie w którym pracuję są takie jakie są. Każdy protokól ma odrębny nr. Jeśli w 2003 ostatnim nr był 205, to w 2004 pierwszy musi mieć nr 1 a nie 206. W Accessie miałem to rozwiązane tak jak poniżej. Musiałem jednak przenieść całość do INTRANETU (z Accessem w sieci były i są spore kłopoty) php znam zbyt słabo i nie potrafię tej funkcji przetłumaczyć na kod zrozumiały dla php.

Kod
Private Sub tempDataWyst_LostFocus()
Dim sprData As Variant
If IsDate(Me![tempDataWyst]) And [NrPkt] = 0 Then
    sprData = DMax("[DataWyst]", "Protokoly", "Year([DataWyst])=Year(Forms![ProtokolyDodaj]![tempDataWyst])")
    If (Me![tempDataWyst] - sprData > 3) Or (Me![tempDataWyst] - sprData < 0) Or IsNull(sprData) Then
        odp = MsgBox("Czy data jest prawidłowa?", vbOKCancel, "Uwaga")
        If odp <> 1 Then
            Me![tempDataWyst].SetFocus
            Exit Sub
        End If
    End If


--------------------
Pozdrawiam, SamoChwała
Go to the top of the page
+Quote Post
mhs
post
Post #6





Grupa: Zarejestrowani
Postów: 764
Pomógł: 3
Dołączył: 30.04.2003

Ostrzeżenie: (0%)
-----


mimo wszystko osobiscie zrobilbym sobie jedna tabele i oprocz klucza (AUTO_INCREMENT) dodalbym jeszcze pole np. NrPomiaru INT gdzie zapisywalbym numer wpisu... ale mniejsza oto

powiedz mi... co dokladnie chcesz napisac? formularz i obsluge tego fromularza, wg wzoru ktory zaprezentowales?

ps. jezeli chodzi o ta procedure ktora tutaj przedstawiles to mimo iz mialem kontakt swego czasu z VB to nie jest ona w 100 % dla mnie jasna... musialbym szukac po dokumentacji...

Ten post edytował mhs 28.07.2004, 13:28:47
Go to the top of the page
+Quote Post
SamoChwała
post
Post #7





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 28.07.2004
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Jeśli byłbyś tak uprzejmy to tak. Formularz może być szczątkowy, lub wyjasnienie jak odwołać się do tej funkcji.

Zadałem jeszcze jedno pytanie na formu:
php.pl może znasz odp.

Dzieki


--------------------
Pozdrawiam, SamoChwała
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 19:09