Toon posts:

Range binnen MS-Access

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met de inventarisatie van de automatisering van een bedrijf.
De gegevens wil ik binnen een MS-Access database opslaan.
Mu hebben alle onderdelen een identiek nummer;
Beeldschermen hebben een nummer in de 1000
toetsenborden hebben een nummer in de 2000
Switches hebben een nummer in de 3000

Nu wil ik graag dat als men bijvoorbeeld het nummer 1022 intoetst dat acces dan automatisch via een relatie zegt dat dit een beeldscherm is. Oh het nummer 3099 behoort tot de switches.

Weet iemand hoe ik dit binnen MS Access voor elkaar krijg?

  • Boss
  • Registratie: September 1999
  • Laatst online: 08:40

Boss

+1 Overgewaardeerd

Kan op twee manieren:
ranges definieren bij de types, dus : Type Beeldscherm van 1000 - 1999

of

als je alleen op het 1e cijfer wilt kijken met left(nummer;1) dat cijfre uitlezen en daarmee je ding doen.

Bij de 2e manier zit je vast aan 10 groepen (0-9). De eerste manier lijkt me flexibeler.

(overigens kan je met BETWEEN in een query een criterium opgeven dat een range is)

[ Voor 13% gewijzigd door Boss op 07-10-2004 10:06 ]

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


Verwijderd

Topicstarter
Als ik het goed begrijp kan ik in een query bij criteria; "left(nummer;1)" invoeren en dan neemt de relatie tussen beide tabellen de koppleing tussen de getallen die beginnen met een 1 en het typ beeldscherm??

Bvd

  • Boss
  • Registratie: September 1999
  • Laatst online: 08:40

Boss

+1 Overgewaardeerd

nee, helaas werkt het niet zo. Als je er eerst nog een relatie mee wilt maken moet je eerst een andere query maken met het veld Code:left(nummer;1) en de overige velden. Daarna kan je in een tweede query de juiste koppeling maken. En als het alleen voor op een formulier is, kan je ook op het formulier een dropdown box maken en die op het veld Code koppelen.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


Verwijderd

Topicstarter
Het zit eigenlijk zo:
Elke component krijgt zoals boven genoemd een identiek nummer.
Nou is het eigenlik de bedoeling dat ik een rappot of query te zien krijg dat een bepaald nummer bij een beeldscherm bijvoorbeeld hoort.
Dus als ik in een formulier het product nummer 1002 intoets dat ik dan in de query of rapport te zien krijg dat dat een beeldscherm is.
Ik heb al wat geprobeer met expressies, maar kom er niet uit...
Ik hoop dat julle mij verder kunnen helpen.

  • Boss
  • Registratie: September 1999
  • Laatst online: 08:40

Boss

+1 Overgewaardeerd

Welk deel van mijn vorige post loop je mee vast? Dat zou gewoon moeten werken. Omdat je geen apart veld hebt gemaakt in de tabel met het type, zal je dat er eerst op een andere manier uit moeten halen. Dat kan met de functie Left. Daarna kan je in een 2e querie iets gaan doen met dat veld.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


Verwijderd

Topicstarter
Ik ben laweer een stuk verder... Hartelijk voor de hulp!

Verwijderd

Topicstarter
Ik heb nu een expressiequery gemaakt met inderdaad de code Left(productsoort;1)
Dit werk allemaal correct, de query neemt het eerste getal van het product nummer correct over.
Maar...
Nu wil ik deze query koppelen aan een tabel waarin de uitkomsten van de expressie staan genoemd.
Dus:
Uitkomsten van expressie zij:
1
2
3 etc...
In een tabel heb ik de nummers
1
2
3 etc...
staan en hierbij een kolom met de naam van het product.
Nu wil ik das dat de uitkomst van de expressiequery gekoppeld is aan de tabel.
Ik heb deze query in mijn relaties opgenomen.
Maar als ik nu een query maak waarin ik de uitkomsten totaal wil hebben lukt dat niet.
Ik heb een nummer 2008 die verwerkt is via de expressiequery naar een 2
In een andere tabel heb ik deze 2 in een kolom en daarchter het type (toetsenbord). Nu wil ik via een query laten zien dat nummer 2008 een toetsenbord is, maar krijg dit niet voor elkaar.
Kunnen jullie me helpen??
bvd

  • PromoX
  • Registratie: Februari 2002
  • Laatst online: 21:11

PromoX

Flying solo

Je kunt toch een query maken met een extra veld met daarin zoiets als dit:

code:
1
2
3
soort: IIf([typenummer]>=1000 And [typenummer]<2000;"beeldscherm";
IIf([typenummer]>=2000 And [typenummer]<3000;"toetsenbord";
IIf([typenummer]>=3000 And [typenummer]<4000;"switch";"onbekend")))


Dan geeft ie automatisch de waarde weer die bij het typenummer hoort.

And I'm the only one and I walk alone.


  • Boss
  • Registratie: September 1999
  • Laatst online: 08:40

Boss

+1 Overgewaardeerd

De eerste query, met het resultaat van die expressie moet je opslaan als querie A (bijvoorbeeld).
De tabel waarin de productcodes met hun naam staat is B.

Maak nu een nieuwe querie met een relatie tussen A en B, en kies de velden die je wilt weergeven.

Klaar.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


Verwijderd

Topicstarter
Ik heb een tijdje het een en ander uit-geprobeert, maar kom er nog steeds niet uit;
ik heb nu wel de volgende query :

Expr1 Artikelcode
1 1002
2 2005
2 2222
3 3333
4 4444
5 5050
5 5220

De expressie werk dus correct; hij haalt het eerste cijfer van links uit het artikelcode.

Maar nu heb ik een tabel waarin staat het nummer 1 een beeldscherm is en het nummer 2 een toetsenbord etc.

Maar als ik deze tabel bij de query toevoeg en de relatie leg krij ik een mismatch.

Ook als ik via een tweede query waarin staat dat nummer 1 een beeldscherm is en 2 een toetsenbord koppel met de query met de expressie erin, werk dit ook niet.

Als iemand weet hoe ik dit kan oplossen, hoor ik het graag, ik begin er een beetje de zenuwen van te krijgen.

Alvast bedankt.

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Yep: een mismatch, want je left() geeft een string terug, en dat andere ding is waarschijnlijk numeriek. Maak van rangecode een tekstveld en het werkt. Overigens heb je die left() niet nodig; en het is onhandig als je ooit eens een range zou willen toevoegen die met hetzelfde begincijfer begint. Wat Boss meteen al schreef:
code:
1
2
3
4
SELECT tbldingen.dingOmschrijving, tblRanges.RangeOmschrijving
FROM tbldingen 
INNER JOIN tblRanges ON 
(dingSerNr BETWEEN tblRange.Rangestart AND >= tblrange.RangeEinde);

of alternatieve notatie voor die inner join:
code:
1
Where dingSerNr BETWEEN tblrange.RangeStart AND tblrange.RangeEinde

[ Voor 11% gewijzigd door Lustucru op 15-10-2004 20:31 ]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Verwijderd

Topicstarter
Nog maals bedankt.

het is allemaal gelukt, maar ben nu bezig met een ander onderdeel:
Ik heb nu een deel alfanummeriek;
dus bijvoorbeeld AF2000
Ik heb het alfabetische deel gescheiden van het nummerieke deel om het zoeken zo te vergemakkelijken.
Maar nu wil ik in een tabel het alfa deel eb het nummerieke deel in een kolom hebben. Kan dit gewoon met het "&" teken, en zoja waar dien ik deze in te voeren?

  • Boss
  • Registratie: September 1999
  • Laatst online: 08:40

Boss

+1 Overgewaardeerd

Ja, dat kan :)

Gewoon het volgende als veld opgeven in een query:
code:
1
Veldnaam:Veld1 & Veld2


of met spatie ertussen:

code:
1
Veldnaam:Veld1 & " " & Veld2

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


  • Wilke
  • Registratie: December 2000
  • Laatst online: 16:49
Afgezien van de oplossingen hier, denk ik dat de 'nette' manier om zoiets te doen is door gewoon een aparte tabel te maken die een product linkt aan een categorie:

code:
1
2
3
4
5
6
7
8
9
Product tabel:
  id (oplopende ID's, alleen van belang voor de database)
  naam (van het product)
  product_code (het product nummertje, bv. 1001 voor een bepaald soort beeldscherm)
  categorie_id (verwijst naar een id in de tabel categorie)

Categorie tabel:
  id (oplopend database ID)
  naam (van de categorie)


Met bv. deze entries:
product(id=automatisch oplopend, naam="Philips TFT", product_code=1001, categorie_id = 1' en categorie(id=1, naam="Beeldscherm")

Zo link je dan een product aan een categorie. Deze layout gaat er trouwens van uit dat elk product in precies 1 categorie valt (net als jouw originele oplossing).


Probleem met de huidige oplossingen is namelijk dat je speciale betekenis toekent aan product-nummertjes die semi-toevallig uitgedeeld zijn. In het algemeen is het niet slim om op verschillende manier 'waarde' (betekenis) toe te kennen aan 1 ding [Om diezelfde reden zou ik ook niet de product-code als 'product.id' gebruiken, maar een apart, automatisch gegenereerd id. Database ID's kunnen het best volledig los staan van 'echte informatie' die bij het systeem hoort (zoals de product code).] Anders is het vragen om problemen in een later stadium. Bovendien: waarom zou je dit soort 'betekenis' gaan zitten proggen met allerlei gehackte code, terwijl je de informatie en de relatie tussen product en categorie ook gewoon 'netjes' in de database zelf kunt bewaren en opvragen?

Gegeven product-id kun je met mijn oplossing als volgt de categorie opvragen:

code:
1
2
3
4
SELECT categorie.naam
FROM product, categorie
WHERE product_code = [nummervanproductwatjezoekt]
AND categorie.id = product.categorie_id;


Duidelijk zo :?

[ Voor 12% gewijzigd door Wilke op 18-10-2004 13:30 . Reden: Lang leve code tags ]


Verwijderd

Topicstarter
Ik ben eruit, hartelijk dank voor jullie racties.

Verwijderd

Topicstarter
Aangezien de database bijna tot zijn eind begint komen, ben ik bezig met het grafische deel.

Hierbij ben ik bezig met verschillende rapporten die via een formulier benaderbaar zijn. De database heeft betrekking op de automatisering van een bedrijf met meerdere vestigingen. Nu wil ik per vestiging aangeven welke automatiserings onderdelen er aanwezig zijn.

Als ik nu het formulier met de rapporten open heb ik de keuze uit het bekijken, afdrukken of verzenden van het rapport. Vervolgens krijgt men een venster waar je de parameterwaarde in moet vullen.

Aangezien ik de database zo gebruiksvriendelijk mogelijk wil maken, wil ik graag weten of bij de parameterwaarde gebruik gemaakt kan woorden van een keuzelijst.

Mischien is het op een andere manier binnen het formulier mogelijk om een keuze lijst met daarin de vestigingen en een actie knop te realiseren. Maar wel zo dat de actieknop de waarde uit het keuzelijstje overneemt.

Met vriendelijke groet.

  • Boss
  • Registratie: September 1999
  • Laatst online: 08:40

Boss

+1 Overgewaardeerd

Een parameterwaarde kan je helaas alleen via een input dialog doorgeven.

Je kan wel een klein formuliertje maken aarop de gebruiker gevraagd wordt de juiste waarde te selecteren.
Via DoCmd.OpenReport kan je vervolgens de juiste filter-syntax meegeven aan het rapport.
Dan moet je in de bron-query van het rapport dus geen paramter meer gebruikern!

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


Verwijderd

Topicstarter
IS het mogelijk om een wachtwoord te plaatsen op een aktieknop die naar een ander formulier verwijst?

  • Boss
  • Registratie: September 1999
  • Laatst online: 08:40

Boss

+1 Overgewaardeerd

Is geen standaard funtie voor in Access. Ook weer met VBA code aan de slag dus. Via een knop het een inputbox openen voor het wachtwoord. Dat vergelijken met het (evt gecodeerde) wachtwoord. Goed -> formulier openen. Fout -> melding geven en stoppen.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.

Pagina: 1