Sabtu, 20 November 2010

Cursor for SQL Server

Sesuai dengan judulnya diatas, penulis ingin berbagi sedikit pengetahuan dalam pembuatann Cursor yang banyak dipergunakan untuk mempermudah pemrosesan data dalam SQL Server database.

Sebagaimana layaknya bahasa pemrograman seperti C#, Delphi, Visual Basic atau lainnya tentunya tidak lepas dari proses perulangan, entah itu dengan menggunakan for, while atau apalah yang tujuan utamanya adalah untuk melakukan suatu proses perulangan dalam aplikasi yang kita buat.

tidak terlepas pula dengan Sql Server juga memiliki fasilitas ini yang salah satunya bisa pula diterapkan dalam storeprocedure yang biasa penulis lakukan tentunya hehehe.

untuk contoh sederhana mungkin akan penulis buatkan contoh sebagai berikut:

kita memiliki 2 buah tabel yaitu tabel master dan tabel detail, yang didalam tabel detail memiliki file perhitungan yang jumlah perhitungan dalam masing-masing recordnya akan diakumulasikan dan diupdate kedalam tabel master .

Sebelumnya kita coba untuk membuat 2 buah tabel sederhana berikut:

CREATE TABLE [dbo].[tbmaster](
          [NOBUKTI] [char](20) NOT NULL,
          [JUMLAH] [numeric](18, 2) NULL DEFAULT (0))
CONSTRAINT [PK_tbmaster] PRIMARY KEY CLUSTERED
([NOBUKTI] ASC)ON [PRIMARY])

CREATE TABLE [dbo].[tbdetail](
          [ID] [numeric](18, 0) IDENTITY(1,1) NOT NULL, [kdbarang] [char](20) NOT DEFAULT(''),
          [QTY] [uang] [numeric](18, 2) NULL DEFAULT (0),
          [HARGA] [uang] [numeric](18, 2) NULL DEFAULT (0))
CONSTRAINT [PK_tbdetail] PRIMARY KEY CLUSTERED
([ID] ASC)ON [PRIMARY])

Untuk mempermudah pemrosesan data silahkan isikan terlebih dahulu data-data untuk kedua buah tabel tersebut sebanyak-banyaknya, akan tetapi saya anjurkan agar membuat data-data didalam 2 buah tabel ini saling berhubungan dengan dihubungkan dari NoBukti.

Selanjutnya sesuai dengan topik bahasan diatas yaitu cursor, penulis ingin mencoba memberikan contoh sederhana , mengikuti tabel diatas penulis menginginkan bahwa field jumlah di tabel tbMaster akan terupdate dari nilai perkalian dari field Qty dan field Harga yang ada ditabel tbdetail. untuk itu kita coba membuat store procedure sederhana berikut :

create procedure [dbo].[spUpdateJumlah]
as
          begin tran
                    declare @nobuk varchar(20),@J numeric(18,0)
                    declare CurHitung cursor for select nobukti from tbmaster order
                    by nobukti
                    open CurHitung
                              fetch next from CurHitung into @nobuk
                              while @@fetch_status = 0
                              begin
                                        select @J = sum(qty*harga) from tbdetai where
                                        nobukti=@nobuk
                                        update tbmaster set jumlah=isNull(@J,0)
                                         where nobukti=@nobuk
                                        fetch next from CurHitung into @nobuk
                              end
                    close CurHitung
                    Deallocate CurHitung

if @@error<>0 goto salah
commit tran
return

Salah:
          rollback tran
          raiserror('Ada Kesalahan ',16,1)
return

Untuk menjalankannya kita cukup ketikkan spUpdateJumlah dan silahkan dieksekusi

dan untuk melihat hasil dr proses store procedure ini kita cukup ketikkan:

                              select * from tbmaster order by nobukti

Namun penulis anjurkan apabila tidak sangat diperlukan hasil perhitungan disimpan sebaiknya kita tidak menambahkan field didalam tabel karena akan membuat kinerja database kita menjadi tidak efektif, bandingkan apabila kita hanya memerlukan nilai jumlah hanya untuk ditampilkan saja dan bukan untuk proses lebih lanjut maka kita tidak memerlukan media simpan/field tambahan seperti diatas, coba kita bandingkan dengan hasil berikut (dalam kasus bahwa data penjumlahan hanya untuk ditampilkan):
select a.nobukti,sum(b.qty * b.harga) as jumlah from tbmaster a, tbdetail b where a.nobukti=b.nobukti group by nobukti

hasilnya sama bukan?, kiranya ini yang dapat penulis contohkan melalui contoh sederhana ini untuk penggunaan "Cursor", dan penulis mohon maaf apabila tulisan ini masih jauh dari sempurna,

Salam..

Selasa, 16 November 2010

Insert and display the icon into the Delphi Grid

Lagi nggak bisa tidur, padahal nanti pagi - pagi mau sholat Idul Adha rencananya, hemmmm enaknya ngapain ya...., dari pada bengong coba melongok ke blog saya ini rasanya sudah lama sekali tidak mengisi blog ini.

Ah... mending bikin artikel ini siapa tahu suatu saat ada teman - teman yang membutuhkan sebagai referensi heheheehhe walaupun tidak seberapa bagus tapi cukuplah untuk bahan oprekan bagi teman-teman yang membutuhkan, sesuai dengan judul diatas sebelumnya penulis pernah mengalami kesulitan dalam menampilkan icon kedalam grid yang kebetulan penulis menggunakan database mysql, dari beberapa kali experimen (caile... kayak prof aja padahal kebetulan aja bisa) akhirnya penulis dapat menyelesaikan masalah tersebut seperti tampilan berikut :

kita langsung aja ya,
yang kita butuhkan tentunya VCL yang mendukung koneksi kedatabase, dalam hal ini penulis menggunakan komponennya Zeos yang bisa didownload dibeberapa situs internet, kemudian setelah koneksikan database melalui komponen zeos, tambahkan komponen ZQuery untuk memfilter data yang akan kita butuhkan untuk ditampilkan kedalam grid.
selanjutnya tambahkan komponen ImageList, komponen Image serta komponen DataGrid.
sebelumnya silahkan buat folder untuk menempatkan file-file icon yang akan kita load nantinya dan disini penulis untuk memudahkan link ke field yang akan ditampilkan digunakan kode yang bersifat primary sebagai contoh tabel berikut :
Nama Tabel tbKurs
Field : kdNgr char(3) Primari key
Rupiah numeric(18,2)
Dolar numeric(18,2)

nah untuk kebutuhan linknya nama file icon penulis samakan dengan nama isi dari field KdNgr.
selanjutnya kita buat procedure untuk mengenali dan menempatkan icon kedalam colom di grid

procedure TForm5.cekbendera;
var nm:string;
begin
       with qKurs do
       begin
           first;
               while not Eof do
                   begin    
                           nm:=trim(Fields[0].Value);
                           Try
                                   image1.Picture.LoadFromFile('D:\delphi\Delphi\Kurs Mandiri\bendera\ICON\'+nm+'.ICO');
                                     ImageList1.AddIcon(Image1.Picture.icon);
                           except
                     End;
                     next;
               end;
         end;
end;


selanjutnya letakkan even DrawColumnCell kedalam Grid dengan kode berikut:
procedure TForm5.Grid1DrawColumnCell(Sender: TObject; const Rect: TRect;
begin
            s:=0;
            with BGrid1 do
            begin
                  if DataCol=0 then
                  begin
                        ImageList1.Draw(Canvas,rect.Left+30, Rect.Top+1,qKurs.Fields[3].value);
                  end;
            end;

end;


Jadi deh... tinggal selanjutnya tinggal kita tentukan kapan nih procedure kita panggil;
bisa pula pada saat even form on Create dengan mengetikkan perintah berikut:

Procedure Form5.FormCreate(Sender: TObject);
begin
      ZQuery.active:=true;
      cekbendera;
end;

Rabu, 20 Oktober 2010

Flash files displays with dephi 2007


iseng-iseng mau coba-coba untuk membuat animasi dalam form dengan delphi, akhirnya pilihan jatuh pada file flash (swf), oprek sana oprek sini nggak nemu nemu juga komponen(VCL) yang pas, ribet-puyeng tiba-tiba jadi ingat gimana kalau coba import component yang ada diwindows siapa tahu bisa hehehehe, akhirnya coba-coba ternyata berhasil dan ternyata nggak begitu sulit juga hehhehe oke kita lanjutkan lagi deh, tapi maaf lo nggak seberapa lengkap tapi cukup mewakili lah untuk artikel ini

langkah-langkah nya yang pertama kita coba import ActiveX untuk Flash, untuk referensi yang lebih lengkap teman-teman dapat merujuk ke alamat ini adapun activeX yang perlu kita import nanti nya adalah shockwaveflash dan pallete sesuai pilihan teman-teman, sebetulnya ada beberapa VCL yang memang telah disediakan untuk menangani flash ini teman-teman mungkin pernah mendengar yang namanya smartFlash yang dapat di unduh disini (kebetulan nemu link hehehe), tapi untuk kali ini kita coba pakai ActiveX yang memang sudah disediakan ya.

Setelah prosedur import activeX diatas kita kerjakan selanjutnya kita tinggal uji coba jalankan file flash(swf) diform delphi, coba kita buat project kecil kemudian dari form yang sekarang aktif, coba kita geser(drag) komponen tshockwaveflash ke dalam form kemudian lanjutkan dengan mengatur properties sesuai selera, sedangkan untuk menampilkan file flash kita coba dengan pengkodean sederhana, coba kita tambahkan kembali sebuah speedbutton kemudian dalam even onclick silahkan isi dengan kode berikut :

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
      ShockwaveFlash1.Movie:=Application.ExeName+'namafileflash.swf'; // sebagai contoh ya
      ShockwaveFlash1.Play;
end;

Sederhana bukan , mudah-mudahan trik sederhana ini dapat memberikan tambahan referensi teman-teman dan mohon maaf kalau artikel ini masih jauh dari sempurna.

Sabtu, 09 Oktober 2010

Import Excell to Access with Delphi

Hari ini dapat telpon dari teman yang kebetulan berada dirantau, kebetulan sahabat saya ini sedang kesulitan dalam mengimport file excell yang dimilikinya ke database lain, pikir-pikir iseng mau coba bikin program import dengan menggunakan delphi.

Sebetulnya tidak terlalu sulit untuk membuat program sederhana ini, penulis mencoba menggunakan koneksi yang menggunakan ODBC sebagai penghubung yang diterapkan melalui metode "ADO nya Delphi".

langkah-langkah yang perlu diterapkan hanyanya membuat 2 buah AdoConnection, yang pertama adalah AdoConnection yang digunakan untuk menghubungkan ke file Excell sedangkan AdoConnection yang kedua digunakan untuk menghubungkan ke database yang kita inginkan, semisal penulis coba dengan menggunakan Access sebagai media untuk koneksi ke dua ini.

selanjutnya kita buat Dua buah AdoQuery, untuk query pertama dihubungkan dengan AdoConnection yang pertama , sedangkan AdoQuery yang kedua dihubungkan ke AdoConnection yang ke dua.

selanjutnya jangan lupa kita tinggal membuat sintax program untuk menjalankan dan mengimport data dari Excell ke database tujuan tersebut, sebagai contoh penulis membuat sintax sederhana sebagai berikut :

with AdoQuery1 do
begin
disablecontrols;close;sql.clear;
sql.add('select * from [Sheet1$] ORDER BY F9');
open;enablecontrols;
end;

with AdoQuery2 do
begin
disablecontrols;close;sql.clear;
sql.add('select * from tabel1 order by Id');
open;enablecontrols;
end;

with AdoQuery1 do
begin
first;
while not eof do
begin
with AdoQuery2 do
begin
Append;
Fields[4].AsString:=trim(AdoQuery1.Fields[4].AsString);
Post;
end;
next;
end;

end;


semoga dengan trik singkat ini dapat membantu teman-teman yang membutuhkan , terimakasih

Rabu, 04 Agustus 2010

Attach Detach Database SQL Server

Beberapa hari ini agak disibukkan dengan bagaimana caranya untuk mengkompress file log database sql server, dari metode Shrink Database, bikin storeprocedure baru , optimalisasi normalisasi tabel sampai tehnik detach - attach database walhasil masih aja kurang memuaskan.

Iseng-iseng untuk mengurangi kebuntuan lanjut dengan membuka facebook siapa tahu ada teman yang bisa diajak sharing atau sekedar cepika cepiki, nah kebetulan deh salah satunya yang kebetulan karena seambrek - abrek pekerjaannya dia jarang OL, beruntung kali ini dia OL siapa lagi kalau bukan sohib saya "bung Yafie Kriwul", setelah ngalor ngidul berbincang-bincang sampai la kami pada topik bahasan yang saya inginkan, trus saya disarankan menggunakan attach - detach database tetapi dengan tehnik store procedure setelah saya coba walhasil sangat mudah dan tidak memerlukan waktu lama, untuk referensi selengkapnya teman-teman bisa merujuk ke Link ini.

Sabtu, 17 Juli 2010

Function Of Numeric With Delphi

Judulnya agak nyentrik buat saya yang cuma memiliki kemampuan berbahasa inggris yes/no hahahha, ketahuan lagi deh..nggak bisa inggrisan, tapi harapan saya sedikit demi sedikit bisa bahasa inggris heheheh.
langsung ke topik pembicaraan "Function Of Numeric With Delphi" yang saya maksudkan disini adalah tidak lain adalah bagaimana kita membuat fungsi terbilang tetapi kali ini kita menggunakan bahasa sintaxnya Delphi sedangkan untuk link resminya delphi teman-teman bisa klik disini .

Fungsi terbilang yang saya buat ini lumayan sudah tua karena pada awal kami buat dahulu masih menggunakan delphi ver 5 bersama sahabat saya "Yafie Anak Kolong" tapi alhamdulillah fungsi ini banyak memberikan manfaat bagi saya dan rekan-rekan, pada kesempatan ini saya akan berikan kode ini kepada teman-teman delphier untuk dapat dikembangkan kembali atau untuk dimanfaatkan atau untuk menambah manfaat bagi teman-teman ya, kalau bagus mohon komentarnya tapi kalau jelek atau ada kemiripan dengan coding teman-teman mohon dimaafkan.

sebagai informasi tambahan fungsi yang kami buat ini telah dapat digunakan dalam 2 format mata uang yaitu indonesia (xxx.xxx,xx) dan inggris (xxx,xxx,xxx.00)

sintax source terbilang :

function Tfutil.konversi(karakter: string):string;
var i,a1,a2,a3 : integer; c,k,c1,c2,huruf : string; d : array [0..8] of char;

function satuan(angka : integer):string;
var kata : string;
begin
case angka of
0 : kata := '';
1 : kata := 'Satu';
2 : kata := 'Dua';
3 : kata := 'Tiga';
4 : kata := 'Empat';
5 : kata := 'Lima';
6 : kata := 'Enam';
7 : kata := 'Tujuh';
8 : kata := 'Delapan';
9 : kata := 'Sembilan';
end;
Result := kata;
end;

function puluhan(angka : integer):string;
var kata : string; a,b :integer;
begin
a := angka div 10;
b := angka - (a*10);
if a > 0 then
begin
if a = 1 then
begin
if b = 0 then
kata := 'Sepuluh'
else if b = 1 then
kata := 'Sebelas'
else
kata := satuan(b) + ' Belas';
end else
begin
kata := satuan(a)+' Puluh '+ satuan(b);
end;
end else
kata := satuan(angka);
Result := kata;
end;

function ratusan(angka : integer):string;
var kata : string; a,b :integer;
begin
a := angka div 100;
b := angka - (a*100);
if a > 0 then
begin
if a = 1 then
begin
kata := 'Seratus ' + puluhan(b)
end else
begin
kata := satuan(a)+' Ratus '+ puluhan(b);
end;
end else
kata := puluhan(angka);
Result := kata;
end;

function ribuan(angka : integer):string;
var kata : string; a,b :integer;
begin
a := angka div 1000;
b := angka - (a*1000);
if a > 0 then
begin
if a = 1 then
begin
kata := 'Seribu ' + ratusan(b)
end else
begin
kata := Ratusan(a)+' Ribu '+ Ratusan(b);
end;
end else
kata := Ratusan(angka);
Result := kata;
end;

function jutaan(angka : integer):string;
var kata : string; a,b :integer;
begin
a := angka div 1000000;
b := angka - (a*1000000);
if a > 0 then
begin
kata := Ratusan(a)+' Juta '+ Ribuan(b)
end else
kata := Ribuan(angka);
Result := kata;
end;

function milyardan(angka : integer):string;
var kata : string;
begin
if angka > 0 then
begin
kata := Ratusan(angka)+' Milyar'
end else
kata := '';
Result := kata;
end;

function trilyunan(angka : integer):string;
var kata : string; a,b :integer;
begin
a := angka div 1000;
b := angka - (a*1000);
if a > 0 then
begin
kata := Ratusan(a)+' Trilyun ' + milyardan(b);
end else
kata := milyardan(angka);
Result := kata;
end;

function koma(angka : string):string;
var kata : string; a,b : integer;
begin
kata := copy(angka,1,1);
a := strtoint(kata);
if a = 0 then
begin
kata := 'Nol'
end else
begin
kata := satuan(a);
end;
a := strtoint(angka);
b := a div 10;
a := a - (b * 10);
kata := kata + ' ' + satuan(a);
result := kata;
end;
begin
a1 := AnsiPos(',',trim(karakter));
a2 := AnsiPos('.',trim(karakter));
if ((a1 <> 0) or (a2<>0)) then
begin
if (a1 > a2) then
begin
k := copy(trim(karakter),1,a1-1);
c := '';
for i := 1 to length(k) do
begin
if k[i] <> '.' then c := c + k[i];
end;
if (length(karakter)-a1 > 1) then k := copy(trim(karakter),a1+1,2)
else
begin
k := copy(trim(karakter),a1+1,1);
k := k + '0';
end;
end else
begin
k := copy(trim(karakter),1,a2-1);
c := '';
for i := 1 to length(k) do
begin
if k[i] <> ',' then c := c + k[i];
end;
if (length(karakter)-a2 > 1) then k := copy(trim(karakter),a2+1,2)
else
begin
k := copy(trim(karakter),a2+1,1);
k := k + '0';
end;
end;
end else
begin
c:= karakter;
k := '00';
end;
if length(trim(c)) > 9 then
begin
a3 := length(c);
i :=0;
while i <=8 do
begin
d[8-i] := c[a3];
a3 := a3 - 1;
i := i + 1;
end;
for i := 0 to 8 do begin c2 :=c2+d[i];d[i]:=' ' ; end;
a3 := length(c)- 9;
while a3 > 0 do
begin
d[a3-1] := c[a3];
a3 := a3-1;
end;
for i := 0 to 8 do begin c1 := c1 + d[i];d[i]:=' '; end;
a1 := strtoint(trim(c1));
a2 := strtoint(trim(c2));
huruf := trilyunan(a1) +' '+ jutaan(a2);
end else
begin
a1 := strtoint(c);
huruf := jutaan(a1);
end;
if ((trim(k) <> '00') and (trim(k)<>'0')) then
begin
if huruf = '' then huruf := 'Nol Koma';
huruf := huruf +' Koma ' + koma(k);
end;
result := huruf;
end;




Selasa, 06 Juli 2010

Execute Storeprocedure SQL Server Express 2005 with C# - part 3


Ketemu lagi di Execute Storeprocedure SQL Server Express 2005 with C#, pada kesempatan ini penulis akan mencoba melanjutkan lagi hasil pembelajaran penulis dengan menggunakan C#, pada kesempatan ini silahkan buat desain form seperti gambar yang penulis sertakan pada artikel ini kemudian untuk dapat menjalankan aplikasi sederhana ini silahkan ketikkan source berikut :



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Data.SqlClient;
using System.Text;
using System.Windows.Forms;
//sertakan file uConnection
using GL.DataAkses;
using GL.ClassInputMaster;

namespace GL
{
public partial class fperkiraan : Form
{
ClassPerkiraan ClasPerkiraan = new ClassPerkiraan();

// buat variabel untuk pemanggil koneksi di file uConnection.cs
private SqlConnection conn;
string trans;
public fperkiraan()
{
InitializeComponent();
// deklarasikan + Buka koneksi
this.conn = uConnection.GetConnection();
} string cmdsqlGL;
Boolean Proses;
DataTable tperkiraanGL = new DataTable();

private void load_data()
{
tperkiraanGL.Clear();

cmdsqlGL = "Select noperk,perkiraan,gd,dk from tperkiraan where order by noperk";
SqlDataAdapter adapterPerkiraan = new SqlDataAdapter(cmdsqlGL,conn);
SqlCommandBuilder commandPerkiraan = new SqlCommandBuilder(adapterPerkiraan);
adapterPerkiraan.Fill(tperkiraanGL);
dgperkiraan.DataSource = tperkiraanGL;
dgperkiraan.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
dgperkiraan.Columns[0].HeaderText = "NO.PERKIRAAN";

dgperkiraan.Columns[1].HeaderText = "PERKIRAAN";
dgperkiraan.Columns[0].Width = 150;
dgperkiraan.Columns[1].Width = 300;
dgperkiraan.Columns[2].Width = 60;
dgperkiraan.Columns[3].Width = 60;
dgperkiraan.Columns[2].HeaderText = "G/D";
dgperkiraan.Columns[2].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
dgperkiraan.Columns[3].HeaderText = "D/K";
dgperkiraan.Columns[3].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;

}

private void fperkiraan_Load(object sender, EventArgs e)
{
trans = "Baru";
WindowState = FormWindowState.Maximized;
lblproses.Text = "Penambahan data baru...";
try
{
load_data();
}
catch (SqlException err)
{
throw new Exception(err.Message.ToString());
}
finally
{
conn.Close();
}
}

private void txtcarinama_TextChanged(object sender, EventArgs e)
{
// untuk pencarian data
}

private void btnselesai_Click(object sender, EventArgs e)
{
Close();
}

private void kosong()
{
txtnoperk.Text = "";
txtnaperk.Text = "";
cbGD.Text = "General";
rodebet.Checked=true;
}

private void btntambah_Click(object sender, EventArgs e)
{
lblproses.Text = "Penambahan data baru...";
kosong(); trans = "Baru"; txtnoperk.ReadOnly = false; txtnoperk.Focus();
}

private void btsimpan_Click(object sender, EventArgs e)
{
string _idbook = txtnoperk.Text;
if (txtnoperk.Text == "")
{
MessageBox.Show("Pengisian tidak lengkap!!!");
btntambah_Click(sender, e);
}
else
{
try
{
string GD, DK;
if (cbGD.Text == "General")
{
GD = "G";
}
else
{
GD = "D";
}
if (rodebet.Checked == true)
{
DK = "D";
}
else
{
DK = "K";
}
if (trans=="Edit" || trans=="Baru")
{
ClasPerkiraan.spAdd(trans.ToString(), txtnoperk.Text.ToString(), txtnaperk.Text.ToString(), GD.ToString(), DK.ToString());
}

load_data();
}
catch (Exception err)
{
MessageBox.Show("Gagal menyimpan data");
}
finally
{
btntambah_Click(sender, e);
}
}
}

private void btnhapus_Click(object sender, EventArgs e)
{

DialogResult result = MessageBox.Show("Anda Yakin akan menghapus perkiraan : " + dgperkiraan.Rows[dgperkiraan.CurrentCellAddress.Y].Cells["perkiraan"].Value.ToString(), "Peringatan", MessageBoxButtons.YesNo);
if (result == DialogResult.No)
{
btntambah_Click(sender, e);
}
else
{
string no = dgperkiraan.Rows[dgperkiraan.CurrentCellAddress.Y].Cells["noperk"].Value.ToString();
ClasPerkiraan.spAdd("Hapus",no.ToString(),"","","");
tperkiraanGL.Clear();
load_data();
}
}

private void btnperbaiki_Click(object sender, EventArgs e)
{
string nobookmark;
try
{
if (dgperkiraan.Rows[dgperkiraan.CurrentCellAddress.Y].Cells["noperk"].Value.ToString() != "")
{
nobookmark = dgperkiraan.Rows[dgperkiraan.CurrentCellAddress.Y].Cells["noperk"].Value.ToString();

txtnoperk.Text = dgperkiraan.Rows[dgperkiraan.CurrentCellAddress.Y].Cells["noperk"].Value.ToString();
txtnaperk.Text = dgperkiraan.Rows[dgperkiraan.CurrentCellAddress.Y].Cells["perkiraan"].Value.ToString();
if (dgperkiraan.Rows[dgperkiraan.CurrentCellAddress.Y].Cells["GD"].Value.ToString() == "G")
{
cbGD.Text = "General";
}
else
{
cbGD.Text = "Detail";
}
if (dgperkiraan.Rows[dgperkiraan.CurrentCellAddress.Y].Cells["dk"].Value.ToString() == "D")
{
rodebet.Checked = true;
}
else
{
rokredit.Checked = true;
}
trans = "Edit";
txtnoperk.ReadOnly = true;
trans = "Edit"; lblproses.Text = "Perbaikan data...";
txtnaperk.Focus();
}
else
{
MessageBox.Show("data tidak ada");
}
}
catch
{
MessageBox.Show("Data tidak ada");
}
}

private void btncetak_Click(object sender, EventArgs e)
{


//untuk menampilkan data dalam mode report
}

private void txtnoperk_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 13)
{
// buat class untuk pencarian data yang pernah di isi disini
}
else
{
txtnaperk.Focus();
}
}
}
}
private void konfirmasi()
{
string pesan = "Simpan data?";
string judul = "Konfirmasi";
MessageBoxButtons tombol = MessageBoxButtons.OKCancel;
DialogResult result;
result = MessageBox.Show(pesan, judul, tombol);
if (result == System.Windows.Forms.DialogResult.OK)
{
Proses = true;
}
else
{
Proses = false;
}
}

}
}

Mudah-mudahan hasil pembelajaran penulis ini juga dapat memberikan manfaat bagi teman-teman yang juga sama dengan penulis dalam mempelajari C#, serta tidak lupa penulis ucapkan beribu-ribu maaf kalau artikel ini masih jauh dari sempurna

Execute Storeprocedure SQL Server Express 2005 with C# - part 2

Ada baiknya kita menyusun data-data ataupun script program yang kita buat dengan C#, hal ini untuk mempermudah kita dalam penyusunan struktur dari program yang akan kita buat dan memudahkan kita dalam perawatan/maintanance. Berhubungan dengan contoh aplikasi yang penulis buat sesuai dengan judul diatas, maka penulis mencoba untuk memilah program yang diantaranya :
1. File uConnection.cs yang penulis letakkan dalam folder DataAkses, file ini nantinya berfungsi untuk penghubung antara database dengan C#, berikut contoh sourcenya :
using System;
using System.Collections.Generic;
using System.Data.SqlClient;

namespace GL.DataAkses
{
public class uConnection
{
public static SqlConnection GetConnection()
{
string conGL = @"server=CENK26-PC\SQLEXPRESS;integrated security=true;database=GL_C#";
SqlConnection conn = new SqlConnection(conGL);
conn.Open();
return conn;
}
}
}


2. Selanjutnya kita buat Class yang berfungsi untuk proses transaksi yang berhubungan dengan tabel perkiraaan yang penulis coba kombinasikan dengan storeprocedure SQL SERVER 2005 EXPRESS, untuk kebutuhan ini penulis meletakkan file class ini didalam folder " ClassInputMaster " dengan nama file ClassPerkiraan.cs, sedangkan sourcenya adalah sebagai berikut :

using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Text;
using System.Windows.Forms;
using GL.DataAkses;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Data;

namespace GL.ClassInputMaster
{
public class ClassPerkiraan
{
private SqlConnection conn;
private string idnoperk;
private string idnaperk;
private string idgd;
private string iddk;
private string keterangan { get; set; }

#region ClassPerkiraan property
public string idNoperk
{
get { return idnoperk; }
set { idnoperk = value; }
}

public string idNaperk
{
get { return idnaperk; }
set { idnaperk = value; }
}

public string idGd
{
get {return idgd;}
set {idgd=value;}
}
public string idDk
{
get { return iddk; }
set { iddk = value; }
}

#endregion
public ClassPerkiraan()
{
}



///class store procedure
/// untuk MASRER PERKIRAAN UTAMA
public string spAdd(string tr, string no, string na, string gd, string dk, string th)
{
this.conn = uConnection.GetConnection();
SqlCommand spAdd = new SqlCommand();
spAdd.Connection = conn;
spAdd.CommandText = "sp_perkiraan";
spAdd.CommandType = CommandType.StoredProcedure;
SqlParameter tran = new SqlParameter("@transaksi", SqlDbType.VarChar);
SqlParameter noperk = new SqlParameter("@noperk", SqlDbType.Char);
SqlParameter naperk = new SqlParameter("@naperk", SqlDbType.VarChar);
SqlParameter Gd = new SqlParameter("@gd", SqlDbType.Char);
SqlParameter Dk = new SqlParameter("@dk", SqlDbType.Char);
tran.Value = tr;
noperk.Value = no;
naperk.Value = na;
Gd.Value = gd;
Dk.Value = dk;

spAdd.Parameters.Add(tran);
spAdd.Parameters.Add(noperk);
spAdd.Parameters.Add(naperk);
spAdd.Parameters.Add(Gd);
spAdd.Parameters.Add(Dk);

spAdd.ExecuteNonQuery();
conn.Close();
return spAdd.ToString();
}
}
}

3. Selanjutnya kita tinggal coba jalankan storeprocedure yang telah kita buat di SQL SERVER 2005 EXPRESS dipart 1 dengan Class yang telah kita buat di Part 2 sebelumnya... yang kita lanjutkan di Execute Storeprocedure SQL Server Express 2005 with C# - part 3

Minggu, 04 Juli 2010

Execute Storeprocedure SQL Server Express 2005 with C# - part 1

Jumpa lagi dengan saya, kali ini saya akan membahas topik yang baru aja saya pelajari, dan ingin menuliskan diblog ini dengan harapan nantinya dapat memberikan manfaat buat teman-teman yang kebetulan baru belajar di C# sepertii saya.
Banyak literatur yang menjelaskan bagaimana mengkoneksikan database SQL SERVER EXPRESS 2005 jangan lupa sebelumnya download juga SQLServer2005_SSMSEE.msi untuk memudahkan anda mengoperasikan SQL Server Express 2005 dengan C# dengan berbagai tehnik dan cara, untuk kali ini saya akan mencoba menjalankan storeprocedure yang dipanggil dengan C#.
Sebelumnya silahkan anda buat database sesuai yang diinginkan dengan SQL server Express 2005, sebagai contoh saya membuat database dengan nama GL_C#, kemudian tambahkan tabel seperti contoh berikut :

CREATE TABLE [dbo].[tperkiraan](
[noperk] [char](20) NOT NULL,
[perkiraan] [varchar](50) NULL,
[gd] [char](1) NOT NULL CONSTRAINT [DF_tperkiraan_gd] DEFAULT ('G'),
[dk] [char](1) NOT NULL CONSTRAINT [DF_tperkiraan_dk] DEFAULT ('D'),
CONSTRAINT [PK_tperkiraan] PRIMARY KEY CLUSTERED
(
[noperk] ASC
)ON [PRIMARY]
)

Selanjutnya silahkan buat satu storeprocedure seperti berikut :

CREATE PROCEDURE [dbo].[sp_perkiraan]
@noperk char(20),
@naperk varchar(50),
@gd char(1),
@dk char(1)
@transaksi varchar(20)
AS
BEGIN
if @transaksi='Baru'
begin
Insert Into tperkiraan(noperk,perkiraan,gd,dk)
Values(@noperk,@naperk,@gd,@dk)
end
if @transaksi='Hapus'
begin
delete from tperkiraan where noperk=@noperk
end
if @transaksi='Edit'
begin
Update tperkiraan set perkiraan=@naperk, gd=@gd,dk=@dk
where noperk=@noperk
end
END

Oke untuk selanjutnya untuk koneksi dari C# silahkan buka artikel Execute Storeprocedure SQL Server Express 2005 with C# - part 2

Sabtu, 03 Juli 2010

Fungsi Konversi Terbilang C#

Sudah lama sekali rasanya tidak memiliki semangat untuk belajar sesuatu yang baru mungkin dikarenakan kesibukan dan juga mungkin umur yang sudah mulai beranjak tua (hahahahahaa baru sadar sudah tidak muda lagi).

Langsung aja, kemarin iseng-iseng bongkar-bongkar kode-kode program lamaku dulu, salah satunya program "konversi terbilang" yang dulu saya buat dengan delphi ver 5 dan buat teman-teman delphier sekarang website resminya kalau nggak salah http://www.embarcadero.com, sebelumnya penulis mohon maaf karena sebetulnya ini adalah materi/topik yang sudah kadaluarsa bagi rekan-rekan programmer.

Ada perasaan pengen tahu aja apakah penulisan program yang dibuat penulis waktu jaman jadul bisa diterapkan dalam jaman sekarang akhirnya penulis mencoba mempelajari bahasa pemrograman yang penulis amati sedang beken saat ini " VISUAL STUDIO - C# " yang kalau tidak salah dikembangkan oleh Microsoft,.

Kembali ke konversi bilangan tadi, ternyata memang dari segi logika mungkin teman-teman bilang algoritma alur dalam bahasa delphi dengan bahasa pemrograman yang lain tidaklah berbeda yang membedakan hanyalah sintak dari masing-masing program tersebut.

Mungkin penulis akan memaparkan sekelumit dari contoh code program yang penulis buat menggunakan C# seperti hasil contoh didalam gambar diatas. Akan tetapi penulis mohon maaf apabila banyak kekurangannya karena untuk saat ini penulispun baru mempelajari C# tersebut ibarat bayi masih belajar merangkak...


using System;
using System.Collections.Generic;
using System.Text;

namespace cenkDll
{
public class fungsibilangan
{
string c1, c2, huruf, c;
char[] d;
public string C
{
set { this.c = value; }
get { return this.c; }
}

public string C1
{
set { this.c1 = value; }
get { return this.c1; }
}

public string C2
{
set { this.c2 = value; }
get { return this.c2; }
}

public string Huruf
{
set { this.huruf = value; }
get { return this.huruf; }
}

public string konversi(string karakter)
{
int i,a1,a2,a3;
string k,potong;
a1 = karakter.IndexOf(',');
a2 = karakter.IndexOf('.');
i = 0;
if ((a1 != 0) || (a2 != 0))
{
if (a1 > a2)
{
k = karakter.Substring(0, a1);
c = "";
for (i = 0; i < potong =" k.Substring(i," c =" c"> 1)
{
k = karakter.Substring(a1 + 1, 2);
}
else
{
k = karakter.Substring(a1 + 1, 1);
k = k + "0";
}
}
else
{
k = karakter;
c = "";
for (i = 0; i != k.Length; i++)
{
potong = k.Substring(i, 1);
if (potong != ",")
{
c = c + potong;
}
}
if ((k.Length) - a2 > 1)
{
k = karakter.Substring(a2 + 1, 2);
}
else
{
k = karakter.Substring(a2 + 1, 1);
k = k + "0";
}
}
}
else
{
c = karakter;
k = "00";
}

if (c.Length > 9)
{
a3 = c.Length;
i = 0;
while (i <= 8) { d[8 - i] = c[a3]; a3 = a3 - 1; i++; } for (i = 0; i <= 8; i++) { a3 = c.Length - 9; while (a3 > 0)
{
d[a3 - 1] = c[a3];
a3 = a3 - 1;
}
}
for (i = 0; i <= 8; i++) { c1 = c1 + d[i]; a1 = Int32.Parse(c1); a2 = Int32.Parse(c2); huruf = trilyunan(a1)+" "+jutaan(a2); } } else { a1 = Int32.Parse(c); huruf = jutaan(a1); } if ((k.Trim() != "00") & (k.Trim() != "0")) { if (huruf == "") { huruf = "Nol Koma"; huruf = huruf + " Koma " + koma(k); } } return huruf; } private string trilyunan(int angka) { string kata; int a, b; a = angka % 1000; b = (angka - a) / 1000; kata = ""; if (b > 0)
{
kata= ratusan(b)+" Trilyun "+ milyaran(a);
}
else
{
kata=milyaran(angka);
}
return kata;
}

private string milyaran(int angka)
{
string kata;
kata = " ";

if (angka > 0)
{
kata = ratusan(angka) + " Milyar";
}
else
{
kata = " ";
}
return kata;
}

private string jutaan(int angka)
{
string kata;
int a, b;
a = angka % 1000000;
b = (angka - a) / 1000000;
kata = " ";
if (b > 0)
{
kata = ratusan(b) + " Juta " + ribuan(a);
}
else
{
kata = ribuan(angka);
}
return kata;

}

private string ribuan(int angka)
{
string kata;
int a, b;
a = angka % 1000;
b = (angka - a) / 1000;
kata = " ";
if (b > 0)
{
if (b == 1)
{
kata = "Seribu " + ratusan(a);
}
else
{
kata = ratusan(b) + " Ribu " + ratusan(a);
}
}
else
{
kata = ratusan(angka);
}
return kata;
}

private string ratusan(int angka)
{
string kata;
int a, b;
a = angka % 100;
b = (angka - a) / 100;
kata = " ";
if (b > 0)
{
if (b == 1)
{
kata = "Seratus " + puluhan(a);
}
else
{
kata = satuan(b) + " Ratus " + puluhan(b);
}
}
else
{
kata = puluhan(angka);
}
return kata;
}

private string puluhan(int angka)
{
string kata;
int a, b;
a = angka % 10;
b = (angka - a) / 10;
kata = " ";
if (b > 0)
{
if (b == 1)
{
if (a == 0)
{
kata = "Sepuluh";
}
else
{
if (a == 1)
{
kata = "Sebelas";
}
else
{
kata = satuan(a) + " Belas";
}
}
}
else
{
kata = satuan(b) + " Puluh " + satuan(a);
}
}
else
{
kata = satuan(angka);
}
return kata;
}


private string satuan(int angka)
{
string kata;
kata = "";
switch (angka)
{
case 0: kata="";break;
case 1: kata="Satu";break;
case 2: kata="Dua";break;
case 3: kata="Tiga";break;
case 4: kata="Empat";break;
case 5: kata="Lima";break;
case 6: kata="Enam";break;
case 7: kata="Tujuh";break;
case 8: kata="Delapan";break;
case 9: kata="Sembilan";break;
}
return kata;
}

private string koma(string angka)
{
string kata;
kata = "";
int a, b;
kata = angka.Substring(0,1);
a = Int32.Parse(kata);
if (a == 0)
{
kata = "Nol";
}
else
{
kata = satuan(a);
}
a = Int32.Parse(angka);
b = a % 10;
a = (Int32.Parse(angka) - b) / 10;
kata=kata+" "+satuan(a);
return kata;
}
}





Demikian kira-kira dari fungsi konversi terbilang yang penulis coba implementasikan didalam C#, mohon maaf sebelumnya mungkin fungsi ini belum terlalu sempurna, untuk kesempurnaan teman-teman dapat melengkapinya , dan penulis informasikan bahwa fungsi konversi ini sudah dapat mendeiteksi format penulisan digit versi indonesia (xxx.xxx.xxx) ataupun versi inggris (xxx,xxxx,xxx), terimakasih

Rabu, 30 Juni 2010

1 note

nggak tau apa yang mau diisi, nggak tau apa yang mau dituangkan, mudah2 an besok - lusa dan selanjutnya bisa menuangkan tulisan-tulisan yang ada dikepala ke dalam blog ini, dan dapat memberikan manfaat untuk diri sendiri dan kepada orang lain..