Archive for April, 2009

SQL for paging

April 29, 2009

Hôm trước có một anh bạn hỏi mình trong MS SQL server có câu lệnh phân trang không. Mình trả lời là có nhưng chạy chậm. Anh bạn mình bảo, dạo này bọn mạng (http://www.15seconds.com/issue/070628.htm) hay sử dụng các câu lệnh phân trang kiểu này, em xem thế nào.

SELECT *
FROM   (SELECT ROW_NUMBER() OVER(ORDER BY person) AS
rownum, person, income FROM Salaries) AS Salaries1
WHERE  rownum >= 5 AND rownum <= 9
ORDER BY income

Nhìn câu này mình phán luôn câu này chỉ dùng cho các bảng dữ liệu be be’ chứ to to 1 tý là đi về nơi xa ngay. Mình chứng minh cho các bạn thấy ngay đây. Ở sub-query, các bạn phải full-scan table 1 phát, rồi lại thêm 1 cái fake column là cái cột salaries1 kia, tiếp đến câu lệnh Select * where rownum >= 5 AND rownum <= 9, lại phải full scan table phát nữa vì làm gì có index nào trên cái rownum kia. Chưa kể cả ở 2 câu, các bạn đều dùng Order by nữa. Nếu dữ liệu của các bạn vào loại lớn (tất nhiên là tầm vài chục M records, chứ vài K thì nói làm x gì?), tốc độ phân trang của các bạn sẽ là “phố của bò”. Bạn nào không tin thì mời bạn nhòm vào execution plan của câu lệnh.

Cũng có một số trang đề xuất dùng CTE, nhưng kết quả thì cũng như trên thôi, chả hơn x gì.

Theo ý mình thì nên làm thế này. Các bạn nên viết thành một SP, trong đó có 2 câu lệnh:

Câu lệnh đầu tiên chỉ là select top 500, lấy ra 500 bản ghi thôi. Các tips và tricks giời thì cũng không lại được câu lệnh cơ bản này, chả phải where iếc gì mà cũng chả cần subquery làm gì cho nó mệt mỏi. Cá nhân mình cho rằng, câu lệnh tìm kiếm mà trả về hơn 500 bản ghi là câu lệnh vô nghĩa, hơi sức x đâu mà xem chi tiết ngần đấy bản ghi. Muốn tìm chính xác thì mời các bạn thêm điều kiện vào.

Câu lệnh thứ 2, các bạn select count(*) cho mình để trả về chính xác số lượng bản ghi thoả mãn điều kiện tìm kiếm

Như vậy, trên màn hình của các bạn sẽ hiển thị 2 thông tin: cái grid của các bạn chỉ chứa 500 records, nhưng tổng số bản ghi là con số chính xác. Bạn nào thật thà thì nói với nhân dân là tao chỉ hiển thị 500 trên tổng số xxx bản ghi. Còn không thì lờ luôn đi cũng được.

HN

Build MS Outlook Addon 2003 và 2007 trên nền VS 2008

April 29, 2009

Hơn tuần nay mình ngồi đánh vật với cái MS Outlook Addon 2003 và 2007 trên nền VS 2008. Vì máy cài Office 2007 (tất nhiên là có mua của anh Hoá đơn Cổng) nên mình ưu tiên bạn Bẩy trước. Làm việc với bạn Bẩy thật mệt. Bạn ấy chảnh VCD. Chạy trên nền debug thì vô 4, chạy phe phé, kết quả as expected. Nhưng khi bắt tay vào tạo bộ cài đặt lại gặp bao nhiêu vấn đề. Anh bạn lỗi “Not Loaded. A runtime error occurred during load VSTO” lúc nào cũng tay bắt mặt mừng với mình. Thuyết phục kiểu gì cũng không chịu biến đi cho. Mãi về sau có anh Misha Shneerson (*) nhờ anh bạn thân, người mà ai cũng biết là ai đấy (**), nhắn mình địa chỉ thường trú của bạn Bẩy trong sổ đăng ký (registry) là HKCU. Đến đây công viêc bắt đầu thông. Mình đưa bạn đến HKCU\Software\Microsoft\Office\<App>\AddIns\<AddInName> thì coi như xong.

Đến lượt anh Ba, mọi chuyện khác hẳn. Già hơn bạn 7 những 4 niên nên anh khó tính kinh. Anh giống bạn Bẩy ở chỗ chạy trên nền debug cũng gặp bạn Vô 4, nhưng khi vào bộ setup thì 4` ngay. Mình theo cách của ban Misha, nhưng anh ấy đếch chịu, cứ khăng khăng dẫn mình đến gặp bạn Not Loaded. Anh ấy ép mình phải dũng võ bẩn. Mình phải so sánh địa chỉ trong sổ đăng ký giữa nền debug và setup. Mình phát hiện ra anh 3 tuy già nhưng giàu vãi. Anh ấy có 2 nhà các bạn ạ. Một ở phố HKCU và 1 ở phố HKLM. Đến đây cũng mới chỉ là ½ quãng đường, anh bạn Not Loaded vẫn chưa chịu biến. Loay hoay một hồi thì phát hiện ra, anh 3 này đếch chịu tin ai cả. Khác với bạn 7, khi cài đặt xong, chạy chương trình sẽ tự động hiện ra một cái cửa sổ để mình khẳng định niềm tin “In 7 we trust” – (Đô đang lên, tranh thủ làm hàng tý J), anh 3 bắt mình phải làm bằng tay. Anh 3 ơi, anh làm em mệt quá. Cái anh cần là cái lệnh này

caspol -u -ag All_Code -url “<application path>” FullTrust -n “<application name>”

Nếu làm cho em thì em mang cái lệnh của nợ kia ra Command line mà phang ngay, nhưng đây là làm cho “nhân dân dùng” (@THLinh) nên em phải tạo thêm 1 project, tạo key, ghép chuỗi để thực hiện. Nếu Giờ nói thì dễ nhưng cũng làm em mất đứt 2 ngày. Cũng may mà xong không Lý Thông(s) lại kêu ầm ầm.

Tóm lại khi làm các hệ thống MS Office Add-on các bạn phải chú ý 2 điều:

Hệ thống registry, bạn 7 có 1 nhà ở HKCU còn anh 3 có nhà cả ở HKCU lẫn HKLM. Nghe giang hồ đồn trên nền Vista thì cũng khác một tý, mình chưa thử nên chưa confirm được.

Đặt FullTrust cho anh 3, anh 7 hệ thống làm automatically.

(*):http://blogs.msdn.com/mshneer/archive/2007/09/04/deploying-your-vsto-add-in-to-all-users-part-i.aspx

(**): Bạn Google.

HN