relatie velden van twee tabellen niet volledig identiek.

Status
Niet open voor verdere reacties.

Dave2Moon

Gebruiker
Lid geworden
28 mei 2011
Berichten
12
Maar wat als de velden waartussen de relatie wordt gelegd zijn niet identiek zijn? In mijn geval wil ik de records catalogiseren met een string, een stukje text die er in voorkomt.

in de bijlage vind je de relatie die resulteert in een query. Bij de eene werkt het, omdat de woorden identiek zijn, maar als de woorden nog extra text hebben => geen tabel.

Bekijk bijlage tabellen linken_not_working.rar

Bekijk bijlage tabellen linken.rar

dus ...

we krijgen dit..

Uitgelegd met een voorbeeldje (zie ook bijlage)

| = kolom

Voorbeeld van een rij in tabel1:
Tabel1 = import bvba datsers Ninove | 80

Voorbeeld van een rij in tabel2:
Tabel2 = bvba datsers | Ninove

=> query1= bvba datsers | Ninove | 80
= tabel2.col1 ; tabel2.col2 ; tabel1.col2

relatie ligt tussen tabel1.col1 en tabel2.col2
=>tabel is leeg :shocked:

Groeten

Dave
 
Laatst bewerkt:
Laten we Excel in deze vraag maar even buiten beschouwing laten, want dat soort oplossingen werkt toch niet in Access.... en dan beginnen we met je twee voorbeelden. Waarvan je er overigens één had kunnen weglaten (of eigenlijk alletwee, want ze hebben beide hetzelfde probleem) want je voorbeeld is in beginsel in beide databases gelijk, alleen heb je in de ene twee identieke waarden ingevuld, en in de andere twee niet-identieke. Had je in één db beide records gezet, dan had je query dus één 'goede' uitkomst opgeleverd. Alleen: het is dus geen goede uitkomst...

Om bij het begin te beginnen: de koppeling die je tussen de twee tabellen hebt gemaakt deugt niet. (Geldt dus voor beide voorbeelden). Je moet altijd koppelen tusssen een sleutelveld en een gerelateerd (niet-sleutel)veld. Dat doe je in je voorbeeld niet. Daarmee is de koppeling waardeloos. Ergo: je kunt geen relatie leggen tussen niet-identieke velden.
Wel kun je waarden opzoeken in tabel2 op basis van een veld in tabel1. Daarbij moet je met Instr eerst checken of de zoekwaarde in tabel2 voorkomt (dan levert Instr een waarde op die groter is dan 0) en kun je bepalen wat je wilt zien. Een relatie leggen is op basis van dit gegeven overigens nog steeds zinloos, omdat een zoekstring in meerdere records gevonden kan worden. En een relatie tussen twee tabellen is nu juist gebaseerd op het gegeven dat er een unieke match gemaakt wordt. De vraag die rest is dus: wat wil je eigenlijk?
 
in de query wil ik tabel2 volledig doorzoeken en de waarde uit de kolom "type" zien te voorschijn komen, als de "naam" in "tabel1" voorkomt in de "naam" in "tabel2".

IIf(InStr("naam";"naam_tbl2");"type";"")
 
Je probeert nog steeds om relaties te leggen die er niet zijn... nogmaals: je kunt geen koppeling maken tussen Tabel1 en Tabel2, want er zijn geen overeenkomende gegevens. De koppeling die je hebt gemaakt, is dus (wederom) volkomen zinloos en (letterlijk) waardeloos. Om het in perspectief te zetten: je kunt net zo goed koppelen op de velden Schoenmaat en Huisnummer.... Hetzelfde geldt dus ook voor je query. Maar in bijgaand voorbeeld zie je hoe je de gegevens wèl kunt relateren met Instr.
 

Bijlagen

Mooi, een extra kolom met als kolomnaam de onderstaande formule

IIf(InStr(1;[naam];[Naam_tbl2])>0;Waar;Onwaar)
criteria=> <>Onwaar

thx om me aardig op weg te zetten, maar mijn doel is nog niet volledig bereikt. Graag zou ik de lijst maken van alle niet gecatalogiseerde records, zodat ik een overzicht heb van de ontbrekende records en dus welke categorieën er nog moeten aangemaakt worden.

Merk op dat ik een categorie (een record uit tabel 2) verwijderd heb uit de bijlage hieronder.

Bekijk bijlage tabellen linken met instr.rar

wat ik wens is dus niet dit maar

naam naam_tbl2 plaats betaalt Type Expr1
bevers nv stevens antwerpen Onwaar ijzer nok
bevers nv snellers antwerpen Onwaar lucht nok
bevers nv datsers antwerpen Onwaar stenen nok
bvba datsers stevens ninove Onwaar ijzer nok
bvba datsers snellers ninove Onwaar lucht nok
bvba datsers datsers ninove Onwaar stenen ok
snellers nv stevens aalst Onwaar ijzer nok
snellers nv snellers aalst Onwaar lucht ok
snellers nv datsers aalst Onwaar stenen nok
stevens nv stevens oostende Onwaar ijzer ok
stevens nv snellers oostende Onwaar lucht nok
stevens nv datsers oostende Onwaar stenen nok


zou dus moeten worden


naam naam_tbl2 plaats betaalt Type Expr1
bevers nv stevens antwerpen Onwaar ijzer nok
bevers nv snellers antwerpen Onwaar lucht nok
bevers nv datsers antwerpen Onwaar stenen nok

of nog beter

naam plaats betaalt gecatalogiseerde
bevers nv antwerpen Onwaar nok

dus met jouw gecatalogiseerde lijst (query) hieronder hebben dan alle records in 2 tabellen.

naam naam_tbl2 plaats betaalt Type
bvba datsers datsers ninove Onwaar stenen
stevens nv stevens oostende Onwaar ijzer
snellers nv snellers aalst Onwaar lucht
 
naam plaats betaalt gecatalogiseerde
bevers nv antwerpen Onwaar nok

dus met jouw gecatalogiseerde lijst (query) hieronder hebben dan alle records in 2 tabellen.

naam naam_tbl2 plaats betaalt Type
bvba datsers datsers ninove Onwaar stenen
stevens nv stevens oostende Onwaar ijzer
snellers nv snellers aalst Onwaar lucht

en hier zouden wij direct in de lijst mijn de categorieen (diegene die niet voldaan hebben aan de instr met de dubbele er uitgefilterd).

naam naam_tbl2 plaats betaalt Type
bevers nv antwerpen Onwaar NIETOK
snellers nv snellers aalst Onwaar lucht
bvba datsers datsers ninove Onwaar stenen
stevens nv stevens oostende Onwaar ijzer
snellers nv snellers aalst Onwaar lucht

Nu kunnen we het lege vak in kolom "naam_tbl2" invullen en verschijnt er in kolom het type.
 
Laatst bewerkt:
Ik snap er nu echt helemaal niks meer van.... Waarom moet het veld Type er nu worden bijgehaald??
 
??? Omdat jouw lijst nog niet volledig is. De "instr" filter geeft niet alle records weer uit tabel1, omdat de filter van "instr" enkel de record weergeeft waarvan het de "isntr" is voldaan en dus gekend is (tabel2). We ontbreken dus de niet gevonden rijen. :shocked:
 
Laatst bewerkt:
Leg eens in normale taal uit wat je eigenlijk wilt.... want ik zie alleen maar twee tabellen die niet op een normale manier aan elkaar te koppelen zijn....
 
naam plaats betaalt gecatalogiseerde
bevers nv antwerpen Onwaar nok

Ik weet niet hoe ik dit nog duidelijk kan uitleggen, want dit bovenstaande item dat ontbreekt in de query. De instring voor "bevers nv" heeft geen match met tabel 2 en is dus niet zichtbaar in de query.

als de naam van tabel1 niet te vinden is tabel2 dan weergeven in een nieuwe query. Het probleem met mijn query is dat er veel items tussen staan die niet van belang zijn of die al in jouw query staan en dus een match hadden met instring. Hieronder vindt je de query die veel te veel gegevens bevat.:confused:

naam naam_tbl2 plaats betaalt Type Expr1
bevers nv stevens antwerpen Onwaar ijzer nok
bevers nv snellers antwerpen Onwaar lucht nok
bevers nv datsers antwerpen Onwaar stenen nok
bvba datsers stevens ninove Onwaar ijzer nok
bvba datsers snellers ninove Onwaar lucht nok
bvba datsers datsers ninove Onwaar stenen ok
snellers nv stevens aalst Onwaar ijzer nok
snellers nv snellers aalst Onwaar lucht ok
snellers nv datsers aalst Onwaar stenen nok
stevens nv stevens oostende Onwaar ijzer ok
stevens nv snellers oostende Onwaar lucht nok
stevens nv datsers oostende Onwaar stenen nok
 
Laatst bewerkt:
Als ik je oorspronkelijke vraag er weer bij haal, dan wil je dus het veld Type zien, als de naam uit Tabel2 voorkomt in de naam van Tabel1. Dus dan is dit het resultaat:

naam naam_tbl2 plaats betaalt Type
bevers nv bevers antwerpen Onwaar aarde
bvba datsers datsers ninove Onwaar stenen
snellers nv snellers aalst Onwaar lucht
stevens nv stevens oostende Onwaar ijzer
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan