Vyhladavanie v Access 2007

"Rady nielen z Porady" - Tipy a triky, "how-to ...", nápady a riešenia k aplikáciam MS Office
pre všetky verzie až po MS Office 2010

Vyhladavanie v Access 2007

Poslaťod Noro1005 » 24.02.2011, 14:37

Zdravim potreboval by som pomoct s vyhladavanim, filtrovanim udajov v databaze kniznici. Prvy problem , ktory mam je ze pri prvom otvoreni formulara vyhladavanie a hned kliknutim na Vyhladat bez zadanych parametrov mi vypise chybu v procedure ako na obr.1! Ako nastavit to aby nebola hodnota null ale aby bez prveho zadania hodnot do vyhladavania a hned kliknutim na Vyhladaj nevyfiltrovalo nic.

2. Ako nastavit porovnavanie a filtrovanie integerovych hodnot ako je Rok Narodenia , ID Autora a podobne.


kod, takto to je nastavene filtrovanie pre string - Meno a Priezvisko,potrebujem donho pridat este vyhladavanie pre RokNarodenia a ID AUtora:
Kód: Vybrať všetko
Private Sub cmdFiltruj_Click()

 Dim sValue(2, 2) As String, i As Byte, sFilter1 As String
     
   
    sValue(1, 1) = Trim(tboxMeno.Value)
    sValue(1, 2) = "Meno"
    sValue(2, 1) = Trim(tboxPriezvisko.Value)
    sValue(2, 2) = "Priezvisko"
   
   
   
    sFilter1 = ""
   
    ' Filter1:  Meno AND Priezvisko
    For i = 1 To 2

            If sValue(i, 1) <> "" Then
                If sFilter1 <> "" Then sFilter1 = sFilter1 & " AND "
               
                If InStr(1, sValue(i, 1), "*") > 0 Then
                    sFilter1 = sFilter1 & "(" & sValue(i, 2) & " Like '" & sValue(i, 1) & "')"
                Else
                    sFilter1 = sFilter1 & "(" & sValue(i, 2) & " = '" & sValue(i, 1) & "')"
                End If
            End If

    Next i
           
    Me.Okno_hl_formular2.Form.Filter = sFilter1
    Me.Okno_hl_formular2.Form.FilterOn = True
    Me.Okno_hl_formular2.Form.Requery
           
   
End Sub
Nemáte oprávnenie prezerať súbory priložené v tomto príspevku.
Noro1005
 
Príspevky: 15
Registrovaný: 09.02.2011, 20:23
Udelené poďakovania: 3 krát
Prijaté poďakovania: 0 krát

Re: Vyhladavanie v Access 2007

Poslaťod JozoG » 25.02.2011, 09:05

Ak nie nastavená vlastnosť DefaultValue príslušného pola, potom použi vo výpočte funkciu NT() - prevod NULL na prázdny string, ktorú tu už raz Palo prilepil v príspevku:
http://pc-prog.eu/phpBB3/viewtopic.php?f=5&t=241&p=539&hilit=access#p540

Kód: Vybrať všetko
    sValue(1, 1) = NT(Trim(tboxMeno.Value))


Jožo
Nemáte oprávnenie prezerať súbory priložené v tomto príspevku.

Za tento príspevok autor JozoG dostal poďakovanie :
Noro1005
JozoG
 
Príspevky: 19
Registrovaný: 13.09.2009, 09:37
Udelené poďakovania: 2 krát
Prijaté poďakovania: 3 krát

Re: Vyhladavanie v Access 2007

Poslaťod Palo-admin » 25.02.2011, 09:46

Súhlasím s Jožom.

Numeric - bez apostrofov, dátum znak # pred a za
Na kontrolu typu premennej možno použiť funkciu VarType

Potom kus kódu pre generovanie "filter stringu" môže byť i takýto
Kód: Vybrať všetko
If VarType(X_val) = vbString Then
            x_hladane = X_fld_name & " = '" & X_val & "'"
        ElseIf VarType(X_val) = vbDate Then
            x_hladane = X_fld_name & " = #" & Format(X_val, "YYYY-MM-DD") & "#"
        Else
            x_hladane = X_fld_name & " = " & X_val
End If

Za tento príspevok autor Palo-admin dostal poďakovanie :
Noro1005
Palo-admin
Administrátor stránky
 
Príspevky: 473
Registrovaný: 18.07.2008, 16:43
Udelené poďakovania: 6 krát
Prijaté poďakovania: 63 krát

Re: Vyhladavanie v Access 2007

Poslaťod Noro1005 » 11.03.2011, 01:09

Surne by som ta poprosil aby si mi napisal cely kod , ako to tam mam pripojit ...vyhladavanie integerovych hodnot a taktiez string...diky moc...surne to potrebujem na dokoncenie prace za ochotu dakujem! :)
Noro1005
 
Príspevky: 15
Registrovaný: 09.02.2011, 20:23
Udelené poďakovania: 3 krát
Prijaté poďakovania: 0 krát

Re: Vyhladavanie v Access 2007

Poslaťod Palo-admin » 13.03.2011, 18:07

Upravil som tvoju pôvodnú funkciu.
Pomôž si cez tretí parameter, ktorý bude identifikovať typ filtrovanej premennej:

Kód: Vybrať všetko

    Private Sub cmdFiltruj_Click()

    Dim sValue(3, 3) As String, i As Byte, sFilter1 As String
         
       
        sValue(1, 1) = Trim(nt(tboxMeno.Value))
        sValue(1, 2) = "Meno"
        sValue(1, 3) = "T"
               
        sValue(2, 1) = Trim(nt(tboxPriezvisko.Value))
        sValue(2, 2) = "Priezvisko"
        sValue(2, 3) = "T"
               
        sValue(3, 1) = Trim(nt(tboxRokNarod.Value))
        sValue(3, 2) = "RokNarod"
        sValue(3, 3) = "N"
       
       
        sFilter1 = ""
       
        ' Filter1:  Meno AND Priezvisko
        For i = 1 To 3

                If sValue(i, 1) <> "" Then 'hodnota filtrovanej polozky
                    If sFilter1 <> "" Then sFilter1 = sFilter1 & " AND "
                   
                    If sValue(i, 3) = "N" Then 'numeric
                        sFilter1 = sFilter1 & "(" & sValue(i, 2) & " = " & sValue(i, 1) & ")"
                   
                    ElseIf sValue(i, 3) = "D" Then 'date
                        sFilter1 = sFilter1 & "(" & sValue(i, 2) & " = #" & Format(sValue(i, 1), "YYYY-MM-DD") & "#)"
                   
                    ElseIf sValue(i, 3) = "T" Then 'text
                        If InStr(1, sValue(i, 1), "*") > 0 Then
                            sFilter1 = sFilter1 & "(" & sValue(i, 2) & " Like '" & sValue(i, 1) & "')"
                        Else
                            sFilter1 = sFilter1 & "(" & sValue(i, 2) & " = '" & sValue(i, 1) & "')"
                        End If
                    End If
                End If

        Next i
               
        Me.Okno_hl_formular2.Form.Filter = sFilter1
        Me.Okno_hl_formular2.Form.FilterOn = True
        Me.Okno_hl_formular2.Form.Requery           
       
    End Sub


P.
Palo-admin
Administrátor stránky
 
Príspevky: 473
Registrovaný: 18.07.2008, 16:43
Udelené poďakovania: 6 krát
Prijaté poďakovania: 63 krát

Re: Vyhladavanie v Access 2007

Poslaťod Noro1005 » 21.03.2011, 23:06

Nazdar no skusal som to s hentym kodom upravil som ho trocha podla mojich parametrov , vyhladavanie Mena a Priezviska ide , no ked zadam do roku narodenia hodnotu ...vypise kompilator chybu a taktiez by som potreboval pridat aj pre tbox ID Autora....pre istotu pripajam zdrojovy subor....upravit treba formular VYHLADAVANIE...mohol by si sa nato pozret ?.dakujem
Nemáte oprávnenie prezerať súbory priložené v tomto príspevku.
Noro1005
 
Príspevky: 15
Registrovaný: 09.02.2011, 20:23
Udelené poďakovania: 3 krát
Prijaté poďakovania: 0 krát

Re: Vyhladavanie v Access 2007

Poslaťod Palo-admin » 22.03.2011, 10:02

Noro1005 píše:Nazdar no skusal som to s hentym kodom upravil som ho trocha podla mojich parametrov , vyhladavanie Mena a Priezviska ide , no ked zadam do roku narodenia hodnotu ...vypise kompilator chybu a taktiez by som potreboval pridat aj pre tbox ID Autora....pre istotu pripajam zdrojovy subor....upravit treba formular VYHLADAVANIE...mohol by si sa nato pozret ?.dakujem


Viacero vecí:
1) Nutné ošetrenie NULL hodnoty (zadáš iba priezvisko - hodí ti Error) - viac krát spomenutá funkcia NT
2) Mená polí s medzerami - (ako programátorovi sa mi vždy otvára nožík vo vrecku :-)) - treba použiť hranaté zátvorky: [Rok narodenia]
3) Rôzny názov poľa vo formulári a iný zdrojového prvky - veľký zdroj chybovosti, pri písaní kódu
Form_FieldSource.PNG

4) ID - nemal si to pridané - viď sValue(4, x)

Kód: Vybrať všetko
Private Sub cmdFiltruj_Click()

    Dim sValue(4, 3) As String, i As Byte, sFilter1 As String       
       
        sValue(1, 1) = Trim(nt(tboxMeno.Value))
        sValue(1, 2) = "Meno"
        sValue(1, 3) = "T"
               
        sValue(2, 1) = Trim(nt(tboxPriezvisko.Value))
        sValue(2, 2) = "Priezvisko"
        sValue(2, 3) = "T"
               
        sValue(3, 1) = Trim(nt(tboxRokNarodenia.Value))
        sValue(3, 2) = "[Rok narodenia]"
        sValue(3, 3) = "N"
       
        sValue(4, 1) = Trim(nt(tboxID_Autora.Value))
        sValue(4, 2) = "[ID_Autora]"
        sValue(4, 3) = "N"
       
      sFilter1 = ""
       
        ' Filter1:  Meno AND Priezvisko, RokNar, ID
        For i = 1 To 4

                If sValue(i, 1) <> "" Then 'hodnota filtrovanej polozky
                    If sFilter1 <> "" Then sFilter1 = sFilter1 & " AND "
                   
                    If sValue(i, 3) = "N" Then 'numeric
                        sFilter1 = sFilter1 & "(" & sValue(i, 2) & " = " & sValue(i, 1) & ")"
                   
                    ElseIf sValue(i, 3) = "D" Then 'date
                        sFilter1 = sFilter1 & "(" & sValue(i, 2) & " = #" & Format(sValue(i, 1), "YYYY-MM-DD") & "#)"
                   
                    ElseIf sValue(i, 3) = "T" Then 'text
                        If InStr(1, sValue(i, 1), "*") > 0 Then
                            sFilter1 = sFilter1 & "(" & sValue(i, 2) & " Like '" & sValue(i, 1) & "')"
                        Else
                            sFilter1 = sFilter1 & "(" & sValue(i, 2) & " = '" & sValue(i, 1) & "')"
                        End If
                    End If
                End If

        Next i
               
        Me.Okno_hl_formular2.Form.Filter = sFilter1
        Me.Okno_hl_formular2.Form.FilterOn = True
        Me.Okno_hl_formular2.Form.Requery
       
    End Sub
Nemáte oprávnenie prezerať súbory priložené v tomto príspevku.

Za tento príspevok autor Palo-admin dostal poďakovanie :
Noro1005
Palo-admin
Administrátor stránky
 
Príspevky: 473
Registrovaný: 18.07.2008, 16:43
Udelené poďakovania: 6 krát
Prijaté poďakovania: 63 krát

Re: Vyhladavanie v Access 2007

Poslaťod Noro1005 » 23.03.2011, 00:32

Diky moc uz to vsetko fachčí :) a este mimochodom jedna malickost vytvorenie tlacitka na odtranenie zaznamu z urcitej tabulky...ze ked nan kliknem sa mi odstrani oznaceni zaznam ako spravit tuto proceduru ?
Noro1005
 
Príspevky: 15
Registrovaný: 09.02.2011, 20:23
Udelené poďakovania: 3 krát
Prijaté poďakovania: 0 krát

Re: Vyhladavanie v Access 2007

Poslaťod Palo-admin » 23.03.2011, 09:46

Noro1005 píše:Diky moc uz to vsetko fachčí :) a este mimochodom jedna malickost vytvorenie tlacitka na odtranenie zaznamu z urcitej tabulky...ze ked nan kliknem sa mi odstrani oznaceni zaznam ako spravit tuto proceduru ?


Ak pridávaš tlačidlo, spustí sa ti "pomocník / wizard" v rámci ktorého ťa Access naviguje akú akciu chceš s tlačidlom urobiť, jedna z nich je "Vymazať položku"
Vygenerovaný kód vyzerá nasledovne:
Akurát jeden tip, ak chceš mazať položku v subformulári, treba naň pred mazaním nastaviť fokus, napr takto: Me.F001_ADDRESS_subform.SetFocus

Kód: Vybrať všetko
Private Sub btn_Maz_Click()
On Error GoTo Err_btn_Maz_Click

    'Me.F001_ADDRESS_subform.SetFocus
    DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
    DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70

Exit_btn_Maz_Click:
    Exit Sub

Err_btn_Maz_Click:
    MsgBox Err.Description
    Resume Exit_btn_Maz_Click
   
End Sub
Palo-admin
Administrátor stránky
 
Príspevky: 473
Registrovaný: 18.07.2008, 16:43
Udelené poďakovania: 6 krát
Prijaté poďakovania: 63 krát

Re: Vyhladavanie v Access 2007

Poslaťod Noro1005 » 26.03.2011, 13:37

A ked mam v subformulari otvorenu tabulku a v nej chcem mazat jednotlive zaznamy...podla toho, ktory oznacim ako nastavim focus!?
Noro1005
 
Príspevky: 15
Registrovaný: 09.02.2011, 20:23
Udelené poďakovania: 3 krát
Prijaté poďakovania: 0 krát

Ďalší

Späť na Word, Excel, PowerPoint, Outlook, Access

Kto je on-line

Užívatelia prezerajúci fórum: Žiadny registrovaný užívateľ nie je prítomný a 1 hosť

cron