Sortowanie arkuszy skoroszytu według nazw (makro)

2011-11-14

Pytanie od znajomej, którą zapytał jej przełożony:

Czy da się posortować akrusze w skoroszycie Excela alfabetycznie?

Ano da się. Makrem. Rozwiązanie pochodzi z tego miejsca: http://www.teachexcel.com/free-excel-macros/m-49,sort-worksheet-tabs.html

Na wszelki wypadek makro sortujące arkusze  umieszczam poniżej: Czytaj dalej »

By Rafał Kraik in Helpdesk

ASP.NET – Jak po kliknięciu przycisku otworzyć nowe okno (bez postback)?

2011-11-11

Można na stronie, która zawiera przycisk w Page_Load dopisać:

LinkButton1.Attributes.Add(„onclick”, „window.open(’new.aspx’,”,”); return false;”);

window.open to polecenie JavaScript, która otwiera nowe okno, a w nim stronę new.aspx.

return false widoczne na koncu powoduje, że obsłużenie kliknięcia odbywa się na kliencie, bez postback-a.

Procedura składowana – BEGIN i END

2011-11-11

Zamierzasz utworzyć procedurę, którą będzie uruchamiał pewien nowy użytkownik. Tworzymy więc konto użytkownika:

USE Test
GO
CREATE USER TestUser WITHOUT LOGIN
GO

Teraz dla użytkownika utworzymy procedurę i nadamy uprawnienia dla tego użytkownika:

CREATE PROCEDURE TestIt
AS
BEGIN
 SELECT file_id, name
 FROM sys.database_files
END
GRANT EXECUTE ON TestIt TO TestUser
GO

Uwaga! Uruchamiając ten kod zaznacz go w całości (nie kawałek po kawałku). Czytaj dalej »

By Rafał Kraik in Błedy, SQL

Dla kontrolek umieszczonych w tabeli asp:table nie można wyświetlać właściwości (properties)

2011-11-05

Rzeczywiście, jeżeli w tabeli asp umieścisz inne kontrolki asp, to nie ma możliwości wyświetlenia properties dla tych kontrolek. Nie działa również F4. Jednyna możliwość to ręczne wypełnianie właściwości, czego przecież chcemy uniknąć.

Jeżeli Twoim celem jest po prostu rozmieszczenie kontrolek na stronie, to lepiej użyj zwykłej tabelki (tej HTML-owej, a nie ASP). W przypadku tej tabeli wszystko działa jak należy!

Jak zmienić szerokość strony ASP opartej o master page?

2011-11-04

Strona wykorzystuje szablon CSS. W moim przypadku musiałem otworzyć plik Styles/Site.css, a w nim dokonać zmiany szerokości w kilku miejscach:

  • body
  • page
  • header
  • main
  • footer

Wszędzie musiała się pojawić linijka poszerzająca moją stronę na 1200 pikseli:

   width: 1200px;

 Mimo tych zmian strona nie od razu reagowała na zmianę szerokości. W IE musiałem wyczyścić cache przeglądarki.

Parametr dla procedury to nie to samo co zmienna w zapytaniu ad-hoc. Wykorzystanie planów wykonania.

2011-10-29

Ten przykład pokaże, że co innego jest napisać i dobrze wykorzystać procedurę składowaną z parametrami, a co innego ten sam kod wykonać jako zapytanie ad-hoc, nawet jeżeli pewne wartości do zapytania będą przekazywane poprzez zmienne.

Będziemy pracować w testowej bazie danych:

use AdventureWorks2008R2

Zauważ, jak zachowuje się poniższe zapytanie:

 SELECT * FROM Sales.SalesOrderHeader
 WHERE OrderDate BETWEEN '2005-07-21′ AND '2005-07-22′

jeśliby zajrzeć do planu wykonania zobaczysz, że robi table scan. Gdyby nasi użytkownicy mieli częściej wykonywać tego rodzaju analizy, to możemy dla nich utworzyć indeks:

CREATE NONCLUSTERED INDEX IX_SalesOrderHeader_OrderDate
ON  Sales.SalesOrderHeader(OrderDate)

Zobaczmy czy nasze zapytanie zauważyło tę zmianę: 

 SELECT * FROM Sales.SalesOrderHeader
 WHERE OrderDate BETWEEN '2005-07-21′ AND '2005-07-22′

O tak. Tym razem optymalizator zaproponował, że wykona nonclustered index seek. Super! To zobaczmy, co się stanie, jeżeli sparametryzujemy kwerendę:

 –zmieniam date na zmienna:
 DECLARE @d1 DATETIME = '2005-07-21′
 DECLARE @d2 DATETIME = '2012-07-22′
 SELECT * FROM Sales.SalesOrderHeader
 WHERE OrderDate BETWEEN @d1 AND @d2;

Zapytanie zadziałało, ale wykonany został table scan! Co najmniej, jakby serwer nie zauważył, że w zmiennych nadal znajdują sie te same dane. Na całe szczęście dysponujemy hintami (wskazówkami), którymi można wskazać serwerowi, że zapytanie ma wykonać tak, jakby zmienne miały określone wartości. Wspomniany hint to OPTIMIZE FOR. Zaobserwuj plan wykonania tego zapytania: Czytaj dalej »

By Rafał Kraik in SQL

Jak pobrać aktualną wersję rekordu z tabeli historycznych zmian

2011-10-29

 

Załóżmy, że mamy tabelę o następującej strukturze:

CREATE TABLE case_status
( Id INT,
CaseId CHAR(10),
Status CHAR(10)
)

Tabela ma zapamiętywać historyczne zmiany, które zachodziły dla określonych spraw (CaseId). Przyjrzyjmy się takim danym:

INSERT INTO case_status VALUES
(1,’CASE_A’,’Open’),
(2,’CASE_B’,’Open’),
(3,’CASE_A’,’Process’),
(4,’CASE_C’,’Open’),
(5,’CASE_A’,’Close’),
(6,’CASE_B’,’Process’)

Widać, że sprawa „CASE_A: została kiedyś otwarta (rekord nr 1), potem była przetwarzana (rekord nr 3), aż wreszcie została zamknięta (rekord nr 5). Jeżeli przeanalizujemy dane, to okaże sie dodatkowo, że CASE_A jest już zamknięta, CASE_B jest w stanie Process, a CASE_C  jest póki co tylko otwarta (Open).

Jakie zapytanie może pokazać aktualny stan tych spraw? Czytaj dalej »

By Rafał Kraik in SQL