Kodulehed
[359] - Andmebaasid I (IDU0220) (kevad 2017)
Esiletöstetud Kiirvalik
Lisainfo Kõige olulisemate tegevuste kiirvalik. Failide saatmiseks valige Vastamine alt sobiv ülesanne.
Avaleht

Valik materjalidest
   Minu lemmikud

Vastamine
Üldist
Materjalid
LisainfoMaterjalide kataloogid.
Värvilised mummud tähistavad hinnangulist kataloogide lugemise vajadust. Roheline - suurim, kollane - keskmine, punane või mummuta - väikseim
Isiklik
Lisainfo Info ainult Sulle - teised kasutajad seda ei näe
Mitmesugust
Abi / Kasutajatugi / Vahendid - MS Access

Avalikud küsimused ja vastused:

Küsimuste teemade nimekiri

Erki Eessaar:
Kuidas jõustada MS Accessis tabeliga seotud kitsendus, et elukoht ei tohi olla ainult numbritest koosnev string?
Vastus: 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 vastust:

Keskmine hinne : Pole veel hinnanguid!