syntax untuk tgl

Posted by Aiska Hendra

--- sherinalavenda wrote:
sebuah database berisi

Tgl Nama Barang StockAwal Masuk Keluar Akhir
1/1/08 barang A 10 2 0 12
5/1/08 barang A 12 0 1 11
10/1/08 barang A 11 5 0 16

ada yg bisa bantu syntax untuk mengetahui stock awal & stock akhir
tanggal 7/1/08(dtpicker)?
thank u.

-------------------------------------------------
Dear sherina,

Mungkin ada sedikit tambahan dan kritik dari saya.
Kalau saya bilang anda telah melakukan pemborosan terhadap data.
karena anda melakukan pembuatan field yang tidak perlu. sebaiknya anda
buang saja field. StockAwal, Masuk, Keluar, dan akhir. Dan diganti
dengan field qty (kuantitas). sehingga isi dari tabel menjadi seperi ini

tblBarang:
1. idBarang (LongInteger) auto increment, Primary Key
2. NamaBarang (nVarChar)

tblStock:
1. idStock (LongInteger) auto increment, Primary Key
2. idBarang (LongInteger)
3. Tanggal (date/time)
4. Qty (Long Integer)

Note:
Untuk barang masuk field qty adalah positif(+) dan untuk barang keluar
negatif(-).

Untuk mendapatkan stock awal, Transaksi Pada Hari tertentu atau Stock
Akhir anda dapat mengambilnya dengan menggunakan SUM.

contoh:

Melihat Stock Awal tanggal 1 Januari 2008:
"SELECT tblBarang.NamaBarang, Sum(tblStock.qty) AS StockAwal
FROM tblBarang INNER JOIN tblStock ON tblBarang.idBarang =
tblStock.idBarang
WHERE tblStock.Tanggal<#1/1/2008#
GROUP BY tblBarang.NamaBarang"

Melihat Stock Akhir tanggal 31 Januari 2008:
"SELECT tblBarang.NamaBarang, Sum(tblStock.qty) AS StockAkhir
FROM tblBarang INNER JOIN tblStock ON tblBarang.idBarang =
tblStock.idBarang
WHERE tblStock.Tanggal<#1/31/2008#
GROUP BY tblBarang.NamaBarang"

Melihat Barang Masuk Selama Bulan Januari 2008:
SELECT tblBarang.NamaBarang, Sum(tblStock.qty) AS BarangMasuk
FROM tblBarang INNER JOIN tblStock ON tblBarang.idBarang =
tblStock.idBarang
WHERE Month([Tanggal])=1
AND Year([Tanggal])=2008
AND tblStock.qty>0
GROUP BY tblBarang.NamaBarang

Melihat Barang Keluar Selama Bulan Januari 2008:
SELECT tblBarang.NamaBarang, Sum(tblStock.qty) AS BarangKeluar
FROM tblBarang INNER JOIN tblStock ON tblBarang.idBarang =
tblStock.idBarang
WHERE Month([Tanggal])=1
AND Year([Tanggal])=2008
AND tblStock.qty<0
GROUP BY tblBarang.NamaBarang

Ok, sekian tambahan dari saya. saya mohon maaf apabila anda
tersinggung dan mohon maaf apabila cara ini cukup membingungkan buat
anda tapi setidaknya anda dapat belajar untuk dapat mengoptimalkan
database dengan menggunakan Join Tabel.

Terima Kasih dan Selamat Mencoba.

Salam,

Aiska Hendra

Re: help VB

Posted by Aiska Hendra

--- In indoprog-vb@yahoogroups.com, SELVI OYE wrote:
para pakar VB, minta tolong dong dgn scrip berikut :
Database acces.
Table Film :
-Â Â Â Â Â Â Â kode_film
-Â Â Â Â Â Â Â judul
-Â Â Â Â Â Â Â qty
-       status ( “ada” & “keluar”)
Â
kronologisnya :
jika judul film dgn qty 3 dan dipinjam 1 berarti tinggal 2 dgn status
“keluar”.
Nah jika film akan dihapus dari database, maka akan diselecsi dgn status
“ada” jadi jika status ada maka bisa dihapus.
Â
Ok, selanjutnya aku udah bikin scrip di Vb seperti ini :
Â
Private Sub listView1_DblClick()
On Error GoTo ErrPesan
Dim i As Integer
Dim TempIndex As Integer
Dim strSQL As String
Dim tempKode, tempstatus As String
Â
Â
   If listView1.ListItems.Count = 0 Then
        Exit Sub
   End If
Â
 TempIndex = listView1.SelectedItem.Index
 tempKode = listView1.ListItems.Item(TempIndex)
Â
  'Konfirmasi penghapusan record
 Â
 jawab = MsgBox("Apakah Anda yakin Data " & kode_film & _
 vbCrLf & " Akan dihapus ? ", vbInformation + vbYesNo)
 If jawab = vbNo Then Exit Sub
 con.Open "Provider = Microsoft.Jet.OLEDB.4.0; Data Source=" & App.Path &
"\rental1.mdb"
 If rsfilm.Fields("status") = "ADA" Then
       strSQL = "DELETE FROM film where kode_film = '" & tempKode & "'"
      Â
       con.Execute strSQL
       MsgBox "DATA FILM TELAH DIHAPUS"
Â
 label6.Caption = "Total Record : " & rsfilm.RecordCount
 i = listView1.SelectedItem.Index
 listView1.ListItems.Remove i
 End If
 Exit Sub
ErrPesan:
  MsgBox "Data belum bisa dihapus " & vbCrLf & " Film Masih diPinjam ",
vbInformation
 End Sub
Â
Tapi yg ada adalah masuk ke errpesan, sehingga data tidak bisa dihapus.
Mohon petunjuknya.



Dear Selvi,

Coba anda ganti kode anda menjadi seperti ini:

Private Sub listView1_DblClick()

On Error GoTo ErrPesan
Dim i As Integer
Dim TempIndex As Integer
Dim strSQL As String
Dim tempKode, tempstatus As String

If listView1.ListItems.Count = 0 Then Exit Sub
If listView1.SelectedItem Is Nothing Then Exit Sub
set con = New ADODB.Connection

TempIndex = listView1.SelectedItem.Index
tempKode = listView1.SelectedItem

' Sory disini object rsfilm masih belom jelas dimana posisi kursornya
jadi anda harus memastikan bahwa rsfilm berada pada posisi yang benar
sehingga anda tidak dapat membuat statement apakah status ada.
Sebaiknya anda coba ambil data status dari
listview1.selecteditem.subitem(?) dimana sub item status tersebut ada.

'asumsi bahwa kolom status berada pada subitem 3
if listview1.SelectedItem.SubItem(3) = "ADA" Then
jawab = MsgBox("Apakah Anda yakin Data " & kode_film & _
vbCrLf & " Akan dihapus ? ", vbInformation + vbYesNo)
If jawab = vbYes Then
con.CursorLocation = adUseServer
con.Open "Provider = Microsoft.Jet.OLEDB.4.0; Data Source=" & _
App.Path & "\rental1.mdb"
strSQL = "DELETE * FROM film where kode_film = '" & tempKode & "'"
con.BeginTrans
con.Execute strSQL
con.CommitTrans
listView1.ListItems.Remove TempIndex
MsgBox "DATA FILM TELAH DIHAPUS"
set con = Nothing
End If
Else
MsgBox "Data belum bisa dihapus " & vbCrLf & " Film Masih diPinjam", vbInformation
End If

Exit Sub
ErrPesan:
If con.State = adStateOpen Then
con.RollBackTrans
set con = nothing
End If

MsgBox "Error !!! " & vbCrLf & Err.Description, vbExclamation

End Sub

Note:

BeginTrans
The BeginTrans method starts a new transaction.
This method can also be used to return a long value that is the level
of nested transactions. A top level transaction has a return value of
1. Each additional level increments by one.

CommitTrans
The CommitTrans method saves all changes made since the last
BeginTrans method call, and ends the current transaction.
Since transactions can be nested, all lower-level transactions must be
resolved before you can resolve higher-level transactions.

RollbackTrans
The RollbackTrans method cancels all changes made since the last
BeginTrans method call, and ends the transaction.
Since transactions can be nested, all lower-level transactions must be
resolved before you can resolve higher-level transactions.


Ok semoga dengan sedikit Script diatas dapat membatu anda
Terima Kasih dan Selamat Mencoba

Salam,


Aiska Hendra

Alokasi Memory

Posted by Aiska Hendra

Salah Satu alasan para programmer untuk menggunakan Windows API dapat melakukan memanipulasi memory,
untuk dapat memanipulasi memory kita dapat menggunakan Fungsi API

Globalalloc (mengalokasikan memori),
Globallock (mengunci memori dan mendapatkan pointernya),
Globalunlock ( membuka kunci memori), dan
Globalfree ( Disalokasikan memori)

Sekarang kita lihat bagaimana cara mengcopy data kedalam memory.
untuk itu kita perlu satu fungsi API lagi untuk mengcopy memori yaitu
MoveMemory (memindah posisi memory)

Sebelum kita dapat menggunakan Fungsi API kita harus mendeklarasikan fungsi API tersebut, sekarang kita deklarasikan dulu fungsi API-nya.

Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal
dwBytes As Long) As Long

jika anda bingung menggunakan wFlags pada fungsi Globalalloc ini daftar constant value untuk wFlags Globalalloc:
• GMEM_FIXED—&H0
• GMEM_MOVEABLE—&H2
• GMEM_NOCOMPACT—&H10
• GMEM_NODISCARD—&H20
• GMEM_ZEROINIT—&H40
• GMEM_MODIFY—&H80
• GMEM_DISCARDABLE—&H100
• GMEM_NOT_BANKED—&H1000
• GMEM_SHARE—&H2000
• GMEM_DDESHARE—&H2000
• GMEM_NOTIFY—&H4000
• GMEM_LOWER—GMEM_NOT_BANKED
• GMEM_VALID_FLAGS—&H7F72
• GMEM_INVALID_HANDLE—&H8000

Selain wFlags anda juga anda juga harus menentukan dwBytes yang merupakan jumlah byte yang diminta dari memory.

Untuk mendapatkan pointer dari memory anda dapat menggunakan Globallock yang akan mengunci memory yang telah di alokasikan dari Globalalloc.

Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long

Selain GlobalAlloc dan GlobalLock anda juga dapat memindah data yang ada didalam memory dengan menggunakan Fungsi MoveMemory.

Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal dest As Any, ByVal src As Any, ByVal length As Long)

Ini argumen untuk MoveMemory:
• dest—Pointer pada buffer tujuan
• src—Pointer pada buffer sumber
• length—jumlah byte memory yang akan dipindah

Untuk mengalokasikan memory kota gunakan Globalalloc, untuk mengunci dan mengambil pointer dari memory kita gunakan Globallock dan untuk membukanya kembali kita gunakan fungsi API Globalunlock. Deklarasi untuk fungsi API ini adalah:

Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long

Dimana hMem adalah pointer dari memory yang telah terkunci.

Selain itu kita juga perlu melakukan pembersihan dan mendisalokasikan data memory dengan menggunakan fungsi API Globalfree

Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long

Dimana hMem adalah buffer dari memory yang dialokasikan.

OK sekarang kita coba buat sample programnya, bagaimana menimpan string yang yang dimasukkan oleh user kedalam textbox kedalam memory dan memindahkannya. Dengan sample ini diharapkan anda dapat memahami perpindahan data dalam memory.

Kita mulai dengan memasukkan 40 karakter long buffer untuk string yang anda didalam form.

Const DataLength = 40
Dim outbuffer As String * DataLength

Dim hMemory As Long
Dim hMemoryPointer As Long

Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long
rivate Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal dest As Any, ByVal src As Any, ByVal length As Long)

Const GMEM_MOVEABLE = &H2

Pada bagian Form design kita membutuhkan 2 object Textbox dan 2 CommandButton, tambahkan object tersebut pada form dan tambahkan kode berikut ini pada CommandButton:

Private Sub Command1_Click()
outbuffer = Text1.Text
‘ mengambil text dari Text1
hMemory = GlobalAlloc(GMEM_MOVEABLE, DataLength)
‘ mengalokasikan memori yang akan kita gunakan (outbuffer)
hMemoryPointer = GlobalLock(hMemory)
‘ Mengunci dan mendapatkan pointer dari memory.
Call MoveMemory(hMemoryPointer, outbuffer, DataLength)
‘ Memindahkan data outbuffer kedalam ke memory yang lain
End Sub

Kode diatas berfungsi untuk mengalokasikan isi dari dari Text1 dan memindahkannya buffer ke memory yang telah dialokasikan. Sekarang kita buat kode untuk melepaskan buffer dari dari memory dan memindahkannya kedalam text2.

Private Sub Command2_Click()
Call MoveMemory(inbuffer, hMemoryPointer, DataLength)
Text2.Text = inbuffer
GlobalUnlock (hMemoryPointer)
GlobalFree (hMemory)
End Sub

Ok cukup sekian tulisan dari Aiska semoga tulisan ini bisa bermanfaat bagi teman-teman yang membaca dan terutama bagi saya sendiri yang sering lupa :)

Terima Kasih

Salam,


^Aiska Hendra^