ločevanje velikih in malih črk v Access 2007

Preostalo o MS Pisarni
Odgovori
slavkoa
Prispevkov: 7
Pridružen: Pe Feb 03, 2017 1:09 pm

ločevanje velikih in malih črk v Access 2007

Odgovor Napisal/-a slavkoa »

V Access 2007 imam bazo podatkov v tabeli, ki vsebuje npr. 3 stolpce. V enemu od stolpcev je podatek o številki dokumenta (stolpec je formatiran v text obliki), ki je največkrat nekaj mestna številka npr. 1234567, včasih pa vsebuje tudi črke npr. 12345c9 ali 12345C9.
Ko hočem izdelati poizvedbo (query) v kateri bi seštel vrednosti v okviru ene številke dokumenta mi Access ne prepozna razliko med velikimi in malimi črkami v številki dokumenta.
npr. 123m je enako 123M. Meni pa pomeni to dve različni številki dokumenta. Primer:

št_dokumenta ključ vrednost v eur
123m 978/0 10,00
123M 978/0 20,00

Pravilen rezultat bi bil 123m = 10,00 EUR
123M = 20,00 EUR

Dobim pa seštevek obeh št.dokumenta 123m = 30,00 EUR

Kako bi prepričal Access, da male in velike črke v številki dokumenta pomenijo različno vsebino celice ??

Hvala za pomoč in lep pozdrav
Slavko
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: ločevanje velikih in malih črk v Access 2007

Odgovor Napisal/-a admin »

Pozdravljeni,

Ja, Access je ena takšna čudna baza ki se je jez izogibam kot hudič križa... A to niti ni pomembno

Za rešitev v Accessu morate uporabiti funkcijo StrComp, torej:

Koda: Izberi vse

...where StrComp(Kljuc, "123m", 0) = 0
lp,
Matjaž Prtenjak
Administrator
slavkoa
Prispevkov: 7
Pridružen: Pe Feb 03, 2017 1:09 pm

Re: ločevanje velikih in malih črk v Access 2007

Odgovor Napisal/-a slavkoa »

Hvala za odgovor toda jaz imam v bazi preko 10000 različnih številk dokumentov, ki vsebujejo male črke. A bi se dalo s poizvedbo določiti kriterij s katerim bi izbral vse številke dokumentov, ki vsebujejo male črke na kateremkoli mestu v tej celici. Številke dokumenta so približno take: 123n, 458/mN, 7775555n78 ... tega je ogromno število v tem stolpcu. Izbrane številke dokumenta z malimi črkami bi potem izločil v posebno tabelo in bi jih ločeno obravnaval od ostalih številk, ki so OK in ne vsebujejo malih črk.
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: ločevanje velikih in malih črk v Access 2007

Odgovor Napisal/-a admin »

V originalnem vprašanju niste spraševali tega, temveč ste spraševali kako doseči iskanje neke konkretne šifre. To kar sprašujete sedaj pa je nekaj čisto drugega. Najti želite vse zapise, ki vsebujejo majhne črke.

To boste dosegli z uporabo operatorja like:

Koda: Izberi vse

... where Kljuc like '*[a-z]*'
lp,
Matjaž Prtenjak
Administrator
slavkoa
Prispevkov: 7
Pridružen: Pe Feb 03, 2017 1:09 pm

Re: ločevanje velikih in malih črk v Access 2007

Odgovor Napisal/-a slavkoa »

Ja sedaj sicer najde vse zapise, ki vsebujejo črke, vendar tako velike kot male. Jaz pa hočem, da mi izloči samo tiste z malimi črkami. npr. 458n NE pa tudi 458N.
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: ločevanje velikih in malih črk v Access 2007

Odgovor Napisal/-a admin »

Kot rečeno Accessa ne uporabljam zato tega nisem preizkušal.

Access je očitno "case insensitive" baza in zato vašega problema v njej ne boste mogli preprosto rešiti. Najhitreje in najlažje je tako, da dodate polje z numeričnim ključem (id), in nato v Excel izvozite polji ID in vaš ključ, ter v Excelu pogledate kateri zapisi vam nagajajo ter jih potem preko ID polja uredite
lp,
Matjaž Prtenjak
Administrator
dragopre
Prispevkov: 105
Pridružen: To Dec 11, 2012 11:46 pm

Re: ločevanje velikih in malih črk v Access 2007

Odgovor Napisal/-a dragopre »

Pred časom sem se malo igral z Access-om in sem spet malo pobrskal po Help-u.
Mislim, da rabiš tole:

V Help-u za Access poglej navodilo "Razvrščanje zapisov po vrstnem redu, ki razlikuje velike in male črke".
V opisu je opisana funkcija StrToHex, ki jo lahko enostavno skopiraš v svoj projekt.
Primer opisuje, kako jo uporabiš v poizvedbi za "ORDERR BY".
Uporabis jo seveda lahko tudi pri "GROUP BY".

Na enem svojem testu sem jo tudi preveril.

Tole je funkcija:

Koda: Izberi vse

Option Compare Database
Option Explicit
Function StrToHex(S As Variant) As Variant
'
' Converts a string to a series of hexadecimal digits.
' For example, StrToHex(Chr(9) & "A~") returns 09417E.
'
   Dim Temp As String, I As Integer
      If VarType(S) <> 8 Then
         StrToHex = S
      Else
         Temp = ""
      For I = 1 To Len(S)
         Temp = Temp & Format(Hex(Asc(Mid(S, I, 1))), "00")
      Next I
         StrToHex = Temp
      End If
End Function
Tole pa uporaba v poizvedbi:

Koda: Izberi vse

SELECT Promet.ID, Promet.Datum, Promet.Odliv, Promet.Kdo, StrToHex([Promet.kdo]) AS Expr1
FROM Promet
ORDER BY StrToHex([Promet.kdo]);


Lep pozdrav,
Drago
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: ločevanje velikih in malih črk v Access 2007

Odgovor Napisal/-a admin »

Ja, sem se tudi spomnil, da obstaja način, kjer pa č zaukažete, naj vam Acces izpiše vse zapise, kjer vrednost NI ENAKA vrednosti z velikimi črkami... torej:

Koda: Izberi vse

... where UCase(kljuc) <> kljuc
lp,
Matjaž Prtenjak
Administrator
slavkoa
Prispevkov: 7
Pridružen: Pe Feb 03, 2017 1:09 pm

Re: ločevanje velikih in malih črk v Access 2007

Odgovor Napisal/-a slavkoa »

Hvala Dragotu in Matjažu, zgornji nasvet od Dragota deluje sem ga preizkusil. Sicer imam ogromno bazo podatkov vendar jih sedaj s poizvedbo lepo ločuje v okviru malih in velikih črk, ko sem vpisal zgornjo funkcijo ... bom pa preizkusil še tale nasvet od Matjaža. Še enkrat hvala obema, saj tole bazo urejam za službo in je pravilen rezultat še kako potreben.
Odgovori