Kamis, 18 Agustus 2011

Ping IP dengan Delphi II

Ping IP dengan Delphi II

Pada artikel yang saya bahas sebelumnya (ping IP dengan Delphi) mempunyai kelemahan jika koneksi yang terhubung menggunakan jaringan radio maupun speedy alias bisa berfungsi dengan baik jika terhubung dalam sebuah jaringan lokal. Akhirnya saya coba cari-cari lagi, ternyata delphi sudah menyediakan komponen tersendiri untuk melakukan tugas semacam ini dengan bantuan komponen IdIcmpClient keluarga dari Indy Client. Kita langsung saja bahas aplikasi sederhana saja ya..

Pertama sediakan beberapa komponen diantaranya:
1. IdIcmpClient1  properties name ICMP
2. Memo1 properties name lstReplies
3. Timer1
4. Button1
5. Button2

source code lengkapnya ada sebagai berikit:

/////.....................................................................................
var
  Form1: TForm1;
  ipserver:string;

type
    EidSocketError=class(Exception);
    EFopenError=class(Exception);

implementation

{$R *.dfm}

procedure TForm1.ICMPReplyinduk(ASender: TComponent;
  const ReplyStatus: TReplyStatus);
var
  sTime: string;
begin
  if (ReplyStatus.MsRoundTripTime = 0) then
    sTime := '<1'
  else
    sTime := '=';
    ipserver:=Format('%s', [ReplyStatus.FromIpAddress]);
    if ipserver='127.0.0.1' then
      begin
        lstReplies.Items.Add(Format('Koneksi 127.0.0.1 Lancar: bytes=%d time%s%d ms TTL=%d',
        [ReplyStatus.BytesReceived,
        sTime,
        ReplyStatus.TimeToLive,
        ReplyStatus.MsRoundTripTime]));
      end
    else
      begin
        lstReplies.Items.Add(Format('Koneksi 127.0.0.1 Lemah: bytes=%d time%s%d ms TTL=%d',
        [ReplyStatus.BytesReceived,
        sTime,
        ReplyStatus.TimeToLive,
        ReplyStatus.MsRoundTripTime]));
      end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  try
    ICMP.OnReply := ICMPReplyinduk;
    ICMP.ReceiveTimeout := 1000;
    ICMP.Host :='127.0.0.1' ;
    ICMP.Ping;
    Application.ProcessMessages;
  except
    begin
      lstReplies.Items.Add('Tidak bisa terhubung ke jaringan');
    end;
  end;
end;

procedure TForm1.btncekClick(Sender: TObject);
begin
  if btncek.Caption ='Cek Koneksi' then
    begin
      btncek.Caption:='Stop';
      timer1.Enabled:=true;
    end
  else
  if btncek.Caption ='Stop' then
    begin
      btncek.Caption:='Cek Koneksi';
      timer1.Enabled:=false;
      lstReplies.Clear;
    end;
end;

procedure TForm1.btnexitClick(Sender: TObject);
begin
  application.Terminate ;
end;
/////.....................................................................................

Monggo dicoba semoga bermanfaat...

Sabtu, 28 Mei 2011

Ping IP dengan Delphi

Ping IP dengan Delphi

       Setelah kemaren kita belajar cara mengambil informasi yang didapatkan dari perintah yang kita ketikkan di command prompt, Sekarang saya coba membagi hasil temuan saya didunia maya, yaitu cara melakukan cek koneksi ke nomor IP tertentu dalam suatu jaringan. Seperti halnya di command prompt jika kita ingin mengetahui komputer dengan nomor IP tertentu tersambung dengan jariangan komputer kita kettikkan "ping nomor_IP' dicommand prompt. Pada kesempatan kali ini kita coba akab belajar cara melakukan ping nomor IP tertentu dalam sebuah jaringan dengan program Visual yaitu dengan Delphi tidak lagi dengan mengetikkan perintah di DOS.
      Pertama siapkan beberapa komponen diantaranya :
1. Button,
2. Edit
3. Timer
4. Label
     dengan tampilan program sebagai contoh seperti ini:
     Sekarang kita kettikan subroutin program seperti dibawah ini:

unit UContoh;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, WinSock, StdCtrls, ExtCtrls, WinSkinData, SUIForm;

type
  TForm1 = class(TForm)
    suiForm1: TsuiForm;
    Label1: TLabel;
    Label2: TLabel;
    Bevel1: TBevel;
    Memo1: TMemo;
    Edit1: TEdit;
    Button2: TButton;
    Timer1: TTimer;
    procedure Button2Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type
  IPINFO = record
  Ttl     :char;
  Tos     :char;
  IPFlags :char;
  OptSize :char;
  Options :^char;
end;

type
  ICMPECHO = record
  Source  :longint;
  Status  :longint;
  RTTime  :longint;
  DataSize:Shortint;
  Reserved:Shortint;
  pData   :^variant;
  i_ipinfo:IPINFO;
end;

TIcmpCreateFile = function():integer; {$IFDEF WIN32} stdcall; {$ENDIF}
TIcmpCloseHandle = procedure(var handle:integer);{$IFDEF WIN32} stdcall; {$ENDIF}
TIcmpSendEcho = function(var handle:integer; endereco:DWORD; buffer:variant; tam:WORD; IP:IPINFO; ICMP:ICMPECHO; tamicmp:DWORD; tempo:DWORD):DWORD;{$IFDEF WIN32} stdcall; {$ENDIF}


var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
begin
    Close;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
wsadt     : wsadata;
icmp      : icmpecho;
HNDicmp   : integer;
Host      : PHostEnt;
Destino   : in_addr;
IP        : ipinfo;
Retorno   : integer;
x         : integer;

IcmpCreateFile  : TIcmpCreateFile;
IcmpCloseHandle : TIcmpCloseHandle;
IcmpSendEcho    : TIcmpSendEcho;

begin

Memo1.Clear;

if (edit1.Text = '') then
  begin
      edit1.Text:='localhost';
  exit;
  end;  


HNDicmp := LoadLibrary('ICMP.DLL');

if (HNDicmp <> 0) then
  begin

  @IcmpCreateFile := GetProcAddress(HNDicmp,'IcmpCreateFile');
  @IcmpCloseHandle := GetProcAddress(HNDicmp,'IcmpCloseHandle');
  @IcmpSendEcho := GetProcAddress(HNDicmp,'IcmpSendEcho');

  if (@IcmpCreateFile=nil) or (@IcmpCloseHandle=nil) or (@IcmpSendEcho=nil) then
    begin

    Application.MessageBox('Error getting ICMP Adress','error', MB_OK);
    FreeLibrary(HNDicmp);

    end;

  end;

Retorno := WSAStartup($0101,wsadt);

if (Retorno <> 0) then
  begin

  Application.MessageBox('Can´t Load WinSockets','WSAStartup', MB_OK);
  WSACleanup();
  FreeLibrary(HNDicmp);

  end;

Destino.S_addr := inet_addr(Pchar(Edit1.text));

if (Destino.S_addr = 0) then
  Host := GetHostbyName(PChar(Edit1.text))
else
  Host := GetHostbyAddr(@Destino,sizeof(in_addr), AF_INET);

if (host = nil) then
  begin
  memo1.Clear;
  //MessageDlg('IP yang anda maksudkan tidak diketemukan...',mtInformation,[mbOK],0);
  memo1.Lines.Add('Tidak bisa koneksi ke '+ edit1.Text );
  memo1.Lines.Add('Tidak bisa koneksi ke '+ edit1.Text );
  memo1.Lines.Add('Tidak bisa koneksi ke '+ edit1.Text );
  memo1.Lines.Add('Tidak bisa koneksi ke '+ edit1.Text );
  memo1.Lines.Add('Tidak bisa koneksi ke '+ edit1.Text );
  WSACleanup();
  FreeLibrary(HNDicmp);
  exit;

  end;

for x:= 0 to 4 do
  begin
    Ip.Ttl := char(255);
    Ip.Tos := char(0);
    Ip.IPFlags := char(0);
    Ip.OptSize := char(0);
    Ip.Options := nil;
    Destino.S_addr := icmp.source;
    if (edit1.Text = '') then
      Memo1.Lines.Add('Cek Koneksi IP localhost Lancar')
    else
      Memo1.Lines.Add('Cek Koneksi IP ' + Edit1.text + ' Lancar');
  end;

FreeLibrary(HNDicmp);
WSACleanup();
end;

end.
  
          Sekarang rekan-rekan bisa mencobanya semoga bermanfaat.
Share/Bookmark

Sabtu, 14 Mei 2011

Command Prompt di delphi

Command Prompt di delphi            

             Pada tutorial singkat ini saya coba bagi-bagi sedikit info. Masih berhubngan dengan delphi. Pada contoh program ini saya bikin aplikasi command prompt di visual Delphi. Sederhananya saya hanya mengambil informasi yang dihasilkan perintah dalam DOS. Misal kita ketik help di command prompt maka akan di hasilkan perintah-perintah help di layar command prompt... Nah perintah-perintah itu yang nantinya ditampilkan didelphi dengan bantuan komponen Memo. Bingung? Apa yang mau diketik lagi, langsung aja deh saya sertakan routinnya..
             Pertama siapkan beberapa komponen diantarnya:

1. Button
2. Edit
3. Memo

         Ini routin lengkapnya :
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids, DB, ZAbstractRODataset, ZAbstractDataset,
  ZDataset, ZConnection, StdCtrls, ExtCtrls, SUIForm, SUITitleBar, DBCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Button2: TButton;
    function GetDosOutput(CommandLine: string; Work: string = 'C:\'): string;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

function TForm1.GetDosOutput(CommandLine, Work: string): string;
var
  SA: TSecurityAttributes;
  SI: TStartupInfo;
  PI: TProcessInformation;
  StdOutPipeRead, StdOutPipeWrite: THandle;
  WasOK: Boolean;
  Buffer: array[0..255] of AnsiChar;
  BytesRead: Cardinal;
  WorkDir: string;
  Handlee: Boolean;
begin
  Result := '';
  with SA do begin
    nLength := SizeOf(SA);
    bInheritHandle := True;
    lpSecurityDescriptor := nil;
  end;
  CreatePipe(StdOutPipeRead, StdOutPipeWrite, @SA, 0);
  try
    with SI do
    begin
      FillChar(SI, SizeOf(SI), 0);
      cb := SizeOf(SI);
      dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
      wShowWindow := SW_HIDE;
      hStdInput := GetStdHandle(STD_INPUT_HANDLE); // don't redirect stdin
      hStdOutput := StdOutPipeWrite;
      hStdError := StdOutPipeWrite;
    end;
    WorkDir := Work;
    Handlee := CreateProcess(nil, PChar('cmd.exe /C ' + CommandLine),
                            nil, nil, True, 0, nil,
                            PChar(WorkDir), SI, PI);
    CloseHandle(StdOutPipeWrite);
    if Handlee then
      try
        repeat
          WasOK := ReadFile(StdOutPipeRead, Buffer, 255, BytesRead, nil);
          if BytesRead > 0 then
          begin
            Buffer[BytesRead] := #0;
            Result := Result + Buffer;
          end;
        until not WasOK or (BytesRead = 0);
        WaitForSingleObject(PI.hProcess, INFINITE);
      finally
        CloseHandle(PI.hThread);
        CloseHandle(PI.hProcess);
      end;
  finally
    CloseHandle(StdOutPipeRead);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
     memo1.Text:=GetDosOutput(edit1.text);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
     close;
end;

end.

Nah ini dia hasilnya..


           Tutorial nanti yang akan saya posting gimana caranya bikin aplikasi PING IP dalam suatu jaringan, sehingga kita bisa tahu IP tersebut terkoneksi dalam jaringan..

Share/Bookmark

Jumat, 14 Januari 2011

Analisa Plant Berdasarkan Uji Bump Test

Analisa Karakteristik Plant Berdasarkan Informasi Hasil Uji Bump Test
Dalam semuai kasus pengontrolan plant industri, permasalahan utama yang cukup sulit dihadapi oleh semua praktisi salah satunya analisis plant yang di hadapi. Pengendalian dapat dilakukan setelah kita benar-benar mengerti karakteristik plant yang dihadapi sehingga kita dapat melakukan parameter-parameter kontrol yang dipakai.
Salah satu metode yang digunakan untuk menentukan model kontrol proses yaitu dengan melakukan penurunan hokum fisika terhadap plant yang kita hadapi. Namun hal ini relatif sangat sulit untuk dilakukan dalam banyak kasus. Metode yang paling mudah dilakukan yaitu dengan melakukan uji bump-test. Uji eksperimen ini dilakukan dengan membawa parameter yang diuji kedalam nilai titik terjenuh dengan jalan memberikan sinyal kontrol tertentu secara mendadak oleh operator. Model PID komersial umumnya menyediakan minimal dua mode pengontrolan yang dapat digunakan secara bebas oleh operator, yaitu mode manual dan mode auto. Mode manual adalah mode pengendalian dengan menggunakan prinsip kalang terbuka atau open loop yang mana mode pengendaliannnya dilakukan secara manual dengan memberikan sinyal kontrol oleh operator. Sedangkan mode auto merupakan mode pengendalian yang menggunakan prinsip close loop dimana kontroller bekerja berdasarkan error yang terukur.
Model self regulating process adalah model yang paling umum dijumpai di industri proses. Model ini hampir muncul pada setiap kasus pengotrolan praktis, seperti pengontrolan temperatur pada sistem heat exchanger,dan pengotrolan level fluida pada system tangki penampung. Model self regulating process pada dasarnya dapat didekati oleh sebuah model matematis FOPDT (First Order Plus Ded Time ) yang hanya dicirikan
oleh tiga buah parameter sebagai berikut:
· Process transport delay (delay atau keterlambatan transportasi proses) - L
· Process time constant (konstanta waktu proses)- T
· Process static gain (penguatan tetap proses) - K
Ketiga parameter yang menggambarkan dinamika proses, secara praktis dapat diperoleh atau diidentifikasi melalui eksperimen sederhana BumpTest atau sinyal tangga secara open loop pada mode kontrol manual (lihat Gambar 1 ).
Gambar 1 Percobaan BumpTest pada kontrol manual

Secara teknis percobaan Bump Test dilakukan dengan cara memberi perubahan tangga (step) sinyal output kontroler (CO) oleh operator pada saat proses mengalami keadaan steady (menetap) disekitar titik kerja nominalnya. Gambar 2. menunjukan hasil percobaan BumpTest.

Proses ini dapat didekati oleh sebuah model matematis FOFDT (First Order Plus Dead Time) yang dicirikan oleh 3 parameter yaitu L (Transport Delay=keterlambatan transportasi proses), T (Time Constant=konstanta waktu proses) dan K (Gain Static=Penguatan).
Untuk mendapatkan ketiga parameter ini biasanya dilakukan eksperimen bump test yang dilakukan dengan memeberikan sinyal tangga CO secara open loop pada mode manual. Eksperimen ini dilakukan pada saat proses telah mengalami keadaan steady disekitar titik kerja nominalnya dan respon variable output (PV) ini yang direkam dan dianalisis. Sebagai contoh bisa dilihat di bawah ini hasil grafik pengukuran eksperimen Bump Test.
Dari gambar 2 grafik diatas dicari parameter-parameter proses FOPDT sebagai berikut:
  • Keterlambatan transportasi proses (L) =, waktu yang terjadi pada proses yang dihitung sejak terjadi perubahan tangga pada CO sampai variabel proses (PV) yang dikontrol mulai menanggapi perubahan input CO.

  • Konstanta waktu (T) = Waktu yang di perlukan sehingga nilai PV mencapai kurang lebih 63 % dari keadaan steady akhir setelah waktu tunda.

  • Gain Statis Proses (K) = Perbandingan perubahan PV terhadap perubahan CO dalam keadaan steadynya. Gain statis bisa bernilai positif maupun negative tergantung jenis control valve yang di gunakan.


Prosedur Eksperimen Bump Test yaitu di antaranya pastikan terlebih dahulu kontroler berada pada mode manual dan PV berada pada disekitar level operasi atau titik kerja yang diharapkan yaitu dengan terlebih dahulu mensetting CO sedemikian rupa sehingga output PV berada disekitar nilai terharap (set point)dan pastikan output proses dalam keadaan steady tertentu. Selama melakukan uji coba dipastikan tidak terjadi perubahan beban atau gangguan. Selain itu ubah output controller dari nilai steady sebelumnya menjadi nilai step yang baru secara mendadak (CO umumnya antara 5 %-10%).
Dari hasil uji Bumptest diatas maka dapat dilakukan tuning parameter kontrol PID sesuai dengan metode yang akan digunakaan sehingga parameter Kp, Ki dan Td dapat dicari dan ditunning pada controler kita.

Share/Bookmark


Rabu, 17 November 2010

Kontrol PI

Kontrol PI        

         Suatu pengontrol proporsional yang memberikan aksi kontrol proporsional dengan error akan mengakibatkan efek pada pengurangan rise time dan menimbulkan kesalahan keadaan tunak (offset). Suatu pengontrol integral yang memberikan aksi kontrol sebanding dengan jumlah kesalahan akan mengakibatkan efek yang baik dalam mengurangi kesalahan keadaan tunak tetapi dapat mengakibatkan respon transien yang memburuk. Pengetahuan tentang efek yang diakibatkan oleh masing-masing pengontrol tersebut yang nantinya akan digunakan dalam penentuan nilai-nilai penguatan proporsional (Kp) dan integral (Ki). Tabel basis pengetahuan hubungan antara penguatan dan efeknya pada pengontrol PI diperlihatkan pada Tabel 1 dibawah ini.

Tabel 1 Efek dari pengontrol P dan I.

Penguatan Rise time Overshoot Setling time offset
Kp menurun meningkat perubahan kecil terjadi
Ki menurun meningkat meningkat menghilangkan

Gabungan aksi kontrol proporsional dan aksi kontrol integral membentuk aksi kontrol proporsional plus integral ( controller PI ). Gabungan aksi ini mempunyai keunggulan dibandingkan dengan masing-masing penyusunnya. Keunggulan utamanya adalah diperolehnya keuntungan dari masing-masing aksi kontrol dan kekurangan aksi kontrol yang satu dapat diatasi. Dengan kata lain elemen-elemen controller P dan I secara keseluruhan bertujuan untuk mempercepat reaksi sebuah sistem dan menghilangkan offset.
Dalam waktu kontinyu, sinyal keluaran pengendali PI dapat dirumuskan sebagai berikut.


dengan
Co = sinyal keluaran pengendali PI.
Kp = konstanta proporsional.

Ti = waktu integral.
Ki = konstanta integral.
e(t) = sinyal kesalahan.
e(t) = referensi – keluaran plant).

Diagram blok pengendali PI dapat dilihat pada Gambar 1.


Gambar 1 Diagram blok pengendali PI.

Pengolahan parameter-parameter PI menjadi konstanta-konstanta pengendalian secara diskrit sesuai dengan penjelasan perhitungan berikut. Berdasarkan persamaan 2.1 dengan menggunakan Transformasi Laplace, didapatkan persamaan PI dalam kawasan S sebagai berikut.

Persamaan ini diubah kembali ke kawasan waktu, sehingga menjadi :
Untuk mengubah persamaan diatas ke dalam bentuk diskrit, digunakan persamaan backward difference, di mana :
Sehingga persamaannya menjadi:

Persamaan ini  menunjukkan persamaan pengendali PI dalam bentuk diskrit. Dari persamaan ini dapat diketahui bahwa pengendali PI menggunakan konstanta-konstanta pengendalian sebagai berikut :

dengan

          Penalaan pada pengontrol PI adalah penentuan besaran penguatan-penguatan P dan I sehingga diperoleh karakteristik sistem yang baik. Ada beberapa cara penalaan kontroler PI diantaranya yaitu metode relay feedback Ziegler-Nichols, manual (hand-tuning/trial-error), metode analitik dengan optimasi, penempatan pole (pole placement), atau swatala (auto tuning).

Artikel terkait:
- Pengendali Proporsionl
-  Pengendali Integral
 


Share/Bookmark

Jumat, 12 November 2010

Elektronika Dasar

Elektronika Dasar
Elektronika merupakan cabang ilmu yang mempelajari kelistrikan arus lemah yang dioperasikan dengan cara mengontrol aliran electron atau partikel bermuatan listrik di dalam ruang hampa atau gas dan aliran electron serta lubang didalam semikonduktor. Ilmu yang mempelajari alat-alat seperti ini merupakan cabang dari ilmu fisika, sementara bentuk desain dan pembuatan sirkuit elektroniknya adalah bagian dari teknik elektro, teknik komputer, dan ilmu/teknik Instrumentasi dan elektronika. Sedang peralatan elektronik (electronic devices) merupakan alat-alat yang menggunakan dasar kerja elektronika.
Kode Huruf, Kode Angka dan Kode Warna

Untuk menuliskan angka yang besar-besar misalnya jutaan, puluhan juta dan juga menuliskan angka yang sangat kecil seperseribu, sepersepuluh juta dan sebagainya akan makan tempat. Terutama penulisan di atas komponen yang kecil-kecil. Besaran-besaran tersebut sangat sulit untuk dibaca. Untuk mempersingkat, maka orang mengunakan istilah­-istilah yang ringkas dan sekalian kode­kodenya yang berupa huruf.
GIGA (G) = 1.000.000.000
MEGA (M) = 1.000.000
KILO (K) = 1.000
MILLI (m) = 0,001
MIKRO (μ) = 0,000 001
NANO (n) = 0,000 000 001
PIKO (p) = 0,000 000 000 001

Dengan kode­-kode huruf itu kita dapat menuliskan angka-­angka panjang menjadi ringkas dan praktis untuk dituliskan di atas komponen terutama yang kecil­kecil, misalnya 1.000.000.000 Cycle cukup ditulis 1Mc, 0,000 000 000 001 Farrad cukup ditlis dengan 1pF dan sebagainya.
Untuk angka­-angka pecahan dalam teknik radio biasa digunakan pecahan desimal, ialah dengan tanda baca koma, misalnya satu setengah dituliskan sebagai 1,5 dan sebagainya. Dalam teknik radio tanda baca koma tersebut diganti dengan huruf singkatan besarannya, misalnya 1,5 kilo ditulis 1K5, 5,6 kilo dituliskan 5K6 dan sebagainya. Cara tersebut menguntungkan terutama untuk penulisan pada komponen yang demensinya kecil sehingga tanda baca koma sukar dilihat dan juga dapat dengan mudah terhapus.
Disamping kode huruf, untuk mempersingkat penulisan, dalam teknik radio dikenal juga kode­kode angka. Kode angka ini digunakan untuk menggantikan sejumlah angka nol, misalnya untuk menyingkat angka 1.200.000 dituliskan sebagai 125. Angka yang terakhir, ialah angka lima menggantikan sejumlah angka nol yang ada di belakang angka 12. Cara penulisan semacam ini akan dipergunakan pada kode warna.
Yang diuraikan di atas adalah penggunaan kode angka 3 digit. Kode angka dapat juga dituliskan dengan 4 digit, misalnya menuliskan angka 124.000 dapat ditulis dengan 4 digit, menjadi 1243. Sistem 4 digit ini banyak digunakan pada resistor dengan toleransi 1%. Penulisan tidak dilakukan dengan angka tetapi dengan kode­kode warna.
Angka dapat duwujudkan dalam bentuk kode warna, kode ini dapat berbentuk gelang warna ataupun berupa bundaran yang berjajar. Adapun kode warna itu adalah sebagai berikut ini.
0 = Hitam
1 = Cokelat
2 = Merah
3 = Orange
4 = Kuning
5 = Hijau
6 = Biru
7 = Ungu
8 = Abu­-abu
9 = Putih
Penggunaan kode warna ini sangat menguntungkan terutama untuk komponen yang kecil­-kecil karena dengan gelang­-gelang warna, angka menjadi mudah terlihat dan tidak mudah terhapus.



Share/Bookmark

Koneksi SQL Server di Delphi

Pada Kesempatan kali ini saya mencoba berbagi pengetahuan bagaimana caranya menghubungkan database SQL Server 5.1 di Delphi. Pertama kali yang akan kita buat adalah Datasource database melalui menu ODBC yaitu kita masuk ke Control Panel -> Administrative Tools dan pilih ODBC sehingga akan tampil menu seperti di bawah ini:

Langkah selanjutnya Pilih tombol Add dan pilih provider yang kita gunakan. Karena kita menggunakan SQL Server 5.1 dan Connector yang kita gunakan MySql Connector versi 5.1 maka pilihlah MySql ODBC 5.1 Driver seperti tampak pada gambar di bawah ini:


Selanjutnya pilih Finish dan masukkan Paramater yang berhungan dengan database yang kita buat seperti tampak pada gambar di bawah ini:

Dari sini tinggal giliran kita masuk ke Delphinya dan komponen yang kita butuhkan diantaranya ADOConnection, beberapa Textbox, Label dan button, aturlah seperti gambar dibawah ini

Sorce code sederhananya bisa dilihat seperti di bawah ini:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB, DBXpress, SqlExpr, DBTables, Grids, Mask;

type
TForm1 = class(TForm)
txtserver: TEdit;
txtusr: TEdit;
txtpsw: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Button1: TButton;
Button2: TButton;
txtdb: TEdit;
Label4: TLabel;
ADOConnection1: TADOConnection;
txtport: TEdit;
Label5: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
//tutup koneksi saat ini
if adoconnection1.Connected then
begin
adoconnection1.Close;
adoconnection1.ConnectionString := '';
end;
//test koneksi
adoconnection1.ConnectionString := 'DSN=db;DESCRIPTION=db'+
';SERVER=' + txtserver.Text +
';UID='+ txtusr.Text +
';PWD='+ txtpsw.Text +
';DATABASE='+ txtdb.Text +
';PORT='+ txtport.Text ;
screen.Cursor := crhourglass;
try adoconnection1.Open ;
//koneksi berhasil
screen.Cursor := crdefault;
messagedlg('Koneksi Berhasil !' , mtinformation, [mbok],0);
except
on E:exception do
begin
//koneksi gagal
screen.Cursor := crdefault;
adoconnection1.Close;
messagedlg('koneksi gagal ! ', mtinformation, [mbok],0);
end;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
form1.Close ;
end;

end.

Nah... sampai disini aku mau mencoba menampilkan isi dari tabel dari databases sql yang aku bikin. Aqu tinggal menambahkan beberapa komponen saja. Komponen yang di perlukan:
1. Datasource dari pallete DataAccess
2. AdoQuery dari pallete ADO
3. DbGrid dari menu DataControls
4. Button
5. Edit

Atur Form seperti gambar di bawah ini:


Nah untuk listing program lengkapnya sepert dibawah ini;

unit Unit2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ADODB, DB, Grids, DBGrids, StdCtrls, Buttons, ExtCtrls;

type
TForm2 = class(TForm)
BitBtn1: TBitBtn;
Edit1: TEdit;
DBGrid1: TDBGrid;
procedure FormCreate(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation
uses Unit1;

{$R *.dfm}

procedure TForm2.FormCreate(Sender: TObject);
begin
form1.Hide ;
DataSource1.DataSet := adoquery1;
dbgrid1.DataSource := DataSource1;
end;

procedure TForm2.BitBtn1Click(Sender: TObject);
begin
try
with ADOQuery1 do begin
connection := form1.ADOConnection1;
Active:= true;
close;
SQL.Clear;
sql.Add(edit1.Text);
Open;
end;

except
application.MessageBox ('Sql Command anda salah',' Error');
end;

end;

end.

Artikel Terkait :
- Koneksi Query SQL Delphi dengan Zeoz Lib
- Lazzarus Platform delphi yang gratisan

Share/Bookmark

Twitter Delicious Facebook Digg Stumbleupon Favorites More