17 Maret 2009

Extended Stored Procedure Buatan Sendiri dengan Delphi

Sebelumnya kita tahu dan mengenal extended stored procedure yang sudah ada di SQL Server. Bagaimana jika kita ingin membuat sendiri, apa harus pake bahasa C untuk membuatnya? Ternyata pake Delphi juga bisa. Yang kita butuhkan adalah unit MsOdsApi.pas yang merupakan translasi dari C-header dari Microsoft Open Data Services API (opends60.dll). File ini bisa didapatkan dari internet (cari di google dengan kata kunci “MsOdsApi”) atau bisa minta saya kok, nanti saya kasih, gratis tis tis.
Selanjutnya tinggal masukkan unit ini ke project dll yang dibuat. Misalnya kita ingin membuat procedure sendiri dengan 2 parameter (integer dan varchar) dengan output 2 kolom (integer dan varchar). Procedure ini akan mencetak nomor baris dan sebanyak . Nih dia source-nya…
procedure xp_print(aSrvProc: SRV_PROC); cdecl;
var
  i, count: Integer;
  tipe: Byte;
  fnull: Bool;
  buf: array [1..255] of Char;
  maxlen, actlen: ULONG;
  s: PChar;
  st: string;
begin
  count := 0;
  st := '';
  FillChar(buf, SizeOf(buf), #0);
  if srv_rpcparams(aSrvProc) = 2 then // jumlah parameter yg kita berikan harus 2
  begin
    srv_paraminfo(aSrvProc, 1, @tipe, // input parameter pertama
      @maxlen, @actlen,
      @count, @fnull); // dengan tipe int
    srv_paraminfo(aSrvProc, 2, @tipe, // input parameter kedua
      @maxlen, @actlen,
      @buf, @fnull); // dengan tipe varchar
    st := buf;
  end;
  // 2 kolom tipe int dan varchar
  srv_describe(aSrvProc, 1, 'No.', SRV_NULLTERM, SRVINTN, SizeOf(Integer), SRVINTN, SizeOf(Integer), nil);
  srv_describe(aSrvProc, 2, 'Print', SRV_NULLTERM, SRVVARCHAR, 100, SRVVARCHAR, 100, nil);

  s := PChar(st);
  for i := 1 to count do
  begin
    srv_setcoldata(aSrvProc, 1, @i); // simpan data pertama
    srv_setcoldata(aSrvProc, 2, s); // simpan data kedua
    srv_sendrow(aSrvProc); // kirim baris ini ke client
  end;
  // kirim pesan selesai ke client
  srv_senddone(aSrvProc, (SRV_DONE_COUNT or SRV_DONE_MORE), 0, count);
end;

Selanjutnya register procedure dan dll yang dibuat dan jalankan procedure ini. Untuk keterangan lebih lanjut fungsi-fungsi yang dipakai (srv_rpcparams, srv_paraminfo, dan lainnya) bisa baca Books Online SQL Server. Jika kita menjalankan procedure ini: xp_print 5, ‘Tes 123’, maka hasilnya adalah sebagai berikut.

Tidak ada komentar:

Posting Komentar