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...
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)
Köszi! Meg fogadom a tanácsaitokat! Egyébként a leírtakon kívül semmi extra nem lessz benne, úgy hogy csak össze hozom valahogy:-)
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!
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
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!
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:-)?
É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! :-)
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??
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...
É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..
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!
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???
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.
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!
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...
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?
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.
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!
ok, várom a megoldást...
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...
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)
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?
ú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.
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?
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.
jajj, kihagytam egy fontos parancsot, névszerint kilépni az eljárásból a Hiba: címke elõtt, mert különben végtelen ciklusba kerül a kód!
é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
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?
Fasza, thx... így mûködik is a dolog
a legegyszerûbb, ha a tábla tajszám mezõjét indexeled, tehát nem lehet azonos-ra állítod.
a bonyolultabb pedig vba-ban egyrekordhalmaz létrehozásával...
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...
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...
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
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?
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