Kruczki i Sztuczki

Przemyślenia powstałe podczas tworzenia programów w Clarionie.

środa, 29 kwietnia 2009

szyfrowanie za pomocą blowfish

KodujPassword PROCEDURE (haslo)

MyBlowfish CLASS(jPWBlowfish)
END

klucz string(32)
retVal STRING(100)
FilesOpened BYTE(0)



CODE
klucz='macia22'
retVal = MyBlowfish.Encode1024(klucz,haslo)
return(retVal)
Boncler 23:10:55
w dekoduj jest:
Boncler 23:10:58
klucz='macia22'
retVal = MyBlowfish.Decode1024(klucz,haslo)
return(retVal)

wtorek, 10 lutego 2009

PDF-XChange/Tools

Żeby móc korzystać z PDF-XChange/Tools, musimy pobrać instalkę:
http://www.docu-track.com/download/PDFx_Main_CW.exe

W czasie instalacji należy wybrać PDF-XChange Pro, następnie instalator spyta się nas o plik red (Clarion redirection file), tutaj korzystamy z pliku znajdującego się w katalogu BIN naszego Clariona, np. C:\Clarion6\BIN\C60ee.red.


PDF-Tools Report

Jeśli chcemy mieć możliwość drukowania raportów do pdf, należy:
- do Global/Extension dodać PDF-Tools Report Global Extension v4.0

Tutaj do istotnych opcji należą:
Zakładka General:
- Generate PDF – opcja oznaczająca czy PDF ma być generowany,
- Show Generate PDF – tutaj ustawiamy czy ma się pojawić pasek postępu generowania pliku PDF.
Zakładka Previews:
- Run Print Previewer – jeśli ustawimy tę opcję, będzie generowany podgląd po wygenerowaniu raportu,
- Print Hardcopy – określamy czy chcemy żeby raport był drukowany na drukarce,
- Global Viewer Options – możemy wybrać program, za pomocą którego będzie wyświetlony podgląd wygenerowanego pliku PDF.

Teraz do procedury, która generuje nam raport, musimy jeszcze dodać do Properites/Extensions: PDF-Tools Report Procedure Extension v4.0

Należy pamiętać o włączeniu podglądu raportu (Report Preview – w opcjach raportu, a nie PDF-Tools). Bez tego generowanie plików pdf nie będzie działać.


PDF-XChange ActiveX Viewer

Aby skorzystać z przeglądarki PDF musimy:
- dodać do Global/Extensions: PDF-XChange ActiveX Viewer v2.0 Global Extension,
- następnie do Project/Properties/Properties/Defines dodajemy trzy linijki:

_SVDllMode_=>0
_SVLinkMode_=>1
_ecgOleAutLinkMode_=>1

Teraz możemy dodać do wybranej procedury:
PXC Viewer 2.x Ax Obj:PDFView (Obj:PDFView jest to nazwa obiektu pod jaką będzie dostępna nasza przeglądarka)

Do ważniejszych opcji należą:
- PXCVAXiewClass Obj – tutaj wybieramy nazwę pod jaką przeglądarka będzie dostępna,
- REGION Control ID – wybieramy miejsce wyświetlania przeglądarki

Należy zwrócić uwagę na fakt, że po wybraniu obiektu na jakim będzie wyświetlana przeglądarka może nam ona przesłonić inne obiekty. Np. jeśli mamy kilka zakładek i umieścimy przeglądarkę na którejś z nich, to po uruchomieniu programu przeglądarka będzie zawsze widoczna, bez względu na to na której zakładce aktualnie się znajdujemy. Rozwiązanie jakie znalazłem to poszukanie w embedach PDFView.InitOLE(?Region1), danie omit i własnoręczne wywołanie wtedy gdy potrzebujemy.
Do usunięcia obiektu służy polecenie PDFView.Kill().

sobota, 27 grudnia 2008

15 wskazówek do zwiększenia wydajności pracy z serwerem sql

Oryginalny artykuł dostępny jest pod adresem:
http://www.simple-talk.com/sql/performance/performance-tuning-tips-for-database-developers/

  1. Ustawiaj klucz główny, dla każdej tabeli którą tworzysz. Dopóki nie będziesz posiadał odpowiedniej wiedzy aby wymyślić coś lepszego, zadeklaruj go jako indeks klastrowy (warto pamiętać, że jeśli ustawimy klucz główny za pomocą narzędzia Enterprise Manager będzie on domyślnie tworzony z indeksem klastrowym).
  2. Każda kolumna, która przechowuje klucz obcy powinna posiadać indeks. Jeśli wiesz, że ten klucz będzie unikalny, wymuś na indeksie, aby też taki był.
  3. Nie indeksuj niczego więcej.
  4. Gdy odwołujesz się do obiektów w zapytaniach TSQL, zawsze podawaj kwalifikator ich właściciela (chyba że potrzebujesz innego rozwiązania). Korzystaj z DBO.SYSDATABASES zamiast samego SYSDATABASES.
  5. Na początku każdej procedury składowanej ustawiaj SET NOCOUNT (a na końcu SET NOCOUNT OFF).
  6. Dokładnie przemyśl potrzebę korzystania z blokad. Jeśli nie tworzysz oprogramowania bankowego, czy będzie miało znacznie jeśli wystąpi brudny odczyt (ang. dirty read)? Możesz zastosować NOLOCK, ale często dużo łatwiej jest ustawić na początku procedury SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED, a następnie przywrócić ustawienia za pomocą READ COMMITTED na jej końcu.
  7. Pewnie słyszałeś już to milion razy, ale pobieraj tylko te kolumny i wiersze, których w danym momencie naprawdę potrzebujesz.
  8. Korzystaj z transakcji kiedy wydaje się to odpowiednie, ale nie pozwól żeby jakikolwiek użytkownik mógł wpłynąć na jej wykonanie. Osobiście staram się wykonywać wszystkie transakcje wewnątrz procedur składowanych.
  9. Jeśli tylko możesz, unikaj tabel tymczasowych. Jeżeli jednak będziesz ich potrzebować, twórz je wykorzystując jawne wywołanie CREATE TABLE #TEMP.
  10. Staraj się nie korzystać z NOT IN, zamiast tego stosuj LEFT OUTER JOIN. Nawet wtedy gdy łatwiejsze i czytelniejsze wydaje się wykorzystanie NOT IN.
  11. Jeśli upierasz się przy stosowaniu dynamicznego sql (konkatenacja stringów) wykorzystuj do tego nazwane parametry oraz SP_EXECUTESQL (zamiast EXEC), dzięki temu masz szansę na ponowne użycie planu wykonania zapytania (ang. query plan). Uproszczeniem byłoby powiedzieć, że procedury składowane są odpowiedzią na każdy problem, jednak z duża dozą prawdopodobieństwa można stwierdzić, że za ich pomocą nie da się zrobić czegoś źle.
  12. Wyrób w sobie nawyk kontrolowania swojego kodu przed oraz po każdej jego zmianie (narzędzie SQL Server Profiler). Mając na uwadze rodzaj wprowadzonych zmian, sprawdź czy wykorzystanie procesora, odczyty i zapisy serwera nie wzrosły o więcej niż 10-15%. Jeśli tak, to najprawdopodobniej procedura będzie wymagała przemyślenia.
  13. Jeśli to tylko możliwe, staraj się ograniczać liczbę zapytań kierowanych do serwera. Jedną z metod jest formułowanie zapytania tak, aby serwer za jednym razem zwrócił większy zbiór wyników.
  14. Unikaj stosowania wskazówek dla indeksów oraz złączeń.
  15. Kiedy skończysz pisanie kodu, ustaw program Profiler tak aby monitorował zapytania tylko z Twojego komputera, następnie uruchom swoja aplikację od początku do końca. Sprawdź liczbę zapisów oraz odczytów, a także liczbę odwołań do serwera. Postaraj się wychwycić nietypowe zachowania procedury. Bardzo często można zauważyć wywołania procedur już niewykorzystywanych albo wywołania podwójne. Postaraj się przeanalizować swoje spostrzeżenia razem z administratorem bazy.

Dodanie zer przed ciągiem znaków tak aby miał określoną długość

Aby dodać, np. zera przed ciągiem znaków tak aby cały ciąg miał 13 znaków, możemy posłużyć się następującymi instrukcjami:

SELECT RIGHT(REPLICATE('0', 13) + 'ciag', 13)

SELECT REPLICATE('0', 13 - CHARINDEX('.', 'ciag' + '.')) + 'ciag'

środa, 17 grudnia 2008

SQL ciag dalszy .... operacje na macierzach, łańcuchach znaków, zabawa z XML

Operacje na macierzach w SQL np mnozenie 2 macierzy o wymiarach 5x5 - robil to moze ktos z was na papierze ?
a w sql takie prosciutkie:

http://www.simple-talk.com/sql/t-sql-programming/sql-server-matrix-workbench/


polecam tez lekture innych artykułów z tej strony : http://www.simple-talk.com/default.aspx


Pierdoły o ktorych wiecznie zapominam

==========================================================
1. ComboBox - wybór z listy:
Zawartosc pola "From":
'Cywilny|#1|Grodzki|#2|Gospodarczy|#3'

==========================================================
2. Podstawowe metody easyExcel (nigdy mi sie nie chce szperac w dokumentacji):
EXLClass.Init(true,true,false) //Inicjowanie obiektu EE
(widoczny, pokazuj bledy, nowa instancja excela)
EXLClass.OpenWorkbook(sciezkadoexcela, false,,, true) //otworzenie istniejacego pliku
(sciezka, tylko do odczytu,haslo do otwarcia,haslo do zapisu,dodaj do ostatnio otwartych plikow, uaktualnienie linkow cokolwiek to znaczy)
EXLClass.AddWorkbook //nowy arkusz
EXLClass.SelectSheet(1) //wybor istniejacego arkusza
EXLClass.Write(2,1,'Lp.',false,true) //zapis do komorki 2 wiersz 1 kolumna
(wiersz, kolumna, wartosc, zapis bez formatowania, zaznaczanie komorki)
EXLClass.GetCell(2, 1, OdczytanaWartosc, Cell:Text) //pobranie wartosci z komorki
(wiersz, kolumna, wartosc, co zwrocic z komorki)
EXLClass.SelectRange(2,1,licznik+1,8) //zaznaczenie:
startrow,startcol,endrow,endcol
EXLClass.AutoFit //outodopasowanie wg ww. zaznaczenia

EXLClass.QUIT
EXLClass.Kill

=========================================================
3. Daty w excelu z Easy excel

EXLClass.Write(licznik,6,EXLClass.Date2Excel(TA:DataZwrotuWpisu),,false)
zapis - format(data,@d17)
odczyt - bez formatow

Zewnętrzny serwer SQL

czasami przyda sie przy transferach danych miedzy roznymi serwerami SQL:

EXEC sp_addlinkedserver
@server='nasza nazwa zdalnego',
@srvproduct='',
@provider='SQLNCLI',
@datasrc='adres ip zdalnego'


exec sp_addlinkedsrvlogin
@rmtsrvname = 'nasza nazwa zdalnego - ta sama jak wyzej',
@useself = 'TRUE',
@locallogin = 'lokalny login do zdalnego',
@rmtuser = 'login do zdalnego' ,
@rmtpassword = 'haselko do zdalnego'

select * into [tabele na bierzacym serwerze] from testowy.baza.dbo.zdalnatabela


Jedna wazna uwaga - na lokalnym serwerze musimy byc zalogowani na sql Autentication
(windows logon nie dziala)

Współtwórcy