Selasa, 31 Agustus 2010

Membuat Triger

Coiiiii
Triger itu adalah misal pada tabel barang isi stok-nya ada 0, misalkan pada database pembelian bertambah (misal beli 2) maka otomatis pada tabel barang, stoknya jadi 2.
Nie Contohnya pada SQL SERVER 2005


menurut MSDN, syntac dari trigger adalah sebagai berikut
Syntax

CREATE TRIGGER trigger_name
ON { table | view }
[ WITH ENCRYPTION ]
{
{ { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }
[ WITH APPEND ]
[ NOT FOR REPLICATION ]
AS
[ { IF UPDATE ( column )
[ { AND | OR } UPDATE ( column ) ]
[ ...n ]
| IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask )
{ comparison_operator } column_bitmask [ ...n ]
} ]
sql_statement [ ...n ]
}
}

biar lebih mengerti, kita mulai dengan contoh.. jadi kita butuh membuat 2 tabel tersebut di SQL server 2005, script sebagai berikut

create table BARANG
(
BAR_ID int not null,
BAR_NAMA varchar(255) not null,
BAR_STOCK int null
default 0,
constraint PK_BARANG primary key (BAR_ID)
)
go

create table PEMBELIAN
(
PEM_ID int not null,
BAR_ID int null ,
PEM_JUMLAH int null ,
constraint PK_PEMBELIAN primary key (PEM_ID)
)
go

create index RELATION_FK on PEMBELIAN (BAR_ID)
go

alter table PEMBELIAN
add constraint FK_PEMBELIA_RELATION_BARANG foreign key (BAR_ID)
references BARANG (BAR_ID)
go

INSERT INTO BARANG (BAR_ID,BAR_NAMA) VALUES (1,’AQUA’);
INSERT INTO BARANG (BAR_ID,BAR_NAMA) VALUES (2,’TOTAL’);
INSERT INTO BARANG (BAR_ID,BAR_NAMA) VALUES (3,’AQUADES’);

setelah anda menjalankan script tersebut, maka anda akan mempunyai 2 tabel, yaitu tabel barang dengan isi 3 buah data, dan tabel pembelian dengan data masih kosong.3 data di tabel barang tersebut secara defaut stocknya adalah 0

kemudian saatnya kita buat trigger sehingga ketika kita menambahkan data di tabel pembelian dengan jumlah pembelian barang tertentu, maka stock di tabel barang akan bertambah sesuai dengan barang yg dibeli, syntac trigger tersebut adalah sebagai berikut

create trigger tambahStockbarang on pembelian
for insert
as
update b set b.bar_stock = b.bar_stock + i.pem_jumlah
from barang b join inserted i on b.bar_id = i.bar_id

arti dari kode tersebut adalah sebagai berikut
create trigger tambahStockbarang on pembelian
membuat trigger dengan nama tambahStockBarang dimana trigger tersebut akan terpicu jika ada perubahan di tabel pembelian

for insert
as
perubahan tersebut adalah penambahan(insert) di tabel pembelian , selain penambahan bisa juga diisi dengan perubahan(update) atau penghapusan(delete)
for disini juga bisa rubah isinya jadi after atau instead of . perbedaanya adalah waktu trigger dikerjakan, biasaya yg sering digunakan adalah for

update b set b.bar_stock = b.bar_stock + i.pem_jumlah
from barang b join inserted i on b.bar_id = i.bar_id
ini adalah kode yg dikerjakan ketika kejadian trigger terpicu, kode diatas bertujuan merubah nilai bar_stock pada tabel barang dengan menambahkan nilai bar_stock yg sekarang dengan jumlah barang yg dibeli (pem_jumlah). perhatikan disini ada tabel yang bernama inserted, tabel tersebut merupakan tabel logika yg digunakan untuk menyimpan data yang memicu terjadinya trigger, dalam hal ini nilai data yg dimasukkan(insert) kedalam tabel pembelian, selain inserted, tabel logika lainnya adalah deleted, tabel logika ini digunakan untuk trigger yg terpicu dengan kejadian delete

kita coba masukkan kode berikut

INSERT INTO PEMBELIAN (PEM_ID, BAR_ID, PEM_JUMLAH) VALUES (1,1,4);
INSERT INTO PEMBELIAN (PEM_ID, BAR_ID, PEM_JUMLAH) VALUES (2,3,2);
INSERT INTO PEMBELIAN (PEM_ID, BAR_ID, PEM_JUMLAH) VALUES (3,1,1);

arti kode tersebut
pem_id haruslah beda karena merupakan primary key
beli aqua(kode bar_id=1) sebanyak 4
beli aquades (kode bar_id=3) sebanyak 2
beli aqua lagi sebanyak 1

sehingga secara keseluruhan yg dibeli aqua sebanyak 5 dan aquades sebanyak 2
karena default nilai stock barang adalah 0, maka seharusnya nilai aqua 5 dan aquades 2 adalah jumlah stock barang sekarang ini

dan kita lihat data barang… walah

hasil trigger

sekian tutorial kali ini tentang membuat trigger di SQL Server, semoga bisa membantu yg lagi kesusahan bikin Tugas Akhir ata pekerjaan

Mengatasi masalah "Cannot generate SSPI context"

Apabila Ente menggunakan type windows authoticention pada sql serper maka error tersebut ("Cannot generate SSPI context") kadang muncul. Error tersebut sebenarnya adalah karena pada server gak mengijinkan computer client tersebut untuk akses ke serper. Biasanya sih ane bwat juga serper DHCP n client pake DHCP tersebut. Dijamin Dech error kaya gitu gak akan muncul lagi...

Senin, 30 Agustus 2010

Ekspor Stored Procedure SQL SERVER 2000

Dari pada kudu copy paste satu per satu bila ente mo migrasi database mending pake cara berikut

1. Buka Enterprise Manager
2. Pilih database yang akan di ekspor
3. Klik Tool -> Generate SQL Script (kalo tombol tersebut disable maka ente salah milih databasenya)
Ataw bisa juga dengan di klik kanan kemudian pilih all task -> Generate SQL Script
4. Klik Tombol SHOW ALL
5. Centang All Stored Procedure
6. Kemudian Klik Preview
7. Jadi Dech tinggal di copy hasil previw n pastein ke database ente yang baru

Rabu, 09 Juni 2010

Konfigurasi DNS Server Debian

login as: root
root@2.2.2.1's password:
Last login: Tue Nov 18 15:41:50 2008 from noc.dika.web.id
Linux ns1.wave 2.6.18-6-686 #1 SMP Mon Oct 13 16:13:09 UTC 2008 i686

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
ns1:~# cd /etc/bind/zones/master/
ns1:/etc/bind/zones/master#
jika kita mengetikkan ls maka mesin akan menampilkan seluruh database domain. coba salah satu domain yg ada, sebagai contoh adalah pakerin.
ns1:/etc/bind/zones/master# vim dikaweb.co.id.db
$ORIGIN .
$TTL 1800 ; 30 minutes
dikaweb.co.id IN SOA ns1.dika.web.id. noc.dika.web.id. (
2008090800 ; serial (1)
10800 ; refresh (3 hours)
1800 ; retry (30 minutes)
604800 ; expire (1 week)
1800 ; minimum (30 minutes)
)
NS ns1.dika.web.id.
NS ns2.dika.web.id.
MX 10 mx.dika.web.id. (2)
$ORIGIN dikaweb.co.id.
mjk MX 10 mx.dika.web.id. (3)
www A 2.2.100.11 (4)
mail CNAME mail.dika.web.id. (5)
mail.mjk CNAME mail.dika.web.id. (6)

penjelasan :
(1) merupakan komposisi dari TahunBulanTanggalCounter. setiap kali ada perubahan counter harus selalu diubah sesuai urutan.
(2) setiingan dari Mail Exchange (MX) semakin kecil prioritas semakin besar
(3) idem
(4) settingan pengalamatan (Address) dengan mengunakan IP. settingan ini merupakan letak dari www
(5) settingan dengan mengunakan nama

berikut adalah settingan dari named.conf.local dari salah satu domain
ns1:/etc/bind/zones/master# vim /etc/bind/named.conf.local

// Do any local configuration here
// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";
zone "1.1.1.1.in-addr.arpa" {
type master;
file "/etc/bind/zones/master/1.1.1.1.rev";
allow-transfer {
2.2.3.1;
};
allow-query {any;};
};

zone "2.2.2.in-addr.arpa" {
type master;
file "/etc/bind/zones/master/2.2.2.rev";
allow-transfer {
2.2.3.1;
};
allow-query {any;};
};

zone "dikaweb.co.id" {
type master;
file "/etc/bind/zones/master/dikaweb.co.id.db";
allow-transfer {
2.2.3.1;
};
allow-query {any;};
};

zone "dikaweb.co.id" {
type slave;
file "/etc/bind/zones/master/dikaweb.co.id.db";
masters {
2.2.2.1;
};
};

selain di DNS master, suatu domain juga harus didekarasikan di DNS slave.
ns2:/etc/bind/zones/master# vim /etc/bind/named.conf.local
// Do any local configuration here
// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";




zone "1.1.1.1.in-addr.arpa" {
type slave;
file "/etc/bind/zones/master/1.1.1.1.rev";
masters {
2.2.2.1;
};
};

zone "2.2.2.in-addr.arpa" {
type slave;
file "/etc/bind/zones/master/2.2.2.rev";
masters {
2.2.2.1;
};
};

zone "dikaweb.co.id" {
type slave;
file "/etc/bind/zones/master/dikaweb.co.id.db";
masters {
2.2.2.1;
};
};

dan berikut adalah kelengkapan settingan DNS
ns1:/etc/bind/zones/master# vim 1.1.1.1.rev
$TTL 1d ;
;$ORIGIN 1.1.1.1.IN-ADDR.ARPA.
@ IN SOA ns1.dika.web.id. noc@dika.web.id. (
2008090300
7200
120
2419200
604800
)
@ IN NS ns1.dika.web.id.
@ IN NS ns2.dika.web.id.


1 IN PTR core-gw.dika.web.id.
10 IN PTR ns1.dika.web.id.
11 IN PTR www.dika.web.id.
12 IN PTR mail.dika.web.id.
13 IN PTR www2.dika.web.id.
14 IN PTR ras.dika.web.id.
15 IN PTR noc.dika.web.id.
16 IN PTR mx.dika.web.id.


ns1:/etc/bind/zones/master# vim 2.2.2.rev
$TTL 1d ;
;$ORIGIN 1.1.1.1.IN-ADDR.ARPA.
@ IN SOA ns1.dika.web.id. noc@dika.web.id. (
2008081300
7200
120
2419200
604800
)
@ IN NS ns1.dika.web.id.
@ IN NS ns2.dika.web.id.


10 IN PTR ns2.dika.web.id.

ns1:/etc/bind/zones/master# vim 2.2.100.rev.backup
$TTL 1d ;
$ORIGIN 1.1.1.1.IN-ADDR.ARPA.
@ IN SOA ns1.dika.web.id. noc@dika.web.id. (
2008051903
7200
120
2419200
604800
)
IN NS ns1.dika.web.id.
IN NS ns2.dika.web.id.

;--------------------------------------Routers----------------------

1 PTR core-gw.dika.web.id.

;--------------------------------------Routers----------------------

;--------------------------------------Servers----------------------

10 IN PTR ns1.dika.web.id.
11 IN PTR ns2.dika.web.id.




$ORIGIN .
$TTL 1800 ; 30 minutes
user-dika.co.id IN SOA ns1.dika.web.id. noc.dika.web.id. (
2008111300 ; serial
10800 ; refresh (3 hours)
1800 ; retry (30 minutes)
604800 ; expire (1 week)
1800 ; minimum (30 minutes)
)
NS ns1.user-dika.net.id.
NS ns2.user-dika.net.id.
MX 5 mail.user-dika.co.id.
A 202.162.217.162
$ORIGIN user-dika.co.id.
www A 202.162.217.162
sg A 202.162.217.167
ns1 A 202.162.220.110
ns2 A 202.162.220.220

settingan ini digunakan dlm sistem sehingga penulisan di ns1 secara otomatis akan dtransfer ke ns2

1. ns1 pd named.conf.local d tambah settingan lg ---> lihat aja

include "/etc/bind/rndc.key";
controls {
inet 127.0.0.1 port 953
allow {
127.0.0.1;
} keys { "rndc-key"; };
};

2. ns1 dan ns2 pada named.conf.options --> liat aja

allow-recursion {
2.2.2.0/24;
2.2.3.0/24;
127.0.0.1;

3. ns1 dan ns2 mode master d ganti 775 --> chmod -R 755 master

ns1:/etc/bind/zones# chmod -R 775 /etc/bind/zones/master/

Proses close domain (debian):
1. Masuk mesin NS1
2. Hapus domain di NS1 : mv namadomain.db namadomain.db.closed
3. Beri tanda "//" dibagian /etc/bind/named.conf.local pada NS1 pada domain yang di-closed
4. Restart bind NS1: /etc/init.d/bind9 restart
5. Remote NS2 : ssh IP_NS2
6. Lakukan perintah No.2 dan No.3 pada NS2
7. Restart bind NS2: /etc/init.d/bind9 restart
8. Hapus domain pada webserver
9. Coba akses domain yg telah dihapus dengan browser

Hold Suatu Domain
1. Masuk mesin NS
2. Beri tanda "//" dibagian /etc/bind/named.conf.local pada NS1 pada domain yang di-hold
3. Restart bind NS: /etc/init.d/bind9 restart
4. lakukan hal yg sama pada mesin NS2

buat domain di NS :
1. Pindah direktori : cd /etc/bind/zones/master
2. Tampilkan semua domain : ls
3. Kopi : cp tim.co.id.db contoh.com.db
4. Ubah data contoh.com.db : vim contoh.com.db
5. Simpan settingan tersebut : tekan Esc-->tanda ":" -->ketik wq -->enter
6. Masuk ke /etc/bind/named.conf.local
7. Buat tambahan file dengan mengkopi salah satu settingan domain
8. Ubah data sesuai dengan nama domain
9. Restart bind : /etc/init.d/bind9 restart
10. Kopi ke NS2 dengan mc
11. mc(midnight commander) -->ctrl s (mencari file)-->F9-->enter-->tekan h-->masukkan IP NS2-->masukkan password NS2-->tekan tab-->tekan F5 (untuk mengkopi)
12. Pada NS2 masuk ke /etc/bind/named.conf.local
13. Buat tambahan file dengan mengkopi salah satu settingan domain
14. Ubah data sesuai dengan nama domain
15. Restart bind : /etc/init.d/bind9 restart
16. Coba ping domain yg sudah dibuat
17. Pada webserver juga harus dicreate web directorinya dengan masuk ke IIS
Jangan lupa untuk membuat folder sesuai dengan nama domain

seputar DNS
1. CNAME --> untuk alias. misal nama mesin corpmail.dikaweb.net.id bisa dialiaskan menjadi
2. pop.domain.com dimana pop.domain.com menuju mesin yg sama dengan coprmail.surabaya.....
NS 10.10.10.10 debian
1. lokasi db domain ada di direktori /var/named
2. setelah proses menambah domain lakukan penambahan settingan di /etc/named.conf
3. lakukan proses stop/start setelah penambahan pada direktori named.conf
4. /etc/rc.d/rc.bind stop
5. /etc/rc.d/rc.bind start
untuk mengetahui domain jalan atau tidak lakukan ping ke domain tersebut

domain dihack
lihat dan cek setiap databasenya....

Mouse scrool pada datagrid VB6

Hiks, visual basic 6 untuk mouse scrollnya masih belum bisa digunakan. Tapi Dont Worry bisa diakali kok dengan menambahkan modul baru dan pastekan ini :
------------------------------------------------------------------------------
Public Mydika As Object

Private Declare Function CallWindowProc Lib "user32.dll" Alias _
"CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function SetWindowLong Lib "user32.dll" Alias _
"SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long


Public Const MK_CONTROL = &H8
Public Const MK_LBUTTON = &H1

Public Const MK_RBUTTON = &H2
Public Const MK_MBUTTON = &H10
Public Const MK_SHIFT = &H4
Private Const GWL_WNDPROC = -4
Private Const WM_MOUSEWHEEL = &H20A
Dim LocalHwnd As Long
Dim LocalPrevWndProc As Long
Dim MyControl As Object
Private Function WindowProc(ByVal Lwnd As Long, ByVal Lmsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim MouseKeys As Long
Dim Rotation As Long
Dim Xpos As Long
Dim Ypos As Long
If Lmsg = WM_MOUSEWHEEL Then
MouseKeys = wParam And 65535
Rotation = wParam / 65536
Xpos = lParam And 65535
Ypos = lParam / 65536
'determine if mouse wheel is being moved up or down
If Rotation = -120 Then
'call scroll method of datagrid and specify the number of columns and rows to scroll through
'DataGrid.Scroll colNum, rowNum
Mydika.Scroll 0, 3
Else
Mydika.Scroll 0, -3
End If
End If
WindowProc = CallWindowProc(LocalPrevWndProc, Lwnd, Lmsg, wParam, lParam)
End Function
Sub WheelHook(PassedControl As Object)
On Error Resume Next
Set MyControl = PassedControl
LocalHwnd = PassedControl.hWnd
LocalPrevWndProc = SetWindowLong(LocalHwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Sub WheelUnHook()
Dim WorkFlag As Long
On Error Resume Next
WorkFlag = SetWindowLong(LocalHwnd, GWL_WNDPROC, LocalPrevWndProc)
Set MyControl = Nothing
End Sub

----------------------------------------------------------------------------------------------
Trus pada datagrid_klik isikan kaya gini

Private Sub DataGrid1_Click()
WheelUnHook
Set Mydika = POSTING.DataGrid1
WheelHook DataGrid1

End Sub

Script jumlah terbilang pada VB

Untuk menggunakannya tinggal script ini
labelmilas = terbilang(me.txtmisal.text)

Buat modul baru kemudian pastekan coding berikut :

Option Explicit



'***************
' Fungsi Utama
' Mengubah Angka Menjadi Teks
' Eka Priatna
' http://priatna.or.id/
'***************

Function Terbilang(ByVal MyNumber)
On Error Resume Next
Dim Rupiah, Sen, Temp
Dim Des, Desimal, Count, Tmp
Dim IsNeg

ReDim Place(9) As String
Place(2) = "Ribu "
Place(3) = "Juta "
Place(4) = "Milyar "
Place(5) = "Trilyun "

'Ubah angka menjadi string
MyNumber = Round(MyNumber, 2)
MyNumber = Trim(Str(MyNumber))

'Cek bilangan negatif
If Mid(MyNumber, 1, 1) = "-" Then
MyNumber = Right(MyNumber, Len(MyNumber) - 1)
IsNeg = True
End If

'Posisi desimal, 0 jika bil. bulat
Desimal = InStr(MyNumber, ".")
'Pembulatan sen, dua angka di belakang koma
Des = Mid(MyNumber, Desimal + 2)
If Desimal > 0 Then
Tmp = Left(Mid(MyNumber, Desimal + 1) & "00", 2)
If Left(Tmp, 1) = "0" Then
Tmp = Mid(Tmp, 2)
Sen = Satuan(Tmp)
Else
Sen = Puluhan(Tmp)
End If
MyNumber = Trim(Left(MyNumber, Desimal - 1))
End If

Count = 1
Do While MyNumber <> ""
Temp = Ratusan(Right(MyNumber, 3), Count)
If Temp <> "" Then Rupiah = Temp & Place(Count) & Rupiah
If Len(MyNumber) > 3 Then
MyNumber = Left(MyNumber, Len(MyNumber) - 3)
Else
MyNumber = ""
End If
Count = Count + 1
Loop

Select Case Rupiah
Case ""
Rupiah = "Nol Rupiah"
Case Else
Rupiah = Rupiah & "Rupiah"
End Select

Select Case Sen
Case ""
Sen = ""
Case Else
Sen = " dan " & Sen & "sen"
End Select

If IsNeg = True Then
Terbilang = "minus " & Rupiah & Sen
Else
Terbilang = Rupiah & Sen
End If

End Function


'**************************************
' Mengubah angka 100-999 menjadi teks *
'**************************************
Function Ratusan(ByVal MyNumber, Count)
Dim Result As String
Dim Tmp

If Val(MyNumber) = 0 Then Exit Function
MyNumber = Right("000" & MyNumber, 3)

'Mengubah seribu
If MyNumber = "001" And Count = 2 Then
Ratusan = "Se"
Exit Function
End If

'Mengubah ratusan
If Mid(MyNumber, 1, 1) <> "0" Then
If Mid(MyNumber, 1, 1) = "1" Then
Result = "Seratus "
Else
Result = Satuan(Mid(MyNumber, 1, 1)) & "Ratus "
End If
End If

'Mengubah puluhan dan satuan
If Mid(MyNumber, 2, 1) <> "0" Then
Result = Result & Puluhan(Mid(MyNumber, 2))
Else
Result = Result & Satuan(Mid(MyNumber, 3))
End If

Ratusan = Result

End Function


'*******************
' Mengubah puluhan *
'*******************
Function Puluhan(TeksPuluhan)
Dim Result As String

Result = ""
' nilai antara 10-19
If Val(Left(TeksPuluhan, 1)) = 1 Then
Select Case Val(TeksPuluhan)
Case 10: Result = "Sepuluh "
Case 11: Result = "Sebelas "
Case Else
Result = Satuan(Mid(TeksPuluhan, 2)) & "belas "
End Select
' nilai antara 20-99
Else
Result = Satuan(Mid(TeksPuluhan, 1, 1)) _
& "Puluh "
Result = Result & Satuan(Right(TeksPuluhan, 1))
'satuan
End If
Puluhan = Result
End Function


'********************************
' Mengubah satuan menjadi teks. *
'********************************
Function Satuan(Digit)
Select Case Val(Digit)
Case 1: Satuan = "Satu "
Case 2: Satuan = "Dua "
Case 3: Satuan = "Tiga "
Case 4: Satuan = "Empat "
Case 5: Satuan = "Lima "
Case 6: Satuan = "Enam "
Case 7: Satuan = "Tujuh "
Case 8: Satuan = "Delapan "
Case 9: Satuan = "Sembilan "
Case Else: Satuan = ""
End Select
End Function

Script Export ke excel VB6

Sub export()
progress.Show

'Misal Nie querynya :
sql_export = "select * from barang"

'Yang dibawah ini untu progress bar-nya
progress.ProgressBar1.Value = i



Set AppExcel = New Excel.Application
Set ExcelWBk = AppExcel.Workbooks.Add
Dim ColField As Collection
Dim jmlField As Integer
Set ColField = New Collection
Set ExcelWS = ExcelWBk.Worksheets.Add




Set expo = New ADODB.Recordset
expo.Open sql_export, konek, adOpenDynamic, adLockOptimistic

For jmlField = 0 To expo.Fields.Count - 1
ExcelWS.Cells(1, jmlField + 1) = expo.Fields(jmlField).Name
ColField.Add expo.Fields(jmlField).Name
DoEvents
Next jmlField

Dim Pos As Long
Pos = 2
terong = expo.RecordCount

If Not expo.EOF Then
expo.MoveFirst
While Not expo.EOF
For jmlField = 1 To ColField.Count
test = expo(ColField(1))
ExcelWS.Cells(Pos, jmlField) = expo(ColField(jmlField))
ato = (((Pos - 1) * 100) / terong)
progress.ProgressBar1.Value = Val(ato)
progress.Label2.Caption = Val(ato)
Next jmlField
Pos = Pos + 1
expo.MoveNext
DoEvents
Wend
End If
expo.Close

If Err <> 0 Then
Bego = True
Err.Clear
End If
AppExcel.Visible = True
Unload progress
End Sub