sebelumnya maap baru bisa jawab sekarang, tapi bagus
sudah berusaha sendiri,

Ok ... cara ini juga cukup bagus,
dan cukup sederhana, kalo mau yg susahan,
bermaen-maen dengan perintah "select" nya,
saya kasih contohnya yah,
sub nya jadi gini

Private Sub Timer1_Timer()
Dim dTanggal As Date

With rs
.ActiveConnection = cn
.CursorLocation = adUseClient
.CursorType = adOpenDynamic
.LockType = adLockOptimistic

'--- ini perintah select nya

.Source = "SELECT * From Data " & _
"WHERE (datediff('m',tanggal_deadline," & _
"DateAdd('m', 2,'" & Date & "'))=0 or " & _
"datediff('m',tanggal_deadline,DateAdd('m', 2,'" & _
Date & "'))>0) and status='0';"

.Open

End With

If Not rs.EOF Then
    Form2.Show
End If

'-- do close dulu supaya bisa select lagi
rs.Close

With rs
.ActiveConnection = cn
.CursorLocation = adUseClient
.CursorType = adOpenDynamic
.LockType = adLockOptimistic

'--- ini perintah select nya

.Source = "SELECT * From Data " & _
"WHERE (datediff('m',tanggal_deadline," & _
"DateAdd('m', 6,'" & Date & "'))=0 or " & _
"datediff('m',tanggal_deadline,DateAdd('m', 6,'" & _
Date & "'))>0) and status='0';"

.Open

End With

If Not rs.EOF Then
    Form3.Show
End If

'-- di close dulu karena ada di dalam proses loop
rs.Close

Debug.Print "Nothing activated!"
End Sub



pusing yah liatnya,kalo ada waktu di pelajarin aja.

jadi

Private Sub Command1_Click()
rs.Fields("Status").Value = 1
rs.Update
frmRemind3.Visible = False
Load frmMenu
End Sub

kalo perintah di atas akan update
semua status jadi 1, padahal harusnya
hanya data yg tgl itu aja, jadi masih bisa
"select " data untuk bulan berikutnya.

jadi rs nya itu harus berisi hanya data 
yg bulan itu saja, caranya,utak atik di perintah 
"select" nya. perintah select yg saya buat bisa
digunakan,
saya akan coba menerangkannya,

"SELECT * From Data " & _
"WHERE (datediff('m',tanggal_deadline," & _
"DateAdd('m', 2,'" & Date & "'))=0 or " & _
"datediff('m',tanggal_deadline,DateAdd('m', 2,'" & _
Date & "'))>0) and status='0';"

perintah datediff itu untuk mendapatkan selisih antara
dua tanggal, 

syntax nya: datediff(interval,date1,date2)
        interval = 'm' untuk month = parameter di DATEADD nya
VB
selebihnya bisa baca di helpnya access.

saya ambil contoh dari query nya yah,
datediff('m',tanggal_deadline,DateAdd('m',
2,'2007-8-23'))=0
hasil dari datediff date2-date1, kalo hasilnya 0
berarti date2
dan date1 nilainya sama, kalo kurang dari 0 berarti
date2 lebih 
kecil dari date1, kira2 gitu cara kerja datediff.

nah untuk query di atas kebalikan dari pengecekan di
VB,
dateadd nya menggunakan tgl hari ini, dan bukan -2
tapi 2,
coba deh di pelajarin query nya, ini masih mudah kok.

jadi querynya di taruh di rs.source di form2/3, jgn
lupa ganti
pengurangan di dateadd nya, untuk form2 angkanya 2,
untuk form3
angkanya 6 (saya pake contoh yg pertama kali di kirim)
dan seterusnya.

untuk perintah di Command1_Click tidak ada perubahan.

dengan begini gak usah pusing ama statusnya lagi,
otamatis
yg di set jadi 1, hanya data yg memenuhi syaratnya
saja.

coba lagi yah, kalo ada yg bingung kasih tau aja.

moga bermanfaat ...


-----Original Message-----
From: [email protected]
[mailto:[EMAIL PROTECTED] On
Behalf Of inter_aray26
Sent: Thursday, August 23, 2007 5:18 PM
To: [email protected]
Subject: Re: [indoprog-vb] [ask]looping date

saya udah mencoba sarannya...
jadi saya menambahkan field dalam database dengan nama
status...
n pada input data saya tambahin 1 textbox dengan
default 0 dgn 
status Visible...
jadi fungsi textbox ini cuma untuk mamasukkan nilai 0
kedalam field 
status dalam database, memang bisa aja kita masukkan
dengan 
perintah "select" cuma saya kurang mengerti... maklum
newbie

kemudian dalam timernya saya tambahkan coding seperti
ini :

Private Sub Timer2_Timer()
Dim dTanggal As Date
Dim a As String

With rs
Do While Not .EOF
dTanggal = ![Tanggal_Deadline]
a = ![Status]
If (Date = DateAdd("m", -6, dTanggal)) Then
If a = 0 Then
frmRemind1.Label1.Caption = ![Tanggal_Deadline]
frmRemind1.Label2.Caption = ![Keterangan]
frmRemind1.Show vbModal, frmMenu
Exit Do
End If
End If

If (Date = DateAdd("m", -9, dTanggal)) Then
If a = 0 Then
frmRemind2.Label1.Caption = ![Tanggal_Deadline]
frmRemind2.Label2.Caption = ![Keterangan]
frmRemind2.Show vbModal, frmMenu
Exit Do
End If
End If

If (Date = DateAdd("m", -12, dTanggal)) Then
If a = 0 Then
frmRemind3.Label1.Caption = ![Tanggal_Deadline]
frmRemind3.Label2.Caption = ![Keterangan]
frmRemind3.Show vbModal, frmMenu
Exit Do
End If
End If

.MoveNext
Loop
.MoveFirst
End With
Debug.Print "Nothing activated!"
End Sub

dilihat dari coding diatas, akan terdapat 3 kali
reminder untuk 
setiap tanggal yg dimasukkan...
oleh karena itu...
dalam frmReminder1, frmReminder2, dan frmReminder3
akan menampilkan pesan dan commandbutton...

yg saya inginkan setiap reminder itu muncul dan kita
tekan 
commandbutton status dalam field database akan berubah
1, ini 
dimaksudkan supaya looping yg terjadi ga akan membaca
lagi data yg 
telah dimunculkan...

saya dalam commandButton menggunakan coding ini :

'saya ambil dari contoh frmReminder3
Private Sub Command1_Click()
rs.Fields("Status").Value = 1
rs.Update
frmRemind3.Visible = False
Load frmMenu
End Sub

cara ini emang berhasil, tapi ada 1 masalah lagi
Pertanyaannya :
saya ingin status dalam database kembali berubah 0,
ini dimaksudkan 
untuk menampilkan kembali reminder2 yg lain beberapa
bulan kemudian,
karena setiap tanggalkan akan memunculkan 3 kali
reminder...
klo status dalam database ini tetep bernilai 1, maka
reminder yg 
lain nga akan muncul lagi donk
saya ingin setelah reminder muncul, hari besoknya or
bulan besoknya, 
Statusnya berubah menjadi 0 secara otomatis,,,

kira2 bisa nga yah...
apa menggunakan perintah
DateAdd ??? or apa??

duh saya kurang mengerti, tolong bantuannya lagi
yah...
terima kasih...



 



      
________________________________________________________ 
Kunjungi halaman depan Yahoo! Indonesia yang baru! 
http://id.yahoo.com/

Kirim email ke