Kuidas jõustada MS Accessis tabeliga seotud kitsendus, et elukoht ei tohi olla ainult numbritest koosnev string?

Postitas Erki Eessaar
MS Access ei paku täielikku toetust regulaaravaldiste kasutamisele, kuid selle LIKE predikaadi mustrite koostamise võimalusi on laiendatud regulaaravaldistest tuntud võimalustega.

Nimetatud kitsenduse jõustamiseks on abi, kui see kitsendus ümbersõnastada.

Kui elukoha stringis on vähemalt üks numbrimärk, siis peab selles olema ka mõni selline märk, mis ei ole numbrimärk.

Teatavasti võib binaarset loogilist operatsiooni implikatsioon kasutava avaldise P=>Q kirjutada teisendusreeglite alusel ümber samaväärseks avaldiseks: NOT (P) OR Q. Sellise avaldise saab aga juba tabelitaseme valideerimisreeglina kirja panna.

Antud juhul

  • P="Kui elukoha stringis on vähemalt üks numbrimärk"
  • Q="peab selles olema ka mõni selline märk, mis ei ole numbrimärk"

Seega seon MS Accessis veeruga elukoht valideerimisreegli:

Not ([elukoht] ALike '%[0-9]%') Or ([elukoht] ALike '%[!0-9]%')

[!0-9] ütleb mustris, et leiduma peab vähemalt üks märk, mis ei kuulu numbrimärkide hulka.

Veel üks võimalus on defineerida MS Accessis veeruga elukoht seotud valideerimisreegel:

IsNumeric([elukoht])=False

Võrdluseks, PostgreSQL ja Oracle võimaldavad regulaaravaldiste kasutamist:

  • PostgreSQLis tuleks tabeliga Isik siduda CHECK kitsendus: CHECK (elukoht!~'^[[:digit:]]+$')
  • Oracles tuleks tabeliga Isik siduda CHECK kitsendus: CHECK(NOT REGEXP_LIKE(elukoht,'^[[:digit:]]+$'))

Need kitsendused kontrollivad, et elukoht ei vastaks mustrile, mille kohaselt sisaldab see ainult numbrimärke.

Hinda postitust:

Keskmine hinne : Pole veel hinnanguid!