Access vba sql keresés és textboxba írás
2018-05-09T12:32:58+02:00
2018-05-09T14:34:43+02:00
2022-08-11T03:05:30+02:00
Biscotto
Sziasztok! Kicsit úgy érzem már túlságosan elmerültem egy problémában és nem is biztos, hogy teljesen jó úton haladok, remélem tudtok segíteni.

Adott egy Access adatbázis táblákkal formokkal. Szeretnénk lehetőség szerint mindent VBA kóddal megoldani.

Van egy táblám (tblbeosztas) 3 mezővel (Nap(dátum) ; PortaID (szám, de mivel kötött mező egy másik táblával, így szövegként jelzi ki) ; Torzsszam (szintén az előbbi szerint számot tárol de nevet mutat). Ebből a táblából szeretnék lekérdezést csinálni és az értékeket kiírni egy formon több textboxba. Mindezt úgy, hogy figyelembe veszem a formon lévő kiválasztott Napot (txtdatum) és a kiválasztott PortaID-t. 

A kódom a következő:

Private Sub Szolgalat() Dim i, p, letszam As Integer Dim db As DAO.Database Dim rs As DAO.Recordset Dim strsql As String Dim dnaps As String 'Dátum beírása és átalakítása, mivel az SQL nem kezeli a magyar formot dnaps = Format(Me.txtdatum.Value, "mm\/dd\/yyyy") 'porta azonosítója a formon lévő textbox (txtp1) alapján p = DLookup("[PortaID]", "tblszolgalatihely", "[Porta]=" & Chr$(34) & Me.txtp1 & Chr$(34)) '1. porta szolgálatának keresése Set db = CurrentDb strsql = "SELECT [Torzsszam] FROM tblbeosztas WHERE [Nap]= #" & dnaps & "#" & " AND " & " [PortaID] =" & p Set rs = db.OpenRecordset(strsql) ' a porta létszáma letszam = DLookup("[Letszam]", "tblszolgalatihely", "[PortaID]= 1") 'textboxok kitöltése, melyek neve txtnev1, txtnev2 stb. For i = 1 To letszam With rs Me.Controls("txtnev" & i) = rs.Fields(i).Value End With Next End Sub
A kód helyel közzel működik, de a dátum átalakításának megfelelősségében sem vagyok biztos. A táblában a dátumokat talán sikerült átalakítani mm/dd/yyyy változatra, így azzal nem kéne gond legyen de a Format() az elvileg stringet ad vissza nem dátum formátumot. Ha azt átalakítom akkor viszont megint yyyy.mm.dd formátumot kapok, ami nem jó.

A textboxok szintén nem töltődnek ki, biztosan nem megfelelően közelítem meg a dolgot. Az rs.EOF módszer azért nem jó szerintem, mert nem akarok végigmenni csak adott számú rekordon.

Előre is köszönöm ha valaki ezekből az infokból tud segíteni.
Mutasd a teljes hozzászólást!
Bocsánat, az elírás .

A p változóba a portaID-jét kellett kikeresnem mert a textbox stringben tartalmazta.

A létszám kereséséhez pedig valóban használhattam volna a p-t is, módosítom azonnal.

Pont az előbb sikerült összeállítanom valamilyen módon a kódot, úgy látszik, hogy egyelőre működőképesen.  Bemásolom a "kész" kódot, ami nekem bejött. Van azóta benne pár új változó meg számítás, mert időközben folyamatosan rájövök, hogy még mindig kell valami :)

Private Sub Szolgalat() Dim i, pID, nev, letszam, szemszaml As Integer Dim db As DAO.Database Dim rs As DAO.Recordset Dim strsql As String 'Dim dnap As Date Dim dnaps As String 'Dátum beírása és átalakítása dnaps = Format(Me.txtdatum.Value, "mm\/dd\/yyyy") pID = DLookup("[PortaID]", "tblszolgalatihely", "[Porta]=" & Chr$(34) & Me.txtp1 & Chr$(34)) 'PortaID a textbox alapján Set db = CurrentDb strsql = "SELECT [Torzsszam] FROM tblbeosztas WHERE [Nap]= #" & dnaps & "#" & " AND " & " [PortaID] =" & pID 'a dátum és a porta függvényében az emberek keresése Set rs = db.OpenRecordset(strsql) letszam = DLookup("[Letszam]", "tblszolgalatihely", "[PortaID]=" & pID) 'a porta létszáma, hogy meddig kell a for ciklus szemszam = 1 'Személyek számlálása, hogy a textboxok kitöltése lejebb is automatizált lehessen For i = 1 To letszam With rs nev = rs.Fields("Torzsszam") Me.Controls("txtnev" & szemszam) = DLookup("[Nev]", "tblallomany", "[Torzsszam]=" & nev) 'beírom egyenként a textboxokba rs.MoveNext szemszam = szemszam + 1 End With Next
Szerencsére megoldódni látszik a dolog. Köszönöm, hogy foglalkoztál vele!!!!
Mutasd a teljes hozzászólást!

  • A textboxok szintén nem töltődnek ki,

    Ellenőrizted, hogy a recordset hány sort ad vissza?

    ' a porta létszáma
    letszam = DLookup("[Letszam]", "tblszolgalatihely", "[PortaID]= 1")
    PortaID = 1?
    előbb még p-be vésted!!

    'porta azonosítója a formon lévő textbox (txtp1) alapján p = DLookup("[PortaID]", "tblszolgalatihely", "[Porta]=" & Chr$(34) & Me.txtp1 & Chr$(34))
    Debug segíthet..
    Mutasd a teljes hozzászólást!
  • Bocsánat, az elírás .

    A p változóba a portaID-jét kellett kikeresnem mert a textbox stringben tartalmazta.

    A létszám kereséséhez pedig valóban használhattam volna a p-t is, módosítom azonnal.

    Pont az előbb sikerült összeállítanom valamilyen módon a kódot, úgy látszik, hogy egyelőre működőképesen.  Bemásolom a "kész" kódot, ami nekem bejött. Van azóta benne pár új változó meg számítás, mert időközben folyamatosan rájövök, hogy még mindig kell valami :)

    Private Sub Szolgalat() Dim i, pID, nev, letszam, szemszaml As Integer Dim db As DAO.Database Dim rs As DAO.Recordset Dim strsql As String 'Dim dnap As Date Dim dnaps As String 'Dátum beírása és átalakítása dnaps = Format(Me.txtdatum.Value, "mm\/dd\/yyyy") pID = DLookup("[PortaID]", "tblszolgalatihely", "[Porta]=" & Chr$(34) & Me.txtp1 & Chr$(34)) 'PortaID a textbox alapján Set db = CurrentDb strsql = "SELECT [Torzsszam] FROM tblbeosztas WHERE [Nap]= #" & dnaps & "#" & " AND " & " [PortaID] =" & pID 'a dátum és a porta függvényében az emberek keresése Set rs = db.OpenRecordset(strsql) letszam = DLookup("[Letszam]", "tblszolgalatihely", "[PortaID]=" & pID) 'a porta létszáma, hogy meddig kell a for ciklus szemszam = 1 'Személyek számlálása, hogy a textboxok kitöltése lejebb is automatizált lehessen For i = 1 To letszam With rs nev = rs.Fields("Torzsszam") Me.Controls("txtnev" & szemszam) = DLookup("[Nev]", "tblallomany", "[Torzsszam]=" & nev) 'beírom egyenként a textboxokba rs.MoveNext szemszam = szemszam + 1 End With Next
    Szerencsére megoldódni látszik a dolog. Köszönöm, hogy foglalkoztál vele!!!!
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd