Łukasz M.

Łukasz M. Energetyka

Temat: Autonumerowanie podczas przechodzenia do nowego rekordu

Witam.

Mam problem ze stworzeniem auto-numerowania w Access by podczas przejścia do nowego rekordu w formularzu w jednym z pol pojawiał się kolejno nr identyfikacyjny, np. 1000/1/ECS i CK; 1001/1/ECS i CK; 1002/1/ECS i CK; .....

Jako opcję Chciałbym również znać sposób, aby w nr identyfikacyjnym liczba "1"- była wybierana z pola kombi, jak również "ECS i CK" też było wybierane z pola kombi.

Wiem już ten temat był przewalany wielokrotnie, ale ja jako nie programista mam problem z stworzeniem prostej maski dla tego typu nr., a muszę dla ułatwienia pracy stworzyć prostą bazę danych w access

Moja propozycja maski wygląda tak: 0000/#1#/\ECS&i&CK , ale wszystko się rozwala.

Wszystkie sugestie kolegów specjalistów od programowania będą mile widziane.

Łukasz
Monika M.

Monika M. PROGRAMISTA VBA,
Excel, Access,
Outlook, Word -
SZKOLENIA

Temat: Autonumerowanie podczas przechodzenia do nowego rekordu

Zamiast maski lepiej będzie użyć, np. pola niezwiązanego, które będzie składało oznaczenia z kolejnego numeru oraz pozostałych oznaczeń, w tym - tych wybieranych z pola kombi.
Taki numer nie musi być koniecznie zapisywany na stałe, ale - jeśli istnieje taka potrzeba - można zapisywać go w odpowiednim polu poprzez prosty kod VBA.
Paweł D.

Paweł D. Programista Analityk
- Firmowe Bazy
Danych

Temat: Autonumerowanie podczas przechodzenia do nowego rekordu

Rozwiązanie:

W swojej tabeli (np.: tWlasnaNumeracja)
Tworzysz normalne pole z autonumeracją (np.: Id)
i pole typu tekstowego gdzie bedzie twoja numeracja (np.: NrIdentyfikacyjny)
Pozostałe pola nie sa istotne

w formularzu podpinasz pod zdarzenie "Po wstawieniu" wywołanie funkcji


Call NadajMojKolejnyNumer(Me.Kombi1, Me.Kombi2)


gdzie pierwsza i druga zmienna to dowolny opis, adekwatnie po pierwszym i podrugyim ukośniku

No i wklejsza np. taką funkcję :]


Public Sub NadajMojKolejnyNumer(DodatkowyNr As Long, DodatkowyOpis As String)
Dim StartowyNrIdentyfikacyjny As String
Dim NowyNrIdentyfikacyjny As String
Dim OstatniNrIdentyfikacyjny As String
Dim OstatniAccessId As Long
Dim IloscZerWidacych As Integer
Dim NazwaTabeli As String
Dim PoleZAutoId As String
Dim PoleZNrIdentyfikatora As String
Dim SqlUpdate As String

NazwaTabeli = "twojaTabela"
PoleZAutoId = "Id"
PoleZNrIdentyfikatora = "NrIdentyfikacyjny"

IloscZerWidacych = 4
StartowyNrIdentyfikacyjny = String(IloscZerWidacych, "0") & "/" & DodatkowyNr & "/" & DodatkowyOpis
OstatniAccessId = Nz(DMax(PoleZAutoId, NazwaTabeli, PoleZNrIdentyfikatora & " like ""*/" & DodatkowyNr & "/*"" AND " & PoleZNrIdentyfikatora & " like ""*/" & DodatkowyOpis & """"), 0)
If OstatniAccessId = 0 Then
OstatniNrIdentyfikacyjny = StartowyNrIdentyfikacyjny
Else
OstatniNrIdentyfikacyjny = DLookup(PoleZNrIdentyfikatora, NazwaTabeli, PoleZAutoId & "=" & OstatniAccessId)
End If

NowyNrIdentyfikacyjny = Format(CLng(Left(OstatniNrIdentyfikacyjny, IloscZerWidacych)) + 1, String(IloscZerWidacych, "0")) & "/" & DodatkowyNr & "/" & DodatkowyOpis

SqlUpdate = "UPDATE " & NazwaTabeli & " SET " & PoleZNrIdentyfikatora & "='" & NowyNrIdentyfikacyjny & "' " & " WHERE " & PoleZAutoId & " = " & DMax(PoleZAutoId, NazwaTabeli)
DoCmd.RunSQL SqlUpdate

End Sub


i powinno działać :]Paweł D. edytował(a) ten post dnia 25.08.11 o godzinie 12:28
Marcin Urbański

Marcin Urbański E-commerce, analityk
szkolenia -
tel.:513272082

Temat: Autonumerowanie podczas przechodzenia do nowego rekordu

Maska służy do wprowadzania danych w określonym formacie - ale to nie rozwiąże twojego problemu, bo nadal musisz wprowadzać dane. Tu bardziej pomocne będzie właściwość - "Wartość domyślna"

Czyli tworzysz sobie prosty formularz do wprowadzania danych:
1. w 1 polu masz ustawione autonumerowanie i użytkownik nie ingeruje w wartość
2. w kolejnym polu użytkownik wybiera sobie cyferkę (1,2, - nie wiem jaki zakres ma być to też ma być autonumerowanie ???)
3. w trzecim polu użytkownik wybiera kategorię z Kombii "Ecs" lub "CK" ewentualnie "ECS i CK"
4. ostatnie pole składające identyfikator gdzie wartość domyślna będzie:
= pole1 &"/"&pole nr2&"/"&polenr3 np. :1/1/CK

Bo chyba o coś takiego Tobie chodziło ?
I teraz dodając nowy rekord licznik z autonumerowania będzie się zwiększał a pozostałe składowe wg- wyborów użytkonika
Monika M.

Monika M. PROGRAMISTA VBA,
Excel, Access,
Outlook, Word -
SZKOLENIA

Temat: Autonumerowanie podczas przechodzenia do nowego rekordu

Marcin Urbański:
Maska służy do wprowadzania danych w określonym formacie - ale to nie rozwiąże twojego problemu, bo nadal musisz wprowadzać dane. Tu bardziej pomocne będzie właściwość - "Wartość domyślna"

Czyli tworzysz sobie prosty formularz do wprowadzania danych:
1. w 1 polu masz ustawione autonumerowanie i użytkownik nie ingeruje w wartość
2. w kolejnym polu użytkownik wybiera sobie cyferkę (1,2, - nie wiem jaki zakres ma być to też ma być autonumerowanie ???)
3. w trzecim polu użytkownik wybiera kategorię z Kombii "Ecs" lub "CK" ewentualnie "ECS i CK"
4. ostatnie pole składające identyfikator gdzie wartość domyślna będzie:
= pole1 &"/"&pole nr2&"/"&polenr3 np. :1/1/CK

Bo chyba o coś takiego Tobie chodziło ?
I teraz dodając nowy rekord licznik z autonumerowania będzie się zwiększał a pozostałe składowe wg- wyborów użytkonika

Ja też o takim właśnie rozwiązaniu pisałam.
Marcin Urbański

Marcin Urbański E-commerce, analityk
szkolenia -
tel.:513272082

Temat: Autonumerowanie podczas przechodzenia do nowego rekordu

Tylko tej prostej formułki nie nazwał bym kodem VBA.

Wielkie umysły myślą podobnie :-)
Michał Dziubek

Michał Dziubek Programista,
INFORM\'1

Temat: Autonumerowanie podczas przechodzenia do nowego rekordu

Marcin Urbański:
Maska służy do wprowadzania danych w określonym formacie - ale to nie rozwiąże twojego problemu, bo nadal musisz wprowadzać dane. Tu bardziej pomocne będzie właściwość - "Wartość domyślna"

Czyli tworzysz sobie prosty formularz do wprowadzania danych:
1. w 1 polu masz ustawione autonumerowanie i użytkownik nie ingeruje w wartość
2. w kolejnym polu użytkownik wybiera sobie cyferkę (1,2, - nie wiem jaki zakres ma być to też ma być autonumerowanie ???)
3. w trzecim polu użytkownik wybiera kategorię z Kombii "Ecs" lub "CK" ewentualnie "ECS i CK"
4. ostatnie pole składające identyfikator gdzie wartość domyślna będzie:
= pole1 &"/"&pole nr2&"/"&polenr3 np. :1/1/CK

Bo chyba o coś takiego Tobie chodziło ?
I teraz dodając nowy rekord licznik z autonumerowania będzie się zwiększał a pozostałe składowe wg- wyborów użytkonika


Problemem z dodatkowym polem autonumerowania polega na tym, ze w przypadku usnięcia powstaje luka w numeracji, której nigdy nie zapełnimy, dodatkowo jeżeli, będziemy chcieli numerować osobno w ramach ECS czy CK to taka kolumna nic nam nie da...
Moim zdaniem wiedząc jak jest zbudowany numer poradć najwyzszą wartosc dla okreslonego postfixu dodać 1 i na jej podstawie wygenerować numer
Monika M.

Monika M. PROGRAMISTA VBA,
Excel, Access,
Outlook, Word -
SZKOLENIA

Temat: Autonumerowanie podczas przechodzenia do nowego rekordu

Marcin Urbański:
Tylko tej prostej formułki nie nazwał bym kodem VBA.
Toż napisałam o EWENTUALNOŚCI zapisywania złożonego w całość numeru: "Taki numer nie musi być koniecznie zapisywany na stałe, ale - jeśli istnieje taka potrzeba - można zapisywać go w odpowiednim polu poprzez prosty kod VBA."
Wielkie umysły myślą podobnie :-)
:)
Michał Dziubek:
Problemem z dodatkowym polem autonumerowania polega na tym,
ze w przypadku usnięcia powstaje luka w numeracji,
której nigdy nie zapełnimy,

Nigdy? Zapełnimy, jeśli zrobimy kompaktowanie i naprawę bazy danych, ale - oczywiście - może być problem z kolejnością numeracji.
Tylko, czy chcemy za wszelką cenę zapełniać, gdy ktoś wycofa się z operacji?
dodatkowo jeżeli, będziemy chcieli numerować osobno
w ramach ECS czy CK to taka kolumna nic nam nie da...

Zgadzam się. Generalnie jednak chodziło o to, aby autor wątku nie robił tego maską, bo nie tędy droga.
Moim zdaniem wiedząc jak jest zbudowany numer poradć
najwyzszą wartosc dla okreslonego postfixu dodać 1
i na jej podstawie wygenerować numer

Zgadzam się. Pole z numerem dla danego dokumentu - niezbędne.
Michał Dziubek

Michał Dziubek Programista,
INFORM\'1

Temat: Autonumerowanie podczas przechodzenia do nowego rekordu

Monika M.:
Michał Dziubek:
Problemem z dodatkowym polem autonumerowania polega na tym,
ze w przypadku usnięcia powstaje luka w numeracji,
której nigdy nie zapełnimy,

Nigdy? Zapełnimy, jeśli zrobimy kompaktowanie i naprawę bazy danych, ale - oczywiście - może być problem z kolejnością numeracji.
Tylko, czy chcemy za wszelką cenę zapełniać, gdy ktoś wycofa się z operacji?

Kompaktowanie i naprawienie zacznie numeracje od 1 jeżeli tabel była pusta,jeżeli nie to pójdzie dalej od ostatniego nadanego id+1, oczywiście można to obejść, to zdecydowanie więcej problemów niż porządnie napisana funkcja generująca numer.
Nie wiem czy w tym wypadku chcemy aby zapełniać lukę w numeracji, jeżeli ktoś się wycofa, ale mogę sobie wyobrazić sytuacje, że ktoś wprowadzający do bazy rekordy z jakiegoś powodu musi je wprowadzić nie w kolejności przyjęcia, bo np. potrzebuje wydruk generowany przez program...
Może tez być sytuacja, że użytkownik będzie chciał rozpocząć numeracje od 1001 numeru, bo już tyle nadał "papierowo" i nie zamierza wprowadzać tego do programu
Reasumując oparcie się na generowaniu numeru o pole autonumer w bazie jest mało elastyczne i wcześniej czy później będzie wymagało zupełnej zmiany podejścia do problemu.
Monika M.:
Zgadzam się. Generalnie jednak chodziło o to, aby autor wątku nie robił tego > maską, bo nie tędy droga.

Jak dla mnie podawanie rozwiązania z polem autoinkrementowanym jest "niedźwiedzią przysługą", ponieważ ktoś namęczy się nad rozwiązaniem, później będzie chciał to zmienić/rozbudować i dowie się, ze w oparciu o takie rozwiązanie to nie ma szans.

Pozdrawiam
Michał Dziubek
Łukasz M.

Łukasz M. Energetyka

Temat: Autonumerowanie podczas przechodzenia do nowego rekordu

Dzięki bardzo za odpowiedź.

Z podpowiedziami bedę walczył za chwilę, ale teraz napotkałem kolejny problem. Sprawa dotyczy automatycznego uruchamiania polecenia np Polecenia30, które do tej pory uruchamiane jest z przycisku polecenia. Chcę wyeliminowac przycisk, a polecenie któe się kryje pod przyciskiem aby było uruchamiane po otwarciu formularza.

konto usunięte

Temat: Autonumerowanie podczas przechodzenia do nowego rekordu

Łukasz Mamrot:
Dzięki bardzo za odpowiedź.

Z podpowiedziami bedę walczył za chwilę, ale teraz napotkałem kolejny problem. Sprawa dotyczy automatycznego uruchamiania polecenia np Polecenia30, które do tej pory uruchamiane jest z przycisku polecenia. Chcę wyeliminowac przycisk, a polecenie któe się kryje pod przyciskiem aby było uruchamiane po otwarciu formularza.
normalnie tak jak każdą inną procedurę

Polecenia30_Click
Dariusz Kolasa

Dariusz Kolasa Akademia VBA

Temat: Autonumerowanie podczas przechodzenia do nowego rekordu

Łukasz Mamrot:
Dzięki bardzo za odpowiedź.

Z podpowiedziami bedę walczył za chwilę, ale teraz napotkałem kolejny problem. Sprawa dotyczy automatycznego uruchamiania polecenia np Polecenia30, które do tej pory uruchamiane jest z przycisku polecenia. Chcę wyeliminowac przycisk, a polecenie któe się kryje pod przyciskiem aby było uruchamiane po otwarciu formularza.

to podstawowe zdarzenia formularza są:
form_load (przy załadowaniu) lub
form_open (przy otwarciu)



Wyślij zaproszenie do