Thread View: pl.comp.bazy-danych.msaccess
6 messages
6 total messages
Started by Ryszard Tober
Tue, 23 Jun 2020 00:18
Maska Wprowadzania dla nr dokumentu.
Author: Ryszard Tober
Date: Tue, 23 Jun 2020 00:18
Date: Tue, 23 Jun 2020 00:18
46 lines
1841 bytes
1841 bytes
Cześć, Mam zadanie problematyczne do rozwiązania, z którym nie wiem jak sobie poradzić, może ktoś będzie miał jakiś pomysł. Mam bazę danych składającą się z trzech pól: - nr dokumentu - nr przesyłki - nr sreyjny Wszystkie pola tabeli są uzupełniane poprzez formularz wprowadzania danych. Wszystkie dane do formularza są wprowadzane za pomocą skanera, który generuje na końcu spację. Dla pól "Nr Dokumentu" oraz "Numer przesyłki" ma być ustalona autotabulacja w taki sposób, że zaraz po przeskanowaniu kursor przeskakuje do kolejnego pola. Na obu polach ustawiłem Autotab, ale żeby całość zadziałała trzeba również ustawić maskę wprowadzania. O ile dla Nr przesyłki temat jest prosty, ponieważ numer przesyłki składa się z 24 cyfr i spacji na końcu generowanej przez skaner, maskę wprowadzania ustawiłem w sposób następujący: 000000000000000000000000" ";; Całość działa. Natomiast nie mam zielonego pojęcia jak ustawić maskę wprowadzania dla Nr dokumentu. Numery dokumentu wyglądają w sposób następujący: FS 4302/06/2020 PA 10075/2020 Ich długość jest zmienna i schemat/klucz jest różny. Jedyna prawidłowość jaka jest w tych numerach to cztery ostatnie znaki jako cyfry. Niestety nie mam pojęcia jak można ustawić maskę, żeby autotabulacja po zeskanowaniu zadziałała. Ma ktoś może jakiś pomysł? Może autotabulację dla tego pola można ustawić jakoś inaczej?
Re: Maska Wprowadzania dla nr dokumentu.
Author: Zbigniew Bratko
Date: Tue, 23 Jun 2020 17:00
Date: Tue, 23 Jun 2020 17:00
111 lines
3942 bytes
3942 bytes
This is a multi-part message in MIME format. --------------1472C2148E7DEC1BA1DA32D7 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit W dniu 23.06.2020 o 09:18, Ryszard Tober pisze: > Cześć, > Mam zadanie problematyczne do rozwiązania, z którym nie wiem jak sobie poradzić, może ktoś będzie miał jakiś pomysł. > > Mam bazę danych składającą się z trzech pól: > - nr dokumentu > - nr przesyłki > - nr sreyjny > > Wszystkie pola tabeli są uzupełniane poprzez formularz wprowadzania danych. > Wszystkie dane do formularza są wprowadzane za pomocą skanera, który generuje na końcu spację. Dla pól "Nr Dokumentu" oraz "Numer przesyłki" ma być ustalona autotabulacja w taki sposób, że zaraz po przeskanowaniu kursor przeskakuje do kolejnego pola. Na obu polach ustawiłem Autotab, ale żeby całość zadziałała trzeba również ustawić maskę wprowadzania. > > O ile dla Nr przesyłki temat jest prosty, ponieważ numer przesyłki składa się z 24 cyfr i spacji na końcu generowanej przez skaner, maskę wprowadzania ustawiłem w sposób następujący: > > 000000000000000000000000" ";; > > Całość działa. > > Natomiast nie mam zielonego pojęcia jak ustawić maskę wprowadzania dla Nr dokumentu. > Numery dokumentu wyglądają w sposób następujący: > > FS 4302/06/2020 > PA 10075/2020 > > Ich długość jest zmienna i schemat/klucz jest różny. > > Jedyna prawidłowość jaka jest w tych numerach to cztery ostatnie znaki jako cyfry. Niestety nie mam pojęcia jak można ustawić maskę, żeby autotabulacja po zeskanowaniu zadziałała. > > Ma ktoś może jakiś pomysł? > Może autotabulację dla tego pola można ustawić jakoś inaczej? A może bez maski wprowadzania i Autotabulacji. ' spróbuj obsłużyć zdarzenie "Przy Zmianie" pól tekstowych. ' Sądzę, że skaner wkleja odczytany tekst do formantu mającego fokus ' zawsze ze spacją na końcu. ' Poniżej szkic procedur dla dwóch formantów '__________________________________ Private Sub txtNrPrzesylki_Change() Dim sNrPrzesylki As String sNrPrzesylki = Nz(Me.txtNrPrzesylki.text, "") ' 24 cyfry i spacja końcowa If Len(sNrPrzesylki) = 25 And Right$(sNrPrzesylki, 1) = " " Then If IsNumeric(RTrim$(sNrPrzesylki)) Then Me.txtNrDokumentu.SetFocus Else MsgBox "NrPrzesylki - Coś nie tak" End If End If End Sub '___________________________________ Private Sub txtNrDokumentu_Change() Dim sNrDokumentu As String sNrDokumentu = Nz(Me.txtNrDokumentu.text, "") ' na końcu musi być spacja ??? If Right$(sNrDokumentu, 1) = " " Then 'można także szukać (sprawdzać) znak ukośnika i jego położenie ' 4cyfry i spacja końcowa If Len(sNrDokumentu) >= 5 Then ' usuń spację(spacje) końcowe sNrDokumentu = RTrim$(sNrDokumentu) 'być może znajdą się dwie spacje końcowe If Len(sNrDokumentu) = 4 And IsNumeric(sNrDokumentu) Then 'przejdź do następnego formantu 'Me.txtJakiePoleNastepne.SetFocus Else MsgBox "NrDokumentu - Coś nie tak" End If End If End If End Sub Zwracam uwagę, że IsNumeric dla wyrażenie "12d3" i "12e3" zwraca TRUE. Jeżeli coś takiego może zajść, to lepiej napisać własną funkcję sprawdzającą, czy wyrażenie jest Numeryczne. -- Pozdrowienia Zbigniew Bratko --------------1472C2148E7DEC1BA1DA32D7 Content-Type: text/x-vcard; charset=utf-8; name="adminBEZTEGO.vcf" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="adminBEZTEGO.vcf" begin:vcard fn:Zbigniew Bratko n:Bratko;Zbigniew note;quoted-printable:-- Pozdrowienia BraZby www.faq.accdb.pl www.accdb.pl version:2.1 end:vcard --------------1472C2148E7DEC1BA1DA32D7--
Re: Maska Wprowadzania dla nr dokumentu.
Author: Ryszard Tober
Date: Wed, 24 Jun 2020 02:36
Date: Wed, 24 Jun 2020 02:36
31 lines
948 bytes
948 bytes
Dziękuję bardzo. Mam przynajmniej jasność, że w masce wprowadzania nie da się tego zagadnienia rozwiązać. Próbowałem generalnie uprościć też ten kod, tak żeby zawęzić go wyłącznie do samej spacji na końcu zeskanowanego tekstu. Wydłubałem coś takiego: Private Sub Nr_Paczki_Change() Dim Nr_D As String Nr_D = Nz(Me.Nr_Paczki.Text) If Right$(Nr_D, 1) = " " Then Me.Nr_ListuPrzew.SetFocus Else MsgBox "Nr_Dokumentu - Coś nie tak" End If End Sub Po wklejeniu danych ze spacją na końcu to działa, ale na skanerze nie. Mógłby pan rzucić okiem czy czegoś nie pominąłem? Byłbym wdzięczny i z góry dziękuję. Ryszard Tober-Marczewski
Re: Maska Wprowadzania dla nr dokumentu.
Author: Zbigniew Bratko
Date: Wed, 24 Jun 2020 13:20
Date: Wed, 24 Jun 2020 13:20
75 lines
1961 bytes
1961 bytes
This is a multi-part message in MIME format. --------------4868C0EC85BCA3288C91D434 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit W dniu 24.06.2020 o 11:36, Ryszard Tober pisze: > Dziękuję bardzo. > Mam przynajmniej jasność, że w masce wprowadzania nie da się tego zagadnienia rozwiązać. > > Próbowałem generalnie uprościć też ten kod, tak żeby zawęzić go wyłącznie do samej spacji na końcu zeskanowanego tekstu. > Wydłubałem coś takiego: > > Private Sub Nr_Paczki_Change() > Dim Nr_D As String > > Nr_D = Nz(Me.Nr_Paczki.Text) > > If Right$(Nr_D, 1) = " " Then > > Me.Nr_ListuPrzew.SetFocus > > Else > > MsgBox "Nr_Dokumentu - Coś nie tak" > > End If > End Sub > > Po wklejeniu danych ze spacją na końcu to działa, ale na skanerze nie. > Mógłby pan rzucić okiem czy czegoś nie pominąłem? > Byłbym wdzięczny i z góry dziękuję. > > Ryszard Tober-Marczewski > Nasuwają mi się pytania: 1. Czy po zapisie danych ze skanera zachodzi zdarzenie "Change" ? Sprawdź np. '______________________________ Private Sub Nr_Paczki_Change() Dim Nr_D As String MsgBox "Działa " & Nr_D 2. Czy okno przed wczytaniem ze skanera MUSI posiadać Fokus, czy zapis odbywa się inaczej. 3. Być może zachodzi zdarzenie BeforeUpdate i AfterUpdate i wtedy w zdarzeniu BeforeUpdate coś da się zrobić. -- Pozdrawiam Zbigniew Bratko --------------4868C0EC85BCA3288C91D434 Content-Type: text/x-vcard; charset=utf-8; name="adminBEZTEGO.vcf" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="adminBEZTEGO.vcf" begin:vcard fn:Zbigniew Bratko n:Bratko;Zbigniew note;quoted-printable:-- Pozdrowienia BraZby www.faq.accdb.pl www.accdb.pl version:2.1 end:vcard --------------4868C0EC85BCA3288C91D434--
Re: Maska Wprowadzania dla nr dokumentu.
Author: Ryszard Tober
Date: Fri, 26 Jun 2020 05:18
Date: Fri, 26 Jun 2020 05:18
70 lines
2360 bytes
2360 bytes
W dniu środa, 24 czerwca 2020 13:20:34 UTC+2 użytkownik Zbigniew Bratko napisał: > W dniu 24.06.2020 o 11:36, Ryszard Tober pisze: > > Dziękuję bardzo. > > Mam przynajmniej jasność, że w masce wprowadzania nie da się tego zagadnienia rozwiązać. > > > > Próbowałem generalnie uprościć też ten kod, tak żeby zawęzić go wyłącznie do samej spacji na końcu zeskanowanego tekstu. > > Wydłubałem coś takiego: > > > > Private Sub Nr_Paczki_Change() > > Dim Nr_D As String > > > > Nr_D = Nz(Me.Nr_Paczki.Text) > > > > If Right$(Nr_D, 1) = " " Then > > > > Me.Nr_ListuPrzew.SetFocus > > > > Else > > > > MsgBox "Nr_Dokumentu - Coś nie tak" > > > > End If > > End Sub > > > > Po wklejeniu danych ze spacją na końcu to działa, ale na skanerze nie. > > Mógłby pan rzucić okiem czy czegoś nie pominąłem? > > Byłbym wdzięczny i z góry dziękuję. > > > > Ryszard Tober-Marczewski > > > > Nasuwają mi się pytania: > 1. Czy po zapisie danych ze skanera zachodzi zdarzenie "Change" ? > Sprawdź np. > '______________________________ > Private Sub Nr_Paczki_Change() > Dim Nr_D As String > > MsgBox "Działa " & Nr_D > > > > 2. Czy okno przed wczytaniem ze skanera MUSI posiadać Fokus, > czy zapis odbywa się inaczej. > 3. Być może zachodzi zdarzenie BeforeUpdate i AfterUpdate i wtedy > w zdarzeniu BeforeUpdate coś da się zrobić. > > > -- > Pozdrawiam > Zbigniew Bratko Próbowałem umieścić kod w zdarzebue "Przed aktualizacją" i "po aktualizacji" ale to też przy skanowaiu nie działało. Przyszło mi do głowy inne rozwiązanie, ale nie wiem jak je ugryźć, czy jest możliwość np umieszczenia w zdarzeniu "Po zmianie" w kodzie, pętli sprawdzającej, czy pole zostało wypełnione i jeśli tak to wówczas dopiero uruchamiała by się procedura weryfikacji, czy na końcu jest spacja.
Re: Maska Wprowadzania dla nr dokumentu.
Author: Zbigniew Bratko
Date: Sun, 28 Jun 2020 12:44
Date: Sun, 28 Jun 2020 12:44
148 lines
4786 bytes
4786 bytes
This is a multi-part message in MIME format. --------------E2E0F40D77EACB6E7D2D515F Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit W dniu 26.06.2020 o 14:18, Ryszard Tober pisze: > W dniu środa, 24 czerwca 2020 13:20:34 UTC+2 użytkownik Zbigniew Bratko napisał: >> W dniu 24.06.2020 o 11:36, Ryszard Tober pisze: >>> Dziękuję bardzo. >>> Mam przynajmniej jasność, że w masce wprowadzania nie da się tego zagadnienia rozwiązać. >>> >>> Próbowałem generalnie uprościć też ten kod, tak żeby zawęzić go wyłącznie do samej spacji na końcu zeskanowanego tekstu. >>> Wydłubałem coś takiego: >>> >>> Private Sub Nr_Paczki_Change() >>> Dim Nr_D As String >>> >>> Nr_D = Nz(Me.Nr_Paczki.Text) >>> >>> If Right$(Nr_D, 1) = " " Then >>> >>> Me.Nr_ListuPrzew.SetFocus >>> >>> Else >>> >>> MsgBox "Nr_Dokumentu - Coś nie tak" >>> >>> End If >>> End Sub >>> >>> Po wklejeniu danych ze spacją na końcu to działa, ale na skanerze nie. >>> Mógłby pan rzucić okiem czy czegoś nie pominąłem? >>> Byłbym wdzięczny i z góry dziękuję. >>> >>> Ryszard Tober-Marczewski >>> >> >> Nasuwają mi się pytania: >> 1. Czy po zapisie danych ze skanera zachodzi zdarzenie "Change" ? >> Sprawdź np. >> '______________________________ >> Private Sub Nr_Paczki_Change() >> Dim Nr_D As String >> >> MsgBox "Działa " & Nr_D >> >> >> >> 2. Czy okno przed wczytaniem ze skanera MUSI posiadać Fokus, >> czy zapis odbywa się inaczej. >> 3. Być może zachodzi zdarzenie BeforeUpdate i AfterUpdate i wtedy >> w zdarzeniu BeforeUpdate coś da się zrobić. >> >> >> -- >> Pozdrawiam >> Zbigniew Bratko > > Próbowałem umieścić kod w zdarzebue "Przed aktualizacją" i "po aktualizacji" ale to też przy skanowaiu nie działało. > > Przyszło mi do głowy inne rozwiązanie, ale nie wiem jak je ugryźć, czy jest możliwość np umieszczenia w zdarzeniu "Po zmianie" w kodzie, pętli sprawdzającej, czy pole zostało wypełnione i jeśli tak to wówczas dopiero uruchamiała by się procedura weryfikacji, czy na końcu jest spacja. > Odpowiem sam sobie: 1. Nie zachodzi zdarzenie "Change" 2. Pole tekstowe NrPrzesylki nie musi mieć "Fokusu". 3. Nie zachodzą zdarzenia BeforeUpdate i AfterUpdate dla formantu. Nie sądzę, by "Skaner" zapisywał dane poprzez Recordset, raczej bezpośrednio poprzez Me.txtNrPrzesylki.Value = "NowaWartość" i dlatego żadne z wymienionych zdarzeń nie zachodzi. Można próbować monitorować zmiany poszczególnych pól w Timerze formularza. Przykładowy kod dla jednego pola ' zmienna na poziomie modułu Private m_sNrPrzesylkiOld As String ' __________________________________ ' przycisk włączający Timer Private Sub btnWlaczTimer_Click() ' Przed uruchomieniem skanera Zapamiętaj wartość pola "txtNrPrzesyłki" m_sNrPrzesylkiOld = Nz(Me.txtNrPrzesylki.Value, "") Me.TimerInterval = 100 'uruchom skaner !!! End Sub '______________________________ Private Sub Form_Timer() ' istnieje niebezpieczeństwo, że przy ponownym skanowaniu ' tej samej wartości, zmian nie będzie i cały czas będzie zachodziło ' sprawdzanie. Można przed ponownym skanowaniu wyzerować sprawdzane ' pole, uruchomić Timer i Skaner If StrComp(Nz(Me.txtNrPrzesylki.Value, ""), _ m_sNrPrzesylkiOld, vbBinaryCompare) <> 0 Then ' wyłącz Timer, bo pole uległo zmianie Me.TimerInterval = 0 MsgBox "NrPrzesylki uległ zmianie i wynosi " & vbNewLine & _ Nz(Me.txtNrPrzesylki.Value, "") End If End Sub Jeżeli zapis danych odbywa się poprzez Me.txtNrPrzesylki.Value = "NowaWartość" to ewentualnie końcowe sprawdzanie WSZYSTKICH pól możesz zrobić w zdarzeniu Form_BeforeUpdate '_________________________________________________ Private Sub Form_BeforeUpdate(Cancel As Integer) ' Tutaj kod. Jak coś jest nie tak Cancel=TRUE ' MsgBox "Jakieś informacje dla użytkownika" End Sub Z tą spacją na końcu możesz mieć problem. O ile skaner zapisze NrPrzesylki ze spacją na końcu, to ręczna edycja tego pola w formularzu spowoduje usunięcie spacji końcowej przez MS Access -- Pozdrawiam Zbigniew Bratko --------------E2E0F40D77EACB6E7D2D515F Content-Type: text/x-vcard; charset=utf-8; name="adminBEZTEGO.vcf" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="adminBEZTEGO.vcf" begin:vcard fn:Zbigniew Bratko n:Bratko;Zbigniew note;quoted-printable:-- Pozdrowienia BraZby www.faq.accdb.pl www.accdb.pl version:2.1 end:vcard --------------E2E0F40D77EACB6E7D2D515F--
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads