12. april 2006 - 17:41Der er
15 kommentarer og 3 løsninger
Betingelse i forespørgsel
Hejsa.
Jeg har nogle poster inddelt i journalnumre i Acces. Journalnummeret er desværre ikke blot et simpelt tal, og derfor har jeg problemer, når jeg vil afgrænse min forespørgsel til kun at omfatte et interval af journalnumre.
Mine journalnumre har formen: xxxx-xxx-xx, alle udfyldt med heltal. Fx: 1501-001-04
Det jeg gerne vil er at lave en forespørgsel, som jeg afgrænser til journalnumre, der ligger i intervallet: 1550-000-00 til 1699-999-99. Jeg regner bestemt med at denne afgrænsning skal skrives i feltet "kriterier:" under designvisningen af forespørgslen.
Det kommer ikke til at virke. Du bliver nødt til at kode en funktion med et loop der kunstigt lægger en til ved at splitte de 3 tal. Problemet er at access ikke vil godkende tal i det format.
Det ser ud som om dine journalnumre i virkeligheden er sammensat af 3 individuelle felter. Da du ønsker et "pænt" interval, kan du i linjen Kriterier - under JournalNrFelt1 skrive Between 1500 And 1600 - under JournalNrFelt2 skrive Between 0 And 999 - under JournalNrFelt3 skrive Between 0 And 99 (de to nederste er måske endda overflødige)
Jeg er enig i at det letteste vil være at splitte det i 3 felter i tabellen. Jeg skal lige høre om det er nødvendigt at de ligger i et felt i formen xxxx-xxx-xx, det kan godt lade sig gøre, men det kræver en del kode.
Ikke nødvendigvis. Man kunne splitte dem op bearbejde dem. Bare lige noget hurtigt kode der langtfra gør alt den skal:
Public Function journalnummer(Start As String, Slut As String) Dim strStart As String Dim strStart01 As String Dim strStart02 As String Dim strStart03 As String Dim strSlut As String Dim strSlut01 As String Dim strSlut02 As String Dim strSlut03 As String
De ligger samlet i eet felt som indtastet fx. "1501-001-04". Det vil være et helt enormt arbejde at splitte dem i tre felter for mig. Jeg tænkte på, om man kan bruge jokers på en måde, så man fx skriver noget i retning af:
Kriterier: Journalnummer>1550* and Journalnummer<1700*, hvor * (jokeren) naturligvis beskriver, at det er lige meget med resten... Er det helt ude i hampen?
Du bliver nødt til at splitte dem som jeg skriver, smide resultaterne over i en array eller en midlertidig tabel og præsentere dem for brugeren.
strStart01-03 og strSlut01-03 skal være integer og dernæst skal der lave noget i stil med:
dim db as database dim rs as dao.recordset dim strSQL as string
set db = currentdb set rs = db.openrecordset(strSQL)
with rs 'split den funde record og sammenlign den med intervallet, hvis den matcher så gør noget med den funde record
end with
rs.close
Synes godt om
Slettet bruger
12. april 2006 - 23:32#10
SELECT Left([Tal],4) AS Udtryk1 FROM Tal WHERE (((Left([Tal],4))>=1550 And (Left([Tal],4))<1700));
Synes godt om
Slettet bruger
13. april 2006 - 06:11#11
Undskyld, men IMHO kan ikke se have alt det hekseri skal til for. Set som tekst, og det skal man så bare accepterer så vil
journalnumre between '1550-000-00' and '1699-999-99'
fungere, da eksempelvis 1550-100-00 som tekst string betragtet ligger mellem '1550-000-00' og '1699-999-99'. At anvende journalnumrene som tekst kræver selvfølgeligt lidt viden om hvordan de er stykket sammen men du kan sammenligne med datoer, som hvis de skrives med notationen yyyymmmdd kan sorteres som tekst og det samme gør sig gældende her.
Jeg må indrømme, at jeg ikke forstår en helt masse af den kode til at sortere det. Jeg ved ikke engang, hvor jeg skal skrive den / eksekvere den.
Men hvad med at jeg i min tabel indsætter en kolonne mere, der henter sine værdier fra Journalnummeret fx. ved at være noget i retning af
=Left("JournalNummer";4), så får jeg mulighed for at afgrænse på de første fire cifre i journalnummeret i min forespørgsel. Problemet ved ovenstående syntaks er at den returnerer "Jour" som standardværdi i stedet for at se i feltet JournalNummer og tage de første fire karakterer fra venstre...
Synes godt om
Slettet bruger
14. april 2006 - 12:47#13
=Left([journalnummer];4)
Men du skal ikke udvide din tabel...
Det hele foregår i designgitteret for din forespørgsel, der er en række, som hedder kriterie og her skriver du:
>=1550-000-00 AND <1700-000-00
eller som mit svar 12/04-2006 23:32:25 (som jo nok var lidt for indforstået) laver man en ekstra kolonne i forespørgslen som hedder:
Udtryk1: Left([journalnummer],4)
og nede som kriterie: >=1500 AND <1700
Det er egentlig disse 2 variationer af stort set samme løsning, som flg. besvarelser/kommenterer er kommet med:
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.