Access probléma a VBA kóddal

Access probléma a VBA kóddal
2017-02-25T17:38:36+01:00
2017-03-01T20:20:08+01:00
2022-12-04T09:55:39+01:00
flashgordon
Kedves Mindenki

Azt szerettem volna, hogy az adatbázisom rekordját adott mezőkkel másolni tudjam. Ehhez a Google egy youtube videót adott ki találatként, ahol nagyon szépen le lehetett követni lépésről lépésre, hogy készül. Itt kétféle megoldás volt az első, ami az utolsó rekordot másolja a második meg egy tetszőlegeset. Az elsőt sikerült is összehoznom a megfelelő tábla és oszlopnevek beírásával de a második nem működik. Gondoltam megkérdem hátha tudtok segíteni. :) A mellékelt képen láthatjátok a Vba kódot a zöld sor lenne a jó a tetszőleges rekord ismétléshez de nem megy, illetve a hivatkozott tábla oszlopneveit a könnyebb tájékozódás érdekében.

A válaszokat előre is köszönöm. :)
Mutasd a teljes hozzászólást!
Csatolt állomány
Lehet az volt a gond, de azért találtam sok hibát, nem tudom azok ide illenek-e.

Maradva a f_comics-nál:

Private Sub Parancsgomb43_Click() Dim ID As Long ID = CLng(Forms![f_comics]![Azonosító]) MsgBox ID DoCmd.GoToRecord , , acNewRec Titel = DLookup("Titel", "tb_comics", "Prim=" & ID) Reihe = DLookup("Reihe", "tb_comics", "Prim=" & ID) Folge = DLookup("Folge", "tb_comics", "Prim=" & ID) Beendet = DLookup("Beendet", "tb_comics", "Prim=" & ID) Autor = DLookup("Autor", "tb_comics", "Prim=" & ID) Zeichungen = DLookup("Zeichungen", "tb_comics", "Prim=" & ID) Land = DLookup("Land", "tb_comics", "Prim=" & ID) Verlag = DLookup("Verlag", "tb_comics", "Prim=" & ID) Sprache = DLookup("Sprache", "tb_comics", "Prim=" & ID) Eredetiben nem ilyen név volt, az nem létezett! Design -ban a NAME-nél megadottal kell hivatkozni rá valamint nem egészséges objektumnak a nevében space-t és ékezeteket használni. [Wurde Comics früher in Ungarn erscheint?].Value = DLookup("schon_erscheint", "tb_comics", "Prim=" & ID) Itt is rossz volt a név! [Gelesen?].Value = DLookup("Gelesen", "tb_comics", "Prim=" & ID) Format = DLookup("Format", "tb_comics", "Prim=" & ID) Untertitel.SetFocus End Sub
Ha a kód elejére beilleszted:

Option Compare Database 'ez benne van már a kódodban
Option Explicit

Innen jön a többi kód

Akkor figyelmeztet, ha nincs megadva valami rendesen!! Ezek a hibák csak az option explicit beszúrása után jöttek elő! Rossz névadás, ismeretlen változó stb.
Mutasd a teljes hozzászólást!

  • Szia!

    Próbáld meg:

    ID=Dmax("[Prim]","tb_comics")
    Mutasd a teljes hozzászólást!
  • Sajnos nem változik semmi. Az utolsó rekordot duplikálja.
    Mutasd a teljes hozzászólást!
  • Bocs, félreértettem. Azt hittem, hogy csak ilyesmi gond van. A problémád ezzel a kóddal, hogy az ID felveszi a maximális(utolsó) értékét, majd az ahhoz tartozó értéket keresi meg.

    Te azt szeretnéd, hogy beírsz egy számot, ami az ID és a hozzá tartozó elemeket írja ki?

    Vagy gomb 'előző',  'következő', 'eleje' 'vége'?

    Mert akkor fel kellene venni egy textbox-ot pl, amibe bele lehet írni egy számot, majd ebbe a kódba az ID=textboxértéke (pontosabban átalakítva long-ra), majd futhat a kód, de ekkor a ID=max(... ki kell törölni.

    Ebben az esetben vizsgálni kell, hogy a textbox értéke szám-e, illetve nem üres véletlenül.
    Mutasd a teljes hozzászólást!
  • Nem a rekord másolás. Ha a videót megnézed ott lépésről lépésre megvan a kód elkészítése. Meg is csináltam az én tábla és mezőneveimmel de nem működik.
    Mutasd a teljes hozzászólást!
  • Azt írtad, hogy az utolsóra működik. Gondolom ez a parancsgomb43 nálad.

    Ha az aktuális recordot akarod, akkor az ID= max.. el kell felejteni. A videóban az aktuális record copy, a csatolt képen látható kód.

    Nézd meg, hogy ott az ID =productID, ami nálad így alakulhat:

    ID=prim

    majd a többi, ami már megvan. Csak az ID értéke dönti el, hogy mire működjön. Az utolsóra a dmax-al hivatkozott, az épp aktuálissal meg a csatolt képen mutatott módon.
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Hát most nem tudom biztosan, hogy jól értem, amit mondtál. Az ID=prim -met próbáltam ezt láthatod az első hozzászólásban mellékelt képen zölddel. (Mivel hibaüzenettel leállt megjegyzést csináltam belőle, hogy nem foglalkozzon vele futtatás közben.) Ha jól emlékszem a tb_comics táblát kezdte keresni de nem értettem miért. Én is a videóban látott kódot akartam alkalmazni az én adatbázisomra átszabva.
    Mutasd a teljes hozzászólást!
  • Persze, hogy elszállt!!!

    Nem így kommentelhetsz mellé!

    ID=prim 'Mit diesem..... Rossz helyen van ez a " ' " karakter!   A mit diesem semmi, csak komment!

    A fordító nem tudta mit is tegyen! Azt hittem ez a komment az egész ID-vel csak segéd dolog magadnak!

    Ha ment, mert rendesen ki van kommentelve, akkor a teljes hibaüzenet lenne jó, illetve a táblanevet teheted [] közé.
    Mutasd a teljes hozzászólást!
  • Ha az utolsóra működött, de az aktuálisra nem, akkor máshol is lehet a gond. (természetesen, ha az ID=Prim jól lett kommentelve)

    Az is előfordulhat, hogy a prim nem vesz fel értéket, így azt nem is adja át az ID-nek. Próbáld ki, hogy direktben adsz neki értéket, olyat ami tuti van:

    ID=2
    további kód

    csak azért gondolom ezt, mert az utolsóra ment, nem volt semmi gondja a táblanevekkel, stb.

    MsgBox(Prim) a kód elejére, hogy van-e egyáltalán értéke, ami nem 0.
    Mutasd a teljes hozzászólást!
  • Feltettem pár screeshoot-tot, hogy lásd,hogy reagál a kódra.

    https://1drv.ms/f/s!AspI3B3yd-hBgbHdN6TSeIumIUklPYg

    :) hátha ez segít. Az ID értékét a prim helyett adjam meg vagy új sorban?
    Mutasd a teljes hozzászólást!
  • Nincs előttem a teljes Access kódod. Nem látom, hogy az űrlapon mik vannak, és milyen névvel. Az utolsóra ugrás az nálad is megy, mert a függvényben megadtad neki a Prim-t és a táblanevet.

    A videóban nem látszik, (vagy nem értem), de az aktuális record, ahova lép, visszaadja a ProductID-t.

    Mikor klikkel a next gombra, akkor nála a productID mezőben megjelenik az aktuális értéke, majd ezt a vitatott rutinban átadja az ID változónak. Szerintem ez nálad nem történik meg. Ezért írtam, hogy msgbox(prim).
    Mutasd a teljes hozzászólást!
  • Ez igen!

    Rárepültél rendesen, a hiba szemléltetésére!
    Mutasd a teljes hozzászólást!
  • Örülök, hogy tetszik. Hátha meghozza a megoldást.  Az előző hsz-ben írt msg-box-szal pontosan mit is csináljak?
    Mutasd a teljes hozzászólást!
  • Csak arra lennék kíváncsi, hogy milyen értéket kap, már ha kap...

    Szóval:

    ID=Prim

    msgbox "A felvett ID értéke: " & ID
    msgbox"A felvett Prim értéke: " & Prim

    Innen a többi kód. Csak szerettem volna tudni, hogy mennyi az értéke.

    Ez nem kell feltétlenül, mert ha ráhúzod az egeret a prim változóra, mikor leáll akkor megmutatja. Vagy adott sornál megállítod a kódot, megnézed mennyi az aktuális értéke, de szerintem ezeket te is tudod.

    Egy
    Option Explicit
    sort beszúrnék a kódok elejére azért biztos ami biztos.

    Vagy tényleg csak annyi, hogy nem lehet üresen hagyni az adott rekord mezőjét. Mondjuk a hiba azt is írja különben.
    Mutasd a teljes hozzászólást!
  • a felvett ide érték 0 lesz a a prim értékre semmit nem ír.

    ebből semmit sem értek:

    Ez nem kell feltétlenül, mert ha ráhúzod az egeret a prim változóra, mikor leáll akkor megmutatja. Vagy adott sornál megállítod a kódot, megnézed mennyi az aktuális értéke, de szerintem ezeket te is tudod.

    ezt Option Explicit minden sor elejére másoljam be?
    Mutasd a teljes hozzászólást!
  • Van 0-ás értékű Prim az adatbázisban? Szerintem nincs. A prim változód meg nem is létezik.

    Ok, akkor ha van 2-es értékű prim a táblában, akkor próbáld ki, hogy megy-e ezzel:

    ID=2

    kód további része.

    Az option explicit sort csak 1x kell beírni, a kódok legelejére. Szerintem rögtön hibát fog dobni ez miatt.

    Meg tudod szakítani a programod futását egy adott sornál, ha teszel egy piros pöttyöt a sor mellé, baloldalt. Ennek az a lényege, hogy ha a hibát dobó sor elé teszed, akkor a program megáll ahol a pötty van, le tudod ellenőrizni az aktuális változók értékét.
    Mutasd a teljes hozzászólást!
  • Ezzel is próbáld ki:

    ID=ProductID

    Ha ezzel megy, akkor sírva fakadok. (Mert akkor nem neveztél át semmit, csak beírtad amit találtál, és a többi kódrészletben megfelelő értéket kap.)
    Mutasd a teljes hozzászólást!
  • ProductID-vel sem megy. Ha gondolod elküldöm a file-t és belekukkanthatsz.

    Az ID helyére kettőt írtam semmi nem történt. Utána megnéztem a táblában az elsődleges kulcs első értéke 9 volt. Beírtam ezt de akkor meg a hozzátartozó rekordot másolta át hibaüzi nélkül nem ezt, amit én szerettem volna. Próbáltam * -ra átjavítani de nem fogadta el.
    Mutasd a teljes hozzászólást!
  • Küldtem privátot!

    Amúgy szerintem valamit nagyon, de nagyon benézek!

    Bocsánat ezért!
    Mutasd a teljes hozzászólást!
  • Némi módosítással már megy, keresek egy jobb megoldást.

    Ha a prim textbox-ot láthatóvá teszed a f_comics űrlapon és a kódban ezt adod meg:

    Private Sub Parancsgomb43_Click()
    Dim ID As Long
    ID = CLng(Forms![f_comics]![Azonosító])

    Akkor mintha menne.
    Mutasd a teljes hozzászólást!
  • Én rontottam el és most jöttem csak rá, hogy hol. Valamiért volt egy f_comics és egy tb_comics  tábla mindkettő ugyanaz. Én az f_comicsban dolgoztam és azt hittem, hogy a tb_comicsban dolgozom. Átmásoltam a táblát és működik. 


    Szóval köszönöm azért az együtt működést. :) Esetleg a másik access problémámra is tudod a megoldást örülnék :)
    Mutasd a teljes hozzászólást!
  • Lehet az volt a gond, de azért találtam sok hibát, nem tudom azok ide illenek-e.

    Maradva a f_comics-nál:

    Private Sub Parancsgomb43_Click() Dim ID As Long ID = CLng(Forms![f_comics]![Azonosító]) MsgBox ID DoCmd.GoToRecord , , acNewRec Titel = DLookup("Titel", "tb_comics", "Prim=" & ID) Reihe = DLookup("Reihe", "tb_comics", "Prim=" & ID) Folge = DLookup("Folge", "tb_comics", "Prim=" & ID) Beendet = DLookup("Beendet", "tb_comics", "Prim=" & ID) Autor = DLookup("Autor", "tb_comics", "Prim=" & ID) Zeichungen = DLookup("Zeichungen", "tb_comics", "Prim=" & ID) Land = DLookup("Land", "tb_comics", "Prim=" & ID) Verlag = DLookup("Verlag", "tb_comics", "Prim=" & ID) Sprache = DLookup("Sprache", "tb_comics", "Prim=" & ID) Eredetiben nem ilyen név volt, az nem létezett! Design -ban a NAME-nél megadottal kell hivatkozni rá valamint nem egészséges objektumnak a nevében space-t és ékezeteket használni. [Wurde Comics früher in Ungarn erscheint?].Value = DLookup("schon_erscheint", "tb_comics", "Prim=" & ID) Itt is rossz volt a név! [Gelesen?].Value = DLookup("Gelesen", "tb_comics", "Prim=" & ID) Format = DLookup("Format", "tb_comics", "Prim=" & ID) Untertitel.SetFocus End Sub
    Ha a kód elejére beilleszted:

    Option Compare Database 'ez benne van már a kódodban
    Option Explicit

    Innen jön a többi kód

    Akkor figyelmeztet, ha nincs megadva valami rendesen!! Ezek a hibák csak az option explicit beszúrása után jöttek elő! Rossz névadás, ismeretlen változó stb.
    Mutasd a teljes hozzászólást!
  • Igen a Gelesen?-t délután javítottam ki pont a kérdőjel miatt. A többit nem állítom, hogy értem de most működik :) köszönöm :)
    Mutasd a teljes hozzászólást!
  • Helló még egy apróság: Nem lehetne egy olyan sárga hátterű kis idő után eltűnő bubit csinálni, ami kiírja, hogy egy rekordot lemásolt?
    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