sql >> Database >  >> RDS >> Access

De IIf()-functie versus de IIf()-instructie

De IIf() functie en de IIf() verklaring zijn fundamenteel verschillende dieren.

Helaas zijn ze bijna niet uit elkaar te houden. En toch is het belangrijk om dat te kunnen. Waarom?

Omdat deze IIf() functie is een runtime-fout die wacht om te gebeuren:

IIf(Attempts = 0, 0, Successes / Attempts)

Terwijl deze IIf() instructie zal veilig een waarde retourneren, zelfs als Attempts = 0 :

IIf(Attempts = 0, 0, Successes / Attempts)

Dus, zie jij het verschil tussen de twee?

Ze apart vertellen

Als u het verschil tussen de twee bovenstaande voorbeelden niet kunt zien, is dat omdat er geen verschil is.

De IIf() functie ziet er identiek uit als de IIf() verklaring.

Het verschil zit 'm in hoe, of beter gezegd, waar- ze worden geëvalueerd.

  • De IIf functie is lid van de VBA.Interaction standaardbibliotheek.
  • De IIf verklaring wordt geëvalueerd door de Expression Service van de Jet/ACE-database-engine (acees.dll).

Ik schreef hier over de verschillen tussen code en uitdrukkingen:

Expressies vs. CodeWanneer is code geen code? Als het een uitdrukking is. Wat is het verschil en wat maakt het echt uit? Laten we onderzoeken. Mike Wolfe niet langer ingesteld

Het fundamentele verschil tussen de IIf()-functie en de IIf()-statement

Drie woorden:evaluatie van kortsluiting.

  • De IIf verklaring heeft het.
  • De IIf functie niet.

Wat is kortsluitingsevaluatie?

Bij kortsluitingsevaluatie evalueert de code alleen die uitdrukkingen die nodig zijn om het resultaat te bepalen.

Het IIf-statement en de IIf-functie hebben beide drie argumenten:

  • expr: een booleaanse voorwaarde
  • truepart: het resultaat dat moet worden geretourneerd als expr is waar
  • falsepart: het resultaat dat moet worden geretourneerd als expr is niet waar

Met de IIf-instructie worden slechts twee van die argumenten ooit geëvalueerd:de expr en–afhankelijk van het resultaat van de expr– ofwel de truepart OF het valse deel .

Met de IIf-functie MOETEN alle drie de argumenten worden geëvalueerd voordat ze zelfs maar aan de functie worden doorgegeven.

Waarom het ertoe doet

Laten we teruggaan naar de originele voorbeeldcode:

IIf(Attempts = 0, 0, Successes / Attempts)

Wat gebeurt er als de waarde van Pogingen is nul?

IIf statement

  • De expr evalueert naar True.
  • Het ware deel evalueert tot 0 .
  • De instructie retourneert 0 .

IIf functie

  • De expr evalueert naar Waar.
  • Het ware deel evalueert tot 0 .
  • Het valse deel resulteert in #ERROR#:Delen door nul

De functie versie retourneert een fout omdat het werd gedwongen om zowel de truepart en het valse deel uitdrukkingen.

Waar is IIf Behandeld als een verklaring?

IIf wordt op de volgende plaatsen geëvalueerd als een statement:

  • Vragen
  • Eigenschappen voor formulier/rapport/besturingselement (bijv. een TextBox ControlSource)
  • De functie Access Application.Eval()

Voor meer details, inclusief hoe u definitief kunt testen of IIf wordt behandeld als een statement of een functie – lees mijn artikel over de verschillen tussen expressies en code:Expressies vs. Code .

Externe referenties

IIf-functie (Visual Basic for Applications)Office VBA-referentieonderwerpMicrosoft Docso365devx
  1. Hoe SQL-query's te versnellen

  2. Een rapport groeperen op meerdere velden in Access 2016

  3. MySQL gebruiken met Oracle Heterogene Services

  4. Postgres-fout bij bijwerken van kolomgegevens