Sziasztok!
Szerintetek miként lehet a legelegánsabb módon megoldani az alábbi szituációt?
TableA.oszlopB-ben, egy stringbe van összefűzve a "bum=" utáni értéken a releváns adat, ami alapján össze tudnám joinolni a táblákat.A stringbe ágyazott adatok száma változó.
További nehezítés, hogy Access-ben kellene megvalósítani, így jópár finomságról le kell mondani.
TableA
+--oszlopA---+---oszlopB----------------------------------------------------+
| value1 | bim=2,bam=ahamm,bum=1;bim=56,bam=n,bum=2;
| value1 | bim=23,bam=invalid,bum=3;
| value2 | bim=12,bam=pron,bum=1;bim=44,bam=y,bum=2;bim=67,bam=y,bum=3;
| value3 | bim=67,bam=y,bum=2;
+---------------------------------------------------------------------------
TableB
+--oszlopC---+---oszlopB---+
| valueA | 2 |
| valueC | 1 |
| valueB | 3 |
| valueD | 2 |
+--------------------------+
TableEredmény
+--oszlopA--+--oszlopC---+---oszlopB---+
+-----------+------------+-------------+
A TableA normális esetben így nézne ki:
+--oszlopA---+---oszlopB--+
| value1 | 1 |
| value1 | 2 |
| value1 | 3 |
| value2 | 1 |
| value2 | 2 |
| value2 | 3 |
| value3 | 2 |
+-------------------------+
- 6674 megtekintés
Hozzászólások
Az instr függvényt próbáld használni a kivágási pozició meghatározására majd substr.
- A hozzászóláshoz be kell jelentkezni
Ebbe a válaszba kis híján én is beleugrottam éjjel, aztán a növekvő csipa mellett azért kiszúrtam, hogy a keresett minta többször is szerepel a sztringben, más-más értékkel - szóval CSAK a gyári függvények nem sokat érnek.
Ilyenkor jön a kötelező MÁSIK javaslat, az UDF - benne ciklussal - ami táblát/tömböt ad vissza, amivel csak-csak lehetne kezdeni valamit, de ahogy a mi barátunk első 1-2 találata sejteti, Accessben ezt nem egyszerű accessni, többet viszont nem tudok az egészről.
- A hozzászóláshoz be kell jelentkezni
Akkor viszont melyik értékkel kell a kapcsolatot létesiteni?
Esetleg minden értekkel akkor viszont a gyerek táblát n-szer kell alias névvel szerepeltetni. Ez nem egy egyszerű sql, dinamikusan kell felépíteni. Ez pedig már valami ciklust igényel szerintem. Kódolás!?
- A hozzászóláshoz be kell jelentkezni
Dejszen mondom, hogy UDF...
- A hozzászóláshoz be kell jelentkezni
csak nézek, de nem látok :)
- A hozzászóláshoz be kell jelentkezni
yupp, pont ez a problémám...
Valami olyanra gondoltam, hogy mid-el vágom ki úgy, hogy instr-el léptetem a teljes stringen belül, míg nem null nem lesz.
De ezzel csak kapok egy tömböt/szebb halmazt.
Viszont, hogy ezt miként tolom be pl egy IN()-be azt még csak nem is sejtem...
--
"The only valid measurement of code quality: WTFs/min"
- A hozzászóláshoz be kell jelentkezni
Ha az Access nem tud táblát visszaadó UDF-et (fogalmam sincs, de a google nem túl biztató), akkor az ideiglenes tábla feltöltése tárolt eljárásból (arra talán még képes...) az út.
- o -
Azért megjegyezném, hogy meglepő önszopatásnak tűnik az Access olyankor, amikor a közismert nyílt adatbáziskezelőkön kívül szabadon használható nagyobb, szoftvergyári motorok is elérhetőek.
De biztosan van oka.
- A hozzászóláshoz be kell jelentkezni
msaccess-ben van udf?
- A hozzászóláshoz be kell jelentkezni
A mi barátunk aszongya, hogy van, csak a definiálásához el kell dobni a GUI-t.
- A hozzászóláshoz be kell jelentkezni
Bocs hogy ezt mondom, de ezt előbb normalizálni kéne, utána lehet vele dolgozni.
Mi hány ki ilyen adatokat? Kibaszni azonnal (kivéve persze, ha 400 milliós berendezés:).
Mekkora az adathalmaz? Ha soronként stringbasztatni kell, ez napokig fog futni.
- A hozzászóláshoz be kell jelentkezni
+1. És frissen élezett sajtreszelőt adni annak, aki ezt az "adatszerkezetet" kitalálta, hogy azzal élvezkedjen.
- A hozzászóláshoz be kell jelentkezni
Azért sejtem, hogy eredetileg nem annak szánták azokat a mezőket, amire most használatba lesznek véve.
Tipikus példa ilyesmire a "comment" mező, ami jellemzően arra születik, hogy ha végképp nincs hová besorolni valami érdemi információt, akkor se vesszen el, aztán ami lesz belőle:
- ahogy a júzerek kitapasztalják, hogy mi minden maradt ki a fejlesztésből, értelmesen, de persze szuboptimálisan használatba veszik, aztán lehet úgy elemezgetni, mint itt - ez a jobbik, de gyakoribb, hogy
- a nevesített mezők adatait is ide kezdik írni (amennyire az ui megengedi), mert könnyebb ideömleszteni kopipészttel.
- A hozzászóláshoz be kell jelentkezni
kéne...de többe van mint 4 kiló, szóval nem lehet. Ez az ezt kell szeretni kategória.
Egyébként a történet úgy néz ki, hogy az "élő" adatbázisa oracle alapú úgy, hogy random nullázódnak/helyreállnak benne értékek. Ám ez a feature nincs hatással a működésre, tehát tekintsük csak tájékoztató jellegűnek.
Emiatt az adatokat exportálni kell manuálisan (xls), amit én visszatolok access-be, hogy ne VB-vel szopassam magam. És sajnos az xls már ilyen gyönyörű stringekkel rendelkezik.
Azért access-be mert elvileg az elérhető a leendő userek számára.
A most megvalósítandó funkcióhoz nem kell túl sok adat, 10 táblából kb 20 paramétert kell kivennem 1 "egységhez". Egyszerre kb 50 "egység" adatát kell lekérnem max 2x/nap. Csak hát lennének még további ötletek is...
--
"The only valid measurement of code quality: WTFs/min"
- A hozzászóláshoz be kell jelentkezni
Ha már Oracle-ben van, akkor miért nem export előtt van gatyába rázva?
Ott azért kicsit több/kényelmesebb lehetőségek vannak szerintem mint az Access-ben.
Sőt sztem a cél struktúra is könnyeben felépíthető eleve onnan.
Természetesen ha van rá lehetőség + hozzáférés + hozzáértés ;)
- A hozzászóláshoz be kell jelentkezni
ha már ott van oracle-ben, tudnom kellene használni de nem lehet, mert csak az export ad hiteles adatot (lásd fentebb). Ez adott. A miértet a vendor meg nem mondja meg. Ha inkompetencia, akkor azért, ha szándékos, akkor meg azért. Szvsz a kettő együtt.
Egyébiránt az a db is megérne egy misét...
Lehetőségem van az import előtt masszírozni az xls-en, de a VB nem a szívem csücske, próbálnám 1 rétegen megoldani.
--
"The only valid measurement of code quality: WTFs/min"
- A hozzászóláshoz be kell jelentkezni
xls -> csv + tetszőleges nyelv -> csv2 -> xls2 ?
- A hozzászóláshoz be kell jelentkezni
XLS - Perl (use Spreadsheet::ParseExcel ; use Spreadsheet::WriteExcel;) - XLS :-D
- A hozzászóláshoz be kell jelentkezni
Azt is szeretem, de mondjuk, mire megcélozza az ember a kódban a lényeges mezőket, addig az említett kibeimpexet már el is felejtette.
- A hozzászóláshoz be kell jelentkezni
Akkor meg csv-be kirakni, és azt matatni, majd szintén csv-t írni, de xls kiterjesztéssel.
- A hozzászóláshoz be kell jelentkezni
A minap vmelyik szomszéd topicban már kiderült, hogy ha valami nem normális egy db-ben, akkor nem feltétlenül kell erőltetni a db masszírozását, ha valamit el akarunk érni, mert a kedvenc szkriptnyelv mindig kéznél van.
Persze itt nem a VB-re gondolok, a PowerShell viszont teljesen kezes, és nem kopik el a billentyűzet, mire a szkript már csinálni is kezd valamit.
- A hozzászóláshoz be kell jelentkezni
Elfogadom és támogatom. ;)
A jelenlegi problémát nagyvalséggel egyszerűbb így megoldani.
- A hozzászóláshoz be kell jelentkezni
Természetesen a normalizálást mindig aláírom és aláhúzom, és dobálom a hajtűimet, amikor "20 rekorddal működik" alapon letojják, DE csekélységemnek is volt hasonló fícsört (naná, majd bug!) tartalmazó AS IS db-je.
A megoldás táblát visszaadó UDF lett (DB2).
A negatív hatása messze elmarad a LOB-ok indokolatlan használatából eredőtől.
- A hozzászóláshoz be kell jelentkezni
Ha jól értettem a kérdést, akkor itt az a cél, hogy a JOIN elkészüljön.
Magára a JOIN-ra szerintem megfelelő az alábbi:
SELECT * FROM TABLEA T1, TABLEB T2 WHERE T1.OSZLOPB LIKE '%bum=' || T2.OSZLOPB || ';%';
Access-ben a ' helyett ", a % helyett * van, az összefűzés (||) helyett meg &. Ha jól emlékszem.
- A hozzászóláshoz be kell jelentkezni