🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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.
#134024
Author: Ryszard Tober
Date: Tue, 23 Jun 2020 00:18
46 lines
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.
#134025
Author: Zbigniew Bratko
Date: Tue, 23 Jun 2020 17:00
111 lines
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.
#134026
Author: Ryszard Tober
Date: Wed, 24 Jun 2020 02:36
31 lines
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.
#134027
Author: Zbigniew Bratko
Date: Wed, 24 Jun 2020 13:20
75 lines
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.
#134028
Author: Ryszard Tober
Date: Fri, 26 Jun 2020 05:18
70 lines
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.
#134029
Author: Zbigniew Bratko
Date: Sun, 28 Jun 2020 12:44
148 lines
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