![]() |
![]() |
![]()
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
|
|
|
![]() |
![]()
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?
|
|
|
![]()
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
|
|
|
![]()
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... |
|
|
![]()
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
|
|
|
![]()
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 |
|
|
![]()
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
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 19:09 |