Wątek przeniesiony 2021-08-24 11:44 z Edukacja przez somekind.

Kopiowanie Identyfikatora do innego pola atrybutów Access

0

Witam,

Czy zna ktoś jakiś sposób, aby identyfikator dodawanego, nowego rekordu w bazie Access umieszczał się także w innym atrybucie?
Nie jest bowiem możliwe zrobienie dwóch pól typu autonumerowanie.
Czy można to zrobić w taki sposób, aby nie wywaliło błędu podczas kontrolowania wcześniej podanych rekordów, gdzie następuje duplikacja liczb?

0

Najpierw napisz, po co chcesz trzymać w jednej tabeli dwa razy to samo ID?

0

@axelbest: Nie do końca 2x ID. W planowanym drugim atrybucie trzymany jest "Numer decyzji", który wpisywany jest ręcznie przez moich przełożonych. Niestety, gdy wpisują sprawy te same osoby zdarzają się duplikacje numerów lub pominięcia, a szefostwo chce żeby numeracji decyzji nadawała się automatycznie (inaczej mówiąc: kopiowała się z) na podst. identyfikatora rekordu.
Przy czym jest to rozwiązanie tymczasowe :-D tj. na ten rok, bo jak będę tworzyć szablon na przyszły, to pole zostanie usunięte (a musiało być dodane, gdyż przyszedłem do nich w połowie lutego).

1

W normalnej bazie użyłbym triggerów. Pytanie Czy Access ma triggery?

1

załóż unique na pole i juz

0

@chomikowski: A jak można dodać unique?

0

@KamilAdam: Z tego co mi podałeś, to nie ale spróbuje coś na podstawie tego wymyślić

0

@Karol Śpila: Po zapoznaniu się z ogólnym opisem unique: tu chodzi o tabelę, a nie o kwerendę

0

unique (czy szerzej constraint) zakłada się na tabeli (dokładniej na wierszu lub na grupie wierszy) a nie na kwerendzie
Żródło

0

@KamilAdam: OK, pomyliło mi się z definicją unikalnych wartości

1

Ja bym zrobil tak: tabele settings w niej pole o nazwie case_decision_number. Ustawilbym go na = 1.
Teraz bym zrobil trigger after insert i po wstawieniu danych moj triger pobieralby z tabeli settings to pole case_decision_number wstawial do tej tabeli co trzeba i robil update z inkrementacja aby teraz w tabeli settings = 2.

Tak robie z fakturami jak uzytkoniwk ma swoja numeracje. Ktos powie czemu nie zrobic trigera ktory wyszukuje ostatnia wartosc pobiera max, inkrementuje i wstawia. Dlatego ze wybieranie zawsze wszystkich wierszy zeby wybrac MAX jest kosztowniejsze niz pobranie jedenj danej z tabeli setiings

0

Nie do końca 2x ID. - wg mnie do końca :)

W planowanym drugim atrybucie trzymany jest "Numer decyzji", który wpisywany jest ręcznie przez moich przełożonych. - czyli nie mówimy o numerze automatycznie generowanym.

Niestety, gdy wpisują sprawy te same osoby zdarzają się duplikacje numerów lub pominięcia, czyli ludzie robią coś źle, co powoduje, że musimy mieć coś co jednoznacznie IDentyfikuje rekord (hmmm.... cóż by to mogło być...?)

a szefostwo chce żeby numeracji decyzji nadawała się automatycznie (inaczej mówiąc: kopiowała się z) na podst. identyfikatora rekordu. - czyli jednak nikt nie chce nic wpisywać, tylko mieć unikalne ID.

Przy czym jest to rozwiązanie tymczasowe :-D tj. na ten rok, bo jak będę tworzyć szablon na przyszły, to pole zostanie usunięte (a musiało być dodane, gdyż przyszedłem do nich w połowie lutego). - czyli nie ma co czarować z dublowaniem ID, tylko czas lepiej pomyśleć jak umiejętnie wykorzystać istniejące.

Powiedz gdzie te drugie ID jest wykorzystywane? bo przeciez mozesz miec np zwykle id w bazie typu 1,2,3,4,5,.... a potem jak np generujesz fakturę czy inny dokument robisz metodę "getMyMagicalStuff()", która zrobi np return "somestring"+this.record.id (ofc to pseudokod). Nie lepiej w tym kierunku pójść niż kombinować? A jeśli ten numerek musi zostać zapisany w bazie to zrób triggera jakiegoś i niech CI update'uje rekord po jego dodaniu.

Wg mnie zabierasz się do tego nie od tej strony co trzeba, poza tym nie opisałeś dokładnie case'a w związku z którym masz ten problem.

0

@axelbest: Powiem tak: Pierwsze ID, to zwykły Identyfikator, który numeruje po kolei decyzje (i postanowienia- 2 tabele, choć o podobnej strukturze), natomiast drugi atrybut w oczach szefostwa się automatycznie aktualizować, jak ID, ale jest o kilka rekordów do tyłu ze względu na jego wcześniejsze zdublowania => potrzeba automatycznej inkrementacji oddzielnej od ID tabel.

Czy jest już to jaśniej sformułowane? Trigery, to byłyby rozwiązania, gdyby w Accessie występowały.

0

@Karol Śpila: To nie ma trigerów w Accesie? Przecież są. Której wersji Acc używasz?

2

Wejdź w projekt dowolnej tabeli i zobacz, czy masz to:
screenshot-20210825121139.png

0

@Marcin.Miga: W MS 2016 wygląda to trochę inaczej, ale opcję tą znalazłem. Teraz jak rozumiem trzeba utworzyć odpowiednie Makro...

A ogólnie mój problem można zdefiniować prościej: Czy da się ustawić automatyczna inkrementacje dla atrybutu liczbowego, niebędącego Identyfikatorem?

1
Karol Śpila napisał(a):

@Marcin.Miga: W MS 2016 wygląda to trochę inaczej, ale opcję tą znalazłem. Teraz jak rozumiem trzeba utworzyć odpowiednie Makro...

A ogólnie mój problem można zdefiniować prościej: Czy da się ustawić automatyczna inkrementacje dla atrybutu liczbowego, niebędącego Identyfikatorem?

Da sie, poprzez utworzenie trgera na to pole inkrementującego jego wartosc

0

@chomikowski: I w tym celu trzeba odpowiednio zdefiniować makro, czyli odpowiednik triggera w Accessie?

Pisałeś na początku tej strony forum jak to się robi, ale nie jestem w stanie tego zrozumieć - Makro w Accessie ma takie opcje: []Na forum.png

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