Bom fast i Access

Posted by Svein Kåre on mars 4th, 2007 filed in Data'n

Kva gjer du når du står fast i Access, med eit problem du ikkje finn ut av? Du spør ein som har arbeidd meir med programmet om hjelp, sidan han sikkert kan meir enn deg. Om ikkje han veit, så spør du ein som kan enno meir — men når ein som underviser i Access står like fast, kva gjer du då? Eg for min del brukar bloggen min, eg. Er eg heldig, så er det nokre der ute som les dette, er i stand til å hjelpa, og tek seg tid til å gjera det.

Me brukar ein database på arbeid der det blir generert diverse id-nummer ved hjelp av spørjingar og utrekningar. Det har fungert fint, men så vart visst nummer-delen for stor. Lat meg forklara i detalj.

Me har ein tabell (resultat av ei spørjing) der ei kolonne (ID) består av stort sett to bokstavar og så eit nummer. Me er interessert i dei som byrjar med WB/wb, og trekka nummeret ut av dei:

Nr:CLng(Mid([id];3;5))

Deretter så skal det største nummeret finnast:

DMax("Nr";"MaxWB")

Og dette har fungert fint — men femsifra nummer har blitt for lite no. Første forsøk på å gjera noko med problemet var å endre til seks siffer, noko som førte til eit ørlite problem: Det gav feilmelding. Eller i situasjonen der det vart brukt, teksten «#Feil» i staden for ein ID. Eg fekk problemet lagt opp i hendene mine, laga til ein liten testdatabase med kun det eg trengte, sånn at eg ikkje skulle vera redd for å tulla for mykje med reelle data. Litt vidare kom eg, då eg fekk ei feilmelding ut av det: Ikke samsvar mellom data i vilkårsuttrykk.

Feilmelding i Access

Med 5 siffer er det ingen problem (bortsett frå at resultatet er unyttig no) men med 6 siffer eller over, då kjem feilmeldinga. Så vidt eg kan forstå, så skulle spørjinga CLng(Mid([id];3)) vera heilt korrekt. Men teori og praksis stemmer ikkje heilt overeins, altså. Torsdag viste eg problemet til ein instruktør i Access, men han stod like fast som meg. Noko han ikkje likte særleg godt…

Muleg han finn svaret, og han skulle seia i frå kva han kom fram til, men dersom det er fleire som vil prøva seg (please?) så last ned testdatabasen her. (1,8 MB.) Det er forresten norsk Access 2003 som blir brukt, om det skulle ha noko å seia.


3 Responses to “Bom fast i Access”

  1. Audun Says:

    Så vidt jeg kan se er syntaksen i den siste Mid-funksjonen din feil. Tror det skal være:
    Clng(Mid([id];3;6))

    Ref: http://www.techonthenet.com/access/functions/string/mid.php

    Skal du hente ut resten av ID etter de to bokstavene er de kanskje bedre å bruke «right»?

    Ref: http://www.techonthenet.com/access/functions/string/right.php

    Ellers vil jeg helt klart anbefale deg å bruke noe annet enn Access. Microsoft SQL Server 2005 Express for eksempel, eller MySQL dersom du bruker Linux. Begge er gratis.

  2. Svein Kåre Says:

    Syntaksen i Mid-funksjonen er rett — om eg utelet argumentet om kor mange teikn som skal takast med, så vert alt til slutten av strengen teke med. Men det første som vart prøvd var det du har skrive her, å utvida til 6. Det gjekk ikkje – feilmeldinga poppar opp på alt større enn 5.

    Men eg skal sjekka «right» òg, sånn i alle tilfelle. EDIT: Har sjekka no, og «right» er nok ikkje noko eg kan bruka, diverre. Det er «mid» som må til.

    Når det gjeld å ikkje bruka Access, så er nok det i dette tilfellet uaktuelt. (Og uansett ikkje opp til meg.) MS SQL Server er dog òg mykje i bruk til fleire andre databasar, og eg skal etter kvart læra meg det òg.

  3. Svein Kåre Says:

    Eg fann løysinga, etter å ha late vera å tenkja på det i det heile i lang tid. Tabben eg gjorde var å gå ut i frå at sidan Clng fungerte for 5 siffer, så burde det fungere på fleire siffer òg. Det gjorde det altså ikkje, som eg jo fann ut. Men kvifor?

    Vel, eg veit enno ikkje kvifor det ikkje fungerer, men løysinga var veldig enkel: Å erstatta Clng med Val — dvs Val([id]) gjer susen. Mykje enklare uttrykk i tillegg…

Leave a Comment