Segítsetek nekem lécci... Ms access-ben van 1 lekérdezésem...Eddig minden ok, de nekem ki kellene számolnom, hogy hány db rekord van a lekérdezésben.... Ha elindítom a lekérdezést, akkor látom, hogy pl. 5 db rekord van benne, de ki kellene íratnom ezt a számot (ami folyamatosan változik, a bevitt adatoktól függõen) az ûrlapomra. Tudja valaki a megoldást??? Plíz help
ez rendben van, hogy a Count paranccsal megszámolom, de, mint elõször is kérdeztem, "ki kellene íratnom ezt a számot (ami folyamatosan változik, a bevitt adatoktól függõen) az ûrlapomra. " Na ezt, hogy veszem ki belõle?
legegyszerûbben: a kijelzõ egy lista (formázva), melynek a rekordforrása a nevezett lekérdezés.
nem jó sajnos... a lista nem frissül a lekérdezéssel együtt, csak ha az ûrlapot újraindítom....
gondoltam...
végre lehet hajtani minden vezérlõelemen futásidejû újralekérdezést. Ezt mondjuk a form_afterupdate() eljárásban tudod megtenni, egy vezerloelem.Requery utasítással. Ennyi
jah, asszem a kópia (replica/adatbázis-többszörözés) ilyen esetekben kitûnõen alkalmazható, próbáld ki (eszközök->többszörözés->kópia) mert én még nem használtam igazából...
Lenne egy másik kérdésem... Azt, hogy lehet megoldani, ha ürlapon viszek be 1 adatot, s lelépek róla akkor csináljon egy vizsgálatot, hogy ez az adat már létezik-e, s ha igen, akkor visítson..... Pl, ne tudjak 2 TAJ számot rögzíteni véletlenül...
Ezt még a mezõ frissítése elött kell levizsgálni, nem az ürlapról való lelépés után! Akkor már hibásan felkerült az adatbázisba!
csak 1 gond van vele... hogy akkor böki ki, hogy 2 TAJszámot vittem fel, amikor már az összes többi adatot is felvittem, s lépnék 1 következõ rekordra.... nem lehet elõbb vizsgáltatni valahogy?
és akkor mi baj van?
szerintem azt kellene csinálni, hogy a következõ rekordra lépésnél (2105-ös hibával tér vissza, ha egy indexelt mezõben két ugyanolyan rekord van) figyeljük ezt a hibaszámot, és megjelenítünk egy párbeszédablakot, hogy elbacta a tajszámot, valahogy így: Private Sub ujrekordCommandbar() 'az újrekord parancsgomb végzi a következõ rekordra léptetést On Error GoTo Hiba 'hibafigyelés elhelyezése, hiba esetén ugrás a címkére DoCmd.GoToRecord , , acNewRec 'következõ rekordra lépés parancssora Hiba: 'hibakezelés címke If err = 2105 Then '2105-ös hiba, tehát nem lehet a követk. rekordra lépni, tudjuk miért! Msgbox("Hibásan adta meg a tajszámot!", vbExclamation) DoCmd.GoToControl "tajszammezo" 'a tajszám beviteli mezõre visszük a fókuszt Exit sub Else Resume 0 ' egyéb hibánál vissza a hibát kiváltó sorra End If
Ti egyébként ismeritek az Access 2003-at? Mert én nem! :-(
nem, nekem a 2000(még offiszos) tökéletesen bevált!
ápropó, van egy nagy gondom az access-el, nevezetesen a lista vezérlõelem meglehetõsen bugyuta mivolta. Ugyanis nem lehet az elemeket mozgatni (úgy mint általtalában a lista vezérlõelemekkel, pl addItem, removeItem stb.), és már több prodzsektemet ( kellett átírnom miatta.
Ez jó megoldás, de csak akkor mûködik, ha már a következõ rekordra lépek. Nekem akkor kéne a vizsgálat, mikor a TAB-bal lelépek a TAJszámok beviteli mezõrõl. Meg lehet csinálni ezt?
úgy hiszem, kis gondok vannak a tábla készítésénél. alapelv, hogy ha egy olyan mezõt akarok létrehozni (mint nálad a TAJszám), amely nem tartalmazhat két ugyanolyan rekordot, akkor azt kötelezõ indexelni. Tehát vagy elsõdleges kulcsként azonosítom (bár szerintem a nálad egy sorszám mezõ az igazi), vagy csak indexelem. Mindkét esetben hiba lép fel, ha a felhasználó már létezõ adatot akar felvinni, méghozzá akkor, amikor a vezérlõelem (a TAJszám bev.mezõ) elveszti a fókuszt. Ennél egyszerûbb megoldást nem tudok erre a problémára.
Lenne mégegy, de az rendkívül bonyolult, és VBA-ban kellene megírni. Létre kell hozni egy tábla típusú rekordset objektumot, amelynek elemei a tajszám mezõ rekordjai, ezt egy tömbben feltölteni futásidõben, majd a tömb adatait összehasonlítani ( do loop ciklussal) a bevitt adattal. Ha egyezés történt, figyelmeztetni kell a felhasználót, és törölni az általa bevitt adatot. Mégegyszer mondom, szerintem ez felesleges idõpocsékolás.
rushman: ki tudnál linkelni egy olyan db1-et, amin látszik is, hogy mi a lényeg? ergo: tudnál csinálni egy olyan táblát/ûrlapot, ahol megvan a megoldás? Addig ok, hogy indexelem, meg ki is írja a hibát, de csak akkor, ha a következõ rekordra akarok lépni...s nem akkor, amikor lelépek(átlépek) TABbal a köv. beviteli mezõre. Pl, van 5 beviteli mezõ az ûrlapon, aminek elemei a TAJ tábla (1. számláló:nem lehet módosítani, 2 bev. mezõ: TAJszám (index, nem lehet azonos), 3 bev. mezõ:Név, 4. bev. mezõ: cím, 5. bev. mezõ: szül idõ.) Namost, úgy kéne, hogy ha a 2. bev. mezõt kitöltöttem az ûrlapon, nyomok 1 TABot, akkor visíton, hogy "Ilyen már van". Lehet, hogy csak én nem értem amit leírtál?
rushman, elõre is köszi a segítséget
Most már értelek, az általam leírt megoldás tényleg csak következõ rekordra lépés esetén mûködik. Elsõre az Eval[i/] függvény ugrik be, ki is próbálnám, de valami szaraxik az accesssel, újra fel kéne raknom. (mindig ezt írja ki, aztán kilép: hiba a dll betöltése közben)
beszart az offisz, egyszerûen az access indulásakor hibát jelez, aztán kilép. ma rakom vissza az offisz2000-ret, aztán utána meglesz. Emléletben már megvan, csak át kellem ültetni gyakorlatba is...
Beszarok, hogy az agész neten nem találok segítséget access-hez...így ez az utolsó próbálkozásom... Az a problémám, hogy csináltam egy táblát, amibe gyûjtögetem az adatokat...stb. Szeretnék olyat csinálni, hogy jelentés formában egy adott rekord adatait egy meghatározott nyomtatványba írja ki! Tehát van nekem egy ref.számom, amihez tartozik egy csomó adat és ezen a ref.számhoz tartozó adatokat lekérhessem és kinyomtathassam egy nyomtatvány formályában... A biankó nyomtatványom word-ben van, ha össze lehetne passzítani az király lenne, de ha nem akkor az se baj... Ha esetleg akad olyan akinek van ICQ-ja, mirce..stb. és on-line tudna segíteni azt nagyon megköszönném!
Szimplán jelentésként egyszerûbb, ott a jelentés rekordforrása egy olyan lekérdezés, mely a szükséges adatokat tartalmazza.
Megoldható azonban az is, hogy az adatokat átadd egy office alkalmazásnak (így a Wordnek is).
Jelenleg szaraxik az offiszom, ha rendbevágom, utánanézek
Elõször is be kell kapcsolni a Visual Basic ablakban ( tools->references->keresd ki:Microsoft Word 8.0(9.0)Object Library) a Word Object Library-t. Ha ez megvan akkor használhatóvá válnak a word hivatkozási parancsok.
Egy eljárás, mely megnyitja a word-öt, majd hozzáad egy szövegrészt:
Sub eljaras()
Dim WordProgram as New Word.Application Const Szoveg As String = "Ez íródik be a Wordbe"
WordProgram.Visible = True 'Láthatóvá tesszük a Wordöt WordProgram.Documents.Add ' Egy új dokumentumot megnyitunk WordProgram.Selection.TypeText Szoveg ' ...és bele a szövegünk End Sub
Persze ez csak az alap szemléltetésére írtam, ennél komolyabb dokumentumok és létrehozhatók. További infó a VBA Object Browser-ében.
Aha értem...csak azt nem tudom, hogy mi az a parancssor amivel, csak egy adott rekordra kérdezzen rá és azon értékeket írja csak ki... Mert most jelenleg az összes rekordot kilistázza a nyomorút, de nekem csak egy kell... A wordot egyenlõre hanyagolom, mert egyszerûbbnek tûnik a jelentés formázása a doksim mintájára... Szal a jelentés készítésnél mi az a parancssor, ami egy rekordra adataira vonatkozik? A másik meg az, hogy mi az a parancssor ami -tól -tólig van?
Na, jah, de Én azt szeretném, hogy ha rákattintok a jelentésre, akkor kérdezze meg a ref.számot, majd egy entert nyomva ahoz a refszámhoz tartozó elmeket jelenítse csak meg. A ref.szám=rekord számmal.
Addig eljutottam, hogy beírok neki a beviteli mezõben egy olyat, hogy "@enter", erre kilök az indítás elején egy ablakot, ahova beírhatok paramétert vagy bármit, de nem annak a bevitt paraméternek megfelelõen listázza a jelentést...valami még hiányzik...
Ez a paraméteres lekérdezés esete! Hozz létre egy ürlapot, ami rákérdez a ref számra. Azt beviszed egy lekérdezés feltétel sorába és utána hívod meg a lekérdezést!
Zipus azt akarja mondani, hogy a jelentés annak a lekérdezésnek az adatait vegye alapul, amelyik megkérdi, hogy mi legyen a refszám.
Sziasztok, abban segítsetek nekem lécci, hogy lekérdezésnél, hogyan lehet 2,3 cellát egybe illeszteni. Tehát: van 1 lekérdezésem, ami lekérdezi a nevet: 0. cella: Tajszám 1. cella: Családi név 2. cella: Utónév 3. cella: utónév 1
Igenám, de ez nekem egy cellába kéne 1 rendezni a nevet a késõbbi feldolgozások miatt.... Van valakinek ötlete???
Egyszerû a kérdés: A lekérdezésbe beviszed azt a táblát amiben ezek a mezõk szerepelnek és utána a mezõ sorba begépeled: valami:[Tajszám]&[Családi név]&[Utónév]&[utónév1] Bár nem értem mi szükség van lekérdezésben erre! Jelentésnél érthetõbb!
És mi van akkor, ha a cellák különbözõ táblában vannak? Akkor már nem megy a dolog, erre is megoldásod??? Pl: 1 tábla, elsõ cella: Tajszám 1 tábla, második cella: Családi név 2 tábla, elsõ cella: Utónév 3 tábla, elsõ cella: Utónév 1
A lekérdezésben a CsN+Un+Un1-et kéne összevegyíteni..
egyébként a tajszám ellenõrzõ utasítás valahogy így nézne ki:
Private Sub tajszammezõ_AfterUpdate()
Dim db As Database, rst As Recordset, adat as Long
Set db = CurrentDb Set rst= db.OpenRecordset("ideírdaTAJTábládnevét", dbOpenTable) ' tábla típusú rekordhalmaz megnyitása
adat = ide írd a TAJszám mezõ elérési útját, utána .Value pl: Me.Tajszam.Value ' adat változóban tároljuk a felh. bevitt értéket, késõbb ezt hasonlítjuk össze a rekordhalmaz elemeivel
rst.Seek "=", adat If rst.NoMatch Then Exit Sub 'nincs egyezés, ezért kilépés Else MsgBox"Van már ilyen TAJszám!" DoCmd.GoToControl Tajszam beviteli mezõ neve End If
rst = Nothing db = Nothing ' Kiürítés
End Sub
Viszont az van ezzel, hogy nálam nem akar mûködni, csak access98-on. Ennyire jutottam...
Sziasztok! Az a kérdésem, hogy ha van egy saját adatbázisom, pl: külömbözõ áruk, ezek színei, tulajdonságai, cikkszám, darabszám stb. Hogyan lehet a leg könnyebben meg csinálni azt, hogy követni lehessen a kijövõ, bejövõ forgalmat.Lehet ehhez valami jó kis ûrlapot szerkeszteni??
Értem, hogy mit szeretnél, ez azonban nem olyan egyszerû, hogy egy tábla alapján megoldható! Minimum létre kell hozni két táblát és két azokra szerkesztett ûrlapot és ezekbe kell felvinned a te tábládat használva a ki-és bejövõ forgalmat. Ezek alapján aztán már bármilyen lekérdezést meg lehet valósítani! Na persze,ha a táblákat, kapcsolatokat megfelelõen megtervezted. Normalizálás! :-)
Hát gondoltam, hogy nem lesz egyszerû:-). És a másik két tábla az mit tartalamazzon? Ezek tartalmazzák majd külön a be, és külön a kimenõ forgalmat? Ezt le lehet így fórumon vázolni, vagy ne fárasszalak:-)?
Igen, azt tartalmazzák! De, ez a legegyszerûbb forma! Ez amit már felvázoltál egy raktárgazdálkodási nyilvántartás lenne bonyolult formában. Neked el kell dönteni milyen mélységben szeretnél belemenni! pl. cikkszám alapján lehetne azonosítani egy terméket, ami alapján én felvinném a be-és kimenõ forgalom táblába, hogy mi jön illetve megy. Ez egy kombinált listába jelenne meg a ki-és be táblára épülõ ûrlapon. Ezen felül már csak a mennyiséget kellene konkrétan bevinni. Ha persze ezt még bõvíteni szeretnéd azzal, hogy melyik partner mit vitt illetve hozott, akkor ez már egy segédtáblát is igényel! Szóval a döntés, hogy mit szeretnél a te kezedben van!
Ajánlanák egy-két könyvet elolvasásra, amelyek adatbázis-tervezéssel foglalkoziknak (szoftverfüggetlenül), mert ezen ismeretek nélkül maximum egy alapszintû adatbázist tudsz összehozni, tele hibával. Saját baklövéseimen tapasztaltam (többször is), hogy nem voltak jól megszerkesztve a táblák, kapcsolatok, és a fejlesztés közepénél ki kellett dobnom a munkám felét, mert elcsesztem a tervezést.
Tehát olvass egy kicsit a téma ezen részérõl, mert óriási segítség a késõbbiekben
Igazad van, mindennek az alapja a tervezés, normalizálás! Anno tanárom úgy tanította, hogy adatbázis programozásnál a munka 70%-a a tervezés 30 %-a a programozási munka! Teljes mértékben igaz! Ha mindezt jól csináltad, akkor is közbejöhet még, hogy a megrendelõ a mintaadatbázis bemutatásakor benyögi: jó, jó, de ezt meg ezt szeretné még látni, bevinni stb. Ez a méreg!
Egyébként csak ezt az egy adatbázist szeretném összehozni, mert a cégnél ahol dolgozom még nincs ilyen. Gondoltam bevágódok a séfnél:-) Alapokat tanultam, de inkább csak használni, mint tervezni tudom(sajna)
Add meg részletesebben, hogy mi az adatbázis összetétele, hátha össze tudunk hozni valamit!
valamikor beszéltünk a lista-kombinált lista témáról,
namost az nem jön össze, hogy egy listát feltöltök adatokkal, és mondjuk a felh. kiválaszt egyet, kattintásra elõjön egy másik ûrlap a választott értékkel (eddíg megy), majd ha kilép, akkor ezt az értéket kiszedi a lista tartalmából (na ez nem!). Ezt excelben meg tudom csinálni, mivel ott a lista vezérlõelemnek van additem, és removeitem metódusa, amivel ez megoldható, viszont az accessnek nincs, és ezt valahogy mindenképp meg kéne csinálnom, mert máshogy egész egyszerûen nem tudom...
A kombinált lista legegyszerûbb megoldása, ha az egy táblára hivatkozik! Én ezt szoktam mindig alkalmazni! Ez aztán a tábla elemeinek bõvítésével a kombinált lista elemeit is bõvíti. Nem kell, felesleges bajlódni az AddItem és A RemoveItem stb metódusokkal!
csak én nem adatot akarok törölni, hanem adatot akarok lefedni( vizuálisan eltüntetni) a listából, ekkor viszont nem megoldás a tábla-szisztéma (szerintem)
Én sem a törlésrõl beszéltem! 1. Táblára hivatkozik a kombinált lista, akkor a tábla minden egyes rekordja a listából elérhetõ. 2. A lista sorforrása egy lekérdezés, ami esetleg ismét lehet egy tábla, azonban a lekérdezés feltétel sorába szûkítheted. Ha ez nem megfelelõ, akkor nem értem a problémádat! Bár túl sok extrát nem lehet ezzel mûvelni! :-)
Újabb error....ezt kapjátok ki!!!!! Van több lekérdezés, mondjuk "1","2","3" a nevük. Namost mindegyikben max. 1 rekord lehet (Összesítés:first), rekordok 5 mezõbõl állnak fixen!!!! Na, pl: "2" nevû lekérdezés nem hozott eredményt (azaz üres, 0 rekord van benne), a többi lekérdezésben benne van az 1 rekord, 5 mezõ adattal!!! Mikor ezeket a lekérdezéseket újra lekérdezem (hogy összefûzzem õket), a teljes lekérdezésben 0 rekord lesz, holott az "1","3" lekérdezésben benne van az adat... Nem tudjátok, hogy tudnám megcsinálni, hogy az "1","2","3" lekérdezéseket össze tudjam fûzni 1 rekordba 15 mezõbe??
Én nagyon valószínûnek tartom, hogy az "és" kapcsolatba fürdesz bele! Egyesével hoz eredményt, de összesítve pont azért nem! Konkrátan leírod a problámádat, akkor konkrátan leírva tudok segíteni!
Na, ezek a lekérdezések, külömbözõ táblákból jön össze... Nincs meg minden sofõrnek a lakcíme, irányítószáma...stb ("2" lekérdezés") Ez nem is baj...de kb. a fél állománynak megvan...Namost, amikor nyomtatnám a menetlevelet ki, akkor kéne mind a 3 lekérdezést 1be venni, hogy jelentést tudjak nyomtatni...(nem járható út, hogy a többi sofõr adatait nyilvántartsam!)
Elsõ kérdésem, hogy miként vonod össze a 3 lekérdezést? A hiba a sejtésembõl fakadt, az egyértelmû!
A másik dolog, hogy felesleges ehhez 3 lekérdezés! Egy kell, hiszen a TAJ-szám azonosít egy sofõrt! Egy lekérdezésbe beviszed minhárom táblát és kiválsztod a szükséges mezõket! Azoknál a sofõröknél, ahol nincs meg valamelyik adat a lekérdezés üres mezõt hoz, de a többinél látszik! Igy csináld meg!
nem lehet osszevonni a 3 lekérdezést, mert ez már 1 elõre beállított lekérdezés...más kapcsolatban vannak, ezzel csak bõvíteném a lekérdezéseket, hogy összevonnán õket, mert nem lehet 3 táblából/lekérdezésbõl jelentést nyomtatni... A lényeg, hogy semmi kapcsolat nincs a 3 lekérdezés között...se "és", se "vagy"...semmi... És nem ad vissza semmit, hiába van eredménye az "1","3" lekérezésnek...
Nézdd, így nem jutunk egyrõl a kettõre! Az biztos, hogy nem jól szervezted a táblákat! Akár 8 táblát is össze lehet vonni lekérdezésbe, de ehhez a kapcsolati tábládat is jól ki kell alakítanod! Adj meg egy emil címet a #68 üzenet alapján megmutatom, hogy én miként csinálnám!
Megcsináltam egy mintaadatbázist valami hasonló dologra. Azt nem írtad, hogy a tábláid milyen mezõkbõl állnak és mi a kapcsolat közöttük. Így egyértelmûbb kibogozni a hibát. Az én adatbázisomban csináltam több táblából származó lekérdezést, jelentést, kombinált listát, ha gondolod elküldöm. Talán mankónak jó lesz! :-))
Zipus: nem tudod véletlenül, hogy lekérdezést, hogy lehet besorszámozni??? Az 1 dolog, hogy látom, hogy pl van benne 8 rekord, de a sorszámozás...arra nem jövök rá... (teljesen mindegy, hogy milyen a lekérdezés)
Olyasmi, mint a Táblánál a "számláló", csak lekérdezésben....félére gondolok....
Nem tudom, soha nem volt rá szükségem! Ha rájössz ne titkold el! :-)
Valaki jártas ember azt meg tudná mondani nekem, hogy ha csinálok az egyik beviteli mezõ helyett egy legördülõ menüt, az adatfelvitelhez, akkor annak a választható pontjait hol tudom hozzáadni? Mondjuk 4 pont közül lehessen csak választani..
(tehát úgy mint itt a topic tetején, az Ms Access legördülõ menüben ott a többi lehetõség is)
Akkor azt, hogy tudom megcsinálni, hogy a lekérdezés modjuk 5. (vagy akárhányadik) rekorját szedem ki 1 másik lekérdezéssel??
Te elég érdekes kérdéseket teszel fel, de én attól tartok, hogy nem látod a lekérdezések lényegét! Bocsi, ha nem így van! A lekérdezés mindig egy bizonyos feltételnek megfelelõ rekordhalmazt ad vissza! Ha a feltételed olyan, akkor 5 rekordot, ha olyan akkor 83-at stb. A lekérdezésnél sorszámnak ennélfogva nincs nagyon értelme, viszont az arra alapozott jelentésnek igen! Gondolj csak arra, hogy egy vásárlásnál kinyomtatva akarjuk csak tudni, hogy hány tétel volt. A kérdésed: meg lehet oldani, hogy egy lekérdezés eredményét tovább szûkíted, de akkor az elsõ lekérdezés eredményét le kell tárolni egy ideiglenes táblába és utána arra kell meghívni egy új lekérdezést.