Lỗi khi tạo LinkServer giữa SQL2000 và SQL2008

Đôi khi chúng ta làm việc trên phiên bản Microsoft SQL2008 nhưng cần lấy một số dữ liệu trên SQL2000 giải pháp là sử dụng LinkServer, tuy nhiên việc tương thích giữa hai phiên bản này không hoàn toàn. Thỉnh thoảng chúng ta gặp một số lỗi chung chung mà không tài nào giải thích được.

Cách giải quyết chưa nói là triệt để nhưng hầu hết các lỗi khi linkserver từ SQL2000 và SQL2008.

 

Thuốc cho Delphi XE2

Chào các bạn,

Trên đây nói nhiều về Delphi nhưng không có thuốc để các bạn sử dụng thì ngại quá. Mặc dù việc dùng thuốc chẳng có gì đáng tự hào như vì niềm đam mê và túi tiền đành xài vậy.

Xin phép chia sẻ với anh chị có cùng niềm đam mê Delphi.

Download tại đây

Phần mềm kiểm tra dung lượng file và tự gửi mail thông báo

Chào các bạn,

Nếu các bạn là DBA của một hệ thống sử dụng MSSQL Server với hàng chục con server thì các bạn sẽ rất đau đầu và tốn thời gian vào từng con server xem Log fil phìn to ra hàng ngày và Shink nó.

Tôi viết công cụ tự động kiểm tra file log hoặc file bất kỳ sẽ tự động chạy kiểm tra và gửi mail thông báo nếu một file nào đó vượt quá dung lượng quy định.

các bạn phải thiết lập cách thông số cho SMTP để gừi mail đi.

Thiết lập thông số cho:

  • Tự động chạy sau khoản thời gian (Milisecond)
  • Loại file cần kiểm tra.
  • Dung lượng file > hoặc bằng
  • Đường dẫn cần kiểm tra.

Ưu điểm của phần mềm là :

  • Không cần .NET FrameWork hoặc bất cứ thành phần hỗ trợ nào khác.
  • Chỉ cẩn Click là chạy và không cần cài đặt.
  • Tự động chạy khi khởi động Windows

Sau đó chạy kiểm tra………………..

Download chương trình tại đây

Hàm tính giá trị Byte, MB, GB trong Delphi

Hàm này trả về giá trị MB, GB từ một giá trị Byte
function FormatByteSize(const bytes: Integer): string;

const

B = 1; //byte

KB = 1024 * B; //kilobyte

MB = 1024 * KB; //megabyte

GB = 1024 * MB; //gigabyte

begin

if bytes > GB then

result := FormatFloat(‘#.## GB’, bytes / GB)

else

if bytes > MB then

result := FormatFloat(‘#.## MB’, bytes / MB)

else

if bytes > KB then

result := FormatFloat(‘#.## KB’, bytes / KB)

else

result := FormatFloat(‘#.## bytes’, bytes) ;

end;

Những điểm mới trong Delphi XE2

Công cụ Delphi XE2 ra đời có một số điểm mới như sau, làm các Delphi Fan thỏa mãn và no nê.

Delphi XE2 hỗ trợ Windows 64bit ? Yes, họ đã hỗ trợ. Khi Deploy ứng dụng của bạn, bạn có thể chọn bản Build trên kiến trúc nào, windows 32 hoặc 64. Đây là những điểm mới mà dân lập trình delphi mong mỏi nhất từ trước đến nay và đã thành hiện thực.

Delphi đã có thề viết ứng dụng cho IOS ? Yes, đã có thể

 

Delphi đã hỗ trợ công nghệ 3D ?, Yes, đã có thể

 

 

 

Gửi Mail SMTP trong Delphi bằng IdSMTP

Thư viện Indy đồ sộ được tích hợp sẵng trong bộ lập trình Delphi từ phiên bản Delphi 7 trở về sau. Dựa trên bộ thư viện này việc gừi mail thông qua SMTP cực kỳ đơn giản và hiệu quả.

Tôi xin giới thiệu một dòng Code ngắn mô tả việc gửi mail thông qua IdSMTP

 

 

Uses

IdSMTPBase, IdSMTP,IdMessage, IdEMailAddress,IdMessageClient

 

procedure SendMail();

var

msg: TIdMessage;

recipients: TIdEMailAddressList;

begin

try

msg := TIdMessage.Create(nil);

recipients := TIdEMailAddressList.Create(nil);

try

IdSMTP1.Host := edtMailServer.Text;

IdSMTP1.Username := edtUser.Text;

IdSMTP1.Password := edtPassword.Text;

IdSMTP1.Port := StrToInt(edtPort.Text);

msg.Sender.Address := edtSender.Text;

msg.Subject := edtSubject.Text;

recipients.EMailAddresses := mmoRecepient.Text;

msg.Recipients.AddItems(recipients);

msg.Body.Append(mmoBody.Text + chr(13));

IdSMTP1.Connect;

IdSMTP1.Send(msg);

IdSMTP1.Disconnect(false);

finally

msg.Free;

recipients.Free;

end;

except

on ex: Exception do mmoLog.Lines.Add(ex.Message);

end;

 

end;

 

 

File INI trong lập trình Delphi

Như chúng ta đã biết, dạng tập tin lưu thông tin cấu hình chương trình được sử dụng rất rộng rãi trước khi XML ra đời đó là *.INI.

Với tôi vẫn trung thành với dạng tập tin lưu trữ cấu hình này hơn là *.XML. Với Delphi thật đơn giản để thao tác với loại tập tin này thông quan Unit IniFiles, với Delphi XE hoặc XE2 trở lên thì sử dụng System.IniFiles

Một tập tin *.INI được chia làm 2 phần:

Ví dụ tập tin *.INI

[Cấu hình máy chủ]

Server = .

 Database  = MS

  • Phần nằm trong dâu [] gọi là Session
  • Phần nằm ngoài gọi là Ident

vậy tôi có hàm lưu thông tin vào file *.INI như sau:

Procedure WriteSettingIni(session, ident, value: string);

var

appINI : TIniFile;

begin

try

appINI := TIniFile.Create(ChangeFileExt(Application.ExeName,’.ini’)) ;

try

appINI.WriteString(session,ident, value);

finally

appIni.Free;

end;

except

on ex: Exception do

ShowMessage(ex.Message);

end;

end;

Tương tự tôi có hàm đọc file *.ini như sau

Procedure ReadSettingIni(session, ident: string; var Value: string); var    appINI : TIniFile;    LastUser : string;    LastDate : TDateTime;  begin    appINI := TIniFile.Create(ChangeFileExt(Application.ExeName,’.ini’)) ;    try      Value :=  appINI.ReadString(session,ident,”);    finally      appINI.Free;    end; end;

 

Chúc các bạn thành công và vui vẻ với file *.ini

Thêm số thứ tự trong TDBGrid

Đôi khi chúng ta muốn thể hiện số thứ tự của các dòng trên TDBGrid, tuy nhiên hiện tại TDBGrid trên tất cả các phiên bản của Delphi chưa cho phép chúng ta thực hiện điều này.

Chúng ta có thể thực hiện việc vẽ riêng Column này trên DBGrid bằng tay

Trên DBGrid thêm một có Caption là STT

Tiếp theo trong Event DrawColumnCell thêm dòng

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;   DataCol: Integer; Column: TColumn; State: TGridDrawState);

begin   if DataSource1.DataSet.RecNo > 0 then

begin     if Column.Title.Caption = ‘STT’ then

DBGrid1.Canvas.TextOut(Rect.Left + 2, Rect.Top, IntToStr(DataSource1.DataSet.RecNo));

end;

end;

 

Và kết quả như sau:

Chúc các bạn thành công 🙂

Thiết lập cấu hình cho phép truy cập SQL Server từ máy trạm

Khi cài đặt Microsoft SQL server chúng ta không thể kết nối với database từ máy trạm. Để cho phép việc truy xuất từ máy trạm chúng ta sử dụng công cụ SQL Server Configuration Manager

Chọn “SQL Server Network Configuration”

Double Click vào TCP/IP và Named Pipes sau đó Enable hai dịch vụ này

Sau khi cấu hình hoàn tất, restart lại Database