Zavrieť

Porady

MS Access: Vloženie dát z vnoreného formulára do tabuľky

Ahojte/Dobrý deň,

mám vnorený formulár v ktorom filtrujem záznamy. Tieto filtrované záznamy by som chcel po kliknutí na tlačítko, uložiť v tabuľke. No doposiaľ som neprišiel na to, ako to urobiť.
Mohli by ste mi prosím pomôcť?

Ďakujem.

Ps:
v prílohe som pripravil Access v ktorom je formulár s vnoreným formulárom, ktorý čerpá údaje s tabulky1. filtrované údaje by sa mali ukladať do tabulky2.
Téma je uzavretá.
Usporiadať podľa času

PaloPa je offline (nepripojený) PaloPa

PaloPa
Riešiť sa dá mnohými spôsobmi, najčastejšie cez VBA, kde sa na prvky subformulára odkazuje napr. cez
Me!Subform1.Form!ControlName (podrobne popísané tu: Forms: Refer to Form and Subform properties and controls ), ale nie je treba vždy isť "s bubnom na zajace".

Stačí zavolať z formulára Append Query, kde je väzba na prvky formulára, ktorých hodnota deklaruje výsledok filtra, napr. cez makro (dá sa skovertovať na VBA a ďalej upravovať). Viď príklad - form Zóny.

Palo
Update_from_form.jpg  
Macro_Update_from_form.PNG  
Form_and_subfrom.jpg  
1/1

PaloPa je offline (nepripojený) PaloPa

PaloPa
V tom prípade sa dá cez VBA, napr. cez RecordsetClone:
!! Pre seriózne použitie to chce ošetriť výnimky (v príklade som odblokoval Autonumber a OLE typ poľa).

Code:
Option Compare Database

Function FillFilteredRecords(F As Form, xTbl As String)

   Dim RS As DAO.Recordset, C As Control
   Dim FillFields As String, FillAllFields As Integer
   
   On Error GoTo xExit
     
   ' Goto the last record of the form recordset 
   Set RS = F.RecordsetClone
   RS.MoveLast
   ' Exit if you cannot move to the last record (no records).
   If Err <> 0 Then GoTo xExit
   
    RS.MoveFirst
    
    For Each fld In RS.Fields
        If fld.Name <> "ID" Then 'autonumber
            xFldNames = xFldNames & IIf(xFldNames = "", "", ", ") & fld.Name
        End If
    Next fld
    
    Do Until RS.EOF
        xFldValue = ""
        For Each fld In RS.Fields
            If fld.Name <> "ID" Then 'autonumber
               If fld.Type = dbText Then
                    x = "'" & Nz(fld.Value, "") & "'"
               ElseIf fld.Type = dbLongBinary Then 'treba riesit inak
                    x = "''"
               Else
                    x = Nz(fld.Value)
               End If
               xFldValue = xFldValue & IIf(xFldValue = "", "", ", ") & x
            End If
        Next fld
        
        xSQL = "INSERT INTO " & xTbl & " ( " & xFldNames & " ) " & " Values( " & xFldValue & ")"
        CurrentDb.Execute xSQL
        RS.MoveNext
    Loop
    RS.Close

xExit:
    Set RS = Nothing
   
End Function
TIP: Pri veľkom počte položiek môže byť prechádzanie cez recordset a insertovanie po jednom riadku pomalé. Vtedy by som to riešil "vycucnutím filtra" pre daný subform (vlastnosti F.filter, F.FilterOn)
a vygeneroval by som si append query , kde where by bol daný filter napr: Filter : "([Krajiny].[Krajina] In ("Afghanistan","Arménsko","Azerbájdžán"))"
Naposledy upravil PaloPa : 27.08.12 at 18:27 Dôvod: doplnenie
Ardonaiel ĎAKUJEM!!! Presne takéto riešenie som potreboval. Konečne sa môžem posunúť ďalej. :-)

pepo_p je offline (nepripojený) pepo_p

2 zamestnania a pracujem do roztrhania :-D ...viac pepo_p
Nechápem, prečo sa chceš škriabať ľavou rukou za pravým uchom? V Accesse máš jednu tabuľku a nad ňou spracovávaš formuláre a dotazy. Nadefinuj dotaz a máš to to isté ako keby si tie dáta ukladal do tabuľky.
Dáta v tabuľkách udržuj vždy len minimálne, ostatné rieš dotazmi nad nimi.

Ardonaiel je offline (nepripojený) Ardonaiel

Ardonaiel
pepo_p >> Tu som priložil len podklad pre predstavu a aby ste si nemuseli vytvárať access s tabuľkami a formulármi. V skutočnosti je tabuliek, dotazov, formulárov a makier v Acesse oveľa viac - ale ako príklad tu predsa nebudem vkladať 500MB databázu a ešte zvlášť aplikáciu a vysvetľovať, ako funguje a prečo a ako čo riešim predsa :-).

Tvoja/Vaša odpoveď mi môj problém žiaľ nevyrieši, keby som situáciu vedel vyriešiť nejakým dotazom, tak to už dávno urobím. Ide o to dostať filtrované údaje z vnoreného formulára do tabuľky. Formulár bude slúžiť ako užívateľské prostredie, keďže je práca a filtrovanie v ňom podobná excelu. Nebudem predsa užívateľovi, ktorý nevie robiť v Accesse hovoriť: ,,urob si SQL dotaz na tabuľku" :-)

... pomocou recordsetu viem filtrovaným záznamom vo vnorenom formulári meniť hodnoty, ale čo neviem, je tieto filtrované záznamy, uložiť potom do extra tabuľky - a extra tabuľka je v mojom prípade potrebná - prečo je potrebná tu určite nebudem riešiť. :-) Vyriešiť potrebujem ukladanie filtrovaných záznamov.

Ak to nie je možné OK, ale ak áno, prosím o pomoc/radu.
Ďakujem.

Ardonaiel je offline (nepripojený) Ardonaiel

Ardonaiel
PaloPa > ďakujem veľmi pekne za snahu mi pomôcť, toto riešenie poznám a ospravedlňujem sa, ak som problém zle vysvetlil/popísal, no myslel som filtrovanie záznamov priamo v subformulári (cez dátové zobrazenie, viď obrázok), a nie odkazom na hodnotu v ovládacom prvku combo ako je to vo Vašom/tvojom prípade.

V dátovom zobrazení je možné zadať niekoľko filtrov naraz (podobne ako v exceli), čo mi vyhovuje, pretože vopred neviem v ktorých poliach sa bude filtrovať a čo. S tohto dôvodu ani nemôžem odkazovať SQL dotazom na combo alebo iný prvok, keďže vopred nepoznám tie polia a podmienky.

Čiže, potrebujem len filtrované dáta zo sub formulára a filtrované cez dátové zobrazenie. :-)
Filtrovanie cez dátové zobrazenie.jpg  

MS Access: Vloženie dát z vnoreného formulára do tabuľky

Porady, ktoré by vás mohli zaujímať

Prihláste sa a sledujte len tie Porady, ktoré Vás zaujímajú.