Kategorie szkoleń | Egzaminy | Kontakt

Odpowiedzi (5)

  • 0

Witam,

nie do końca rozumiem pytanie, czego miałaby dotyczyć zamiana i w czym te polskie litery występują (dane, metadane)?

Poproszę o przykład kodu z opisem, co ma być w nim zamienione, wraz z dołączoną informacją, czy chodzi o kodowanie ASCI czy UNICODE.

  • Odpowiedział
  • @ | 04.05.2015
  • TRENER ALTKOM AKADEMII
  • 0

Witam,

już wyjaśniam: mam pewien duży słownik nazw z polskimi znakami (tabela), natomiast przy tworzeniu raportu do nadzorcy są one zabronione. Łącząc się z tym słownikiem pewnymi danymi (m.in. zawierającymi wartości) joinem, pobieram odpowiednie nazwy i chciałbym, aby były one w wersji bez polskich znaków, tj. zamienione wszystkie polskie znaki (ś na s itd.). Kodowanie UNICODE.

Michał_Przyłęcki
  • Odpowiedział
  • @ Michał_Przyłęcki | 04.05.2015
    • 1
    • 1
    • 1
  • 0

2 rozwiązania, jedno w 2 wariantach:

I - pierwsze rozwiązanie

1. Tworzymy funkcję zamieniającą polskie znaki  (parametr napis, zwraca napis).

Wariant 1

2. Dodajemy do tabeli kolumnę wyliczalną, której wartość wypełnia wcześniej utworzona funkcja.

3. W raporcie prezentujemy wartości pochodzące z tej kolumny.

Koszt - dodatkowe miejsce na dysku, wolniejsze działanie operacji Insert i Update

Wariant 2

2. W raporcie prezentujemy wartości zwracane przez przygotowaną funkcję, którą wywołujemy dla każdego rekordu z zapytania.

Koszt - wolniejsze działanie raportu w przypadku większej ilości zwracanych rekordów

 

II - drugie rozwiązanie

1. Dodajemy pole w tabeli, które podczas wprowadzania danych ma być ręcznie (tzn. po stronie aplikacji dodającej dane) wypełnione napisem bez polskich liter.

2. W raporcie prezentujemy dane z tej dodatkowej kolumny.

Koszt - dodatkowe pole do wypełnienia, możliwość różnych danych w polu z polskimi znakami i tym bez polskich znaków (wypełnia coś zewnętrznego, więc temu czemuś ufamy)

 

Generalnie należy pamiętać, że dla napisów dłuższych niż 500 znaków natywne funkcje SQL Server są mniej wydajne (eksperyment Pawła Potasińskiego), więc sugerowane rozwiązanie to napisanie/ pobranie (bo są takie biblioteki) biblioteki -> zaimportowanie jej do właściwej bazy danych (wcześniej może być konieczność rekonfiguracji SQL Server) -> utworzenie na jej bazie funkcji zmieniającej dane.

  • Odpowiedział
  • @ | 04.05.2015
  • TRENER ALTKOM AKADEMII
  • 3

Ciekawe pytanie.

Jeśli chodzi o funkcje T-SQL, odpowiedź znalazłem np. tutaj:


http://stackoverflow.com/questions/4024072/how-to-remove-accents-and-all-chars-a-z-in-sql-server

 

W VBA używałem jak dotąd funkcji UDF poniżej (Excel, podejrzewam, że w Accesie też by zadziałała bez problemu). Może łatwo da się przerobić na funkcję działającą MS SQL Server/ VB dot.net?


Function StringBezPlZnakow(strCiag As String) As String
    Dim arrFind As Variant, arrReplace As Variant, iArr As Integer
    Dim i As Integer, temp As String

    arrFind = Array("ą", "ć", "ę", "ń", "ó", "ł", "Ą", "Ę", "Ć", "Ź", "Ż", "Ó", "Ń", "Ł", "Ś")
    arrReplace = Array("a", "c", "e", "n", "o", "l", "A", "E", "C", "Z", "Z", "O", "N", "L", "S")

    temp = strCiag
    For i = 1 To Len(temp)
        If Asc(Mid(temp, i, 1)) > 122 Then
            For iArr = LBound(arrFind) To UBound(arrFind)
                If Mid(temp, i, 1) = arrFind(iArr) Then
                    temp = VBA.Replace(Expression:=temp, _
                                       Find:=arrFind(iArr), _
                                       Replace:=arrReplace(iArr))
                    Exit For
                End If
            Next
        End If
    Next
    StringBezPlZnakow = temp
End Function

 

Jacek_Kotowski
  • Odpowiedział
  • @ Jacek_Kotowski | 04.05.2015
    • lider
    • laureat
    • ekspert
    • 60
    • 54
    • 94
  • 0

Spróbuję przerobić i wykorzystać funkcję (z drugiej strony ciekawe, jak z wydajnością). Również dziękuję za wskazówki od trenera.

Michał_Przyłęcki
  • Odpowiedział
  • @ Michał_Przyłęcki | 04.05.2015
    • 1
    • 1
    • 1