Deze foutmelding "Beperkingen konden niet worden ingeschakeld. Een of meer rijen bevatten waarden die in strijd zijn met de beperkingen met betrekking tot niet-null waarden, unieke waarden of afwijkende sleutels." kan voorkomen in aangepaste rasters of in rapporten voor vensters.
Op deze punten in het programma haalt Mercator de gevraagde gegevens eruit door te vragen om het databaseschema op te nemen. Hierdoor kan Mercator de definities van de tekenkolommen kennen - char(x) - en de standaardkolombreedte in het raster afleiden uit x. Dit schema bevat ook de definitie van primaire sleutels.
Om dit probleem te omzeilen, is het meestal voldoende om de query iets aan te passen.
Deze query geeft bijvoorbeeld deze foutmelding:
select cli.c_id,cli.c_nom,pieds_v.journal,pieds_v.piece,stock.s_id,stock.s_modele,lignes_v.q,sum(dispo.dispo) as dispo
from lignes_v inner join pieds_v on (pieds_v.id=lignes_v.id) and (pieds_v.journal=lignes_v.journal) and (pieds_v.piece=lignes_v.piece)
inner join cli on (pieds_v.id_cli=cli.c_id)
inner join stock on (lignes_v.id_article=stock.s_id)
inner join dispo on (dispo.id_stock=stock.s_id)
where type=3
group by cli.c_id,cli.c_nom,pieds_v.journal,pieds_v.piece,stock.s_id,stock.s_modele,lignes_v.q
Dit komt omdat het schema vereist dat C_ID en S_ID uniek zijn, omdat ze de primaire sleutel van hun respectievelijke tabellen zijn. Deze query retourneert echter meerdere rijen met dezelfde C_ID en/of dezelfde S_ID.
Vervang in dit geval gewoon: (deze gelijkenissen worden gevonden in de joins)
- cli.c_id door pieds_v.id_cli
- stock.s_id door lignes_v.id_article
select pieds_v.id_cli,cli.c_nom,pieds_v.journal,pieds_v.piece,lignes_v.id_article,stock.s_modele,lignes_v.q,sum(dispo.dispo) as dispo
from lignes_v inner join pieds_v on (pieds_v.id=lignes_v.id) and (pieds_v.journal=lignes_v.journal) and (pieds_v.piece=lignes_v.piece)
inner join cli on (pieds_v.id_cli=cli.c_id)
inner join stock on (lignes_v.id_article=stock.s_id)
inner join dispo on (dispo.id_stock=stock.s_id)
where type=3
group by pieds_v.id_cli,cli.c_nom,pieds_v.journal,pieds_v.piece,lignes_v.id_article,stock.s_modele,lignes_v.q
Ander voorbeeld
Deze query retourneert meerdere identieke rijen.
select fou.f_id, fou.d_nom
from FOU
where exists(select * from CLI where (cli.C_ID_FOU=fou.F_ID) and (cli.C_ID_FOU=@C_ID_FOU))
In dit geval hoeft u alleen maar distinct toe te voegen.
select distinct fou.f_id, fou.d_nom
from FOU
where exists(select * from CLI where (cli.C_ID_FOU=fou.F_ID) and (cli.C_ID_FOU=@C_ID_FOU))