Thursday, June 22th 2006
Finally, sistem Load data CH dr database Access ke Spreadsheet beres !!! Makan waktu sekitar 3 jam buat gw untuk ngutak2 program sebelum jalan dengan benar. Dan emang proses load sedikit lebih rumit dari proses save. Untungnya, pengalaman sistem Load dr FKlim benar2 membantu gw supaya nggak bikin kesalahan yang sama sampai dua kali.
Walaupun begitu, program sempat macet beberapa kali. Penyebabnya, sistem load CH beda dengan yg lain. Kalo FKlim misalnya, tiap baris dianalogikan sebagai record, sedangkan Kolom sebagai Field. Nah, kalo CH, satu kolom dijadikan satu record, dan baris dijadikan fieldnya. Jadi prosesnya kebalik dengan FKlim . Yg bikin bingung adalah loopingnya. Kalo di FKlim, gw nggak usah susah nge-loop baris, karena sudah otomatis berdasarkan record di database, sedangkan kalo di Ch gw harus ngeloop manual tiap baris dan kolom, supaya isi field yg dimaksud bisa muncul di spreadsheet. Untungnya, field untuk CH lumayan teratur, jd gw bisa nge-loop dgn mudah berdasarkan indeksnya.
Sub LoadDataCH(NamaGrid As VSFlexGrid, NoStasiun As String, Tahun As String)
Dim QueryData As String
Dim Baris As Integer, Kolom As Integer
With NamaGrid
QueryData = "SELECT * from CHHarian WHERE NoSta = '" & _
NoStasiun & "' AND Year = " & Tahun & " ORDER by Month"
RSData.Open QueryData, DBData
RSData.MoveFirst
Kolom = 1
Do While RSData.EOF True
For Baris = 1 To 31
SystemLoadDB.AfterLoadCH NamaGrid, Baris + 3, Baris, Kolom, 300, 0
Next Baris
If Kolom 12 Then
Kolom = Kolom + 1
End If
RSData.MoveNext
Loop
End With
End Sub
Langkah selanjutnya adalah, (lagi-lagi ..) statistik dan perhitungan data seperti pada proses entri data. Ini jg sempat bikin "macet" jg tadinya, soalnya, seperti blog gw sebelumnya, proses perhitungan statistik CH ada di level form (private), bukan modul, jd nggak bisa dipanggil begitu saja dr modul lain. Sempat takut jg tadinya, tapi akhirnya gw nekat jg mindahin prosedurnya ke modul standar supaya bisa dipanggil dr modul lain. Soalnya kalo nggak gitu, prosesnya bakalan ngadat dan nggak akan selesai2.
Tp pengalaman lg2 ada gunanya, setelah gw pindahin prosedurnya, gw cobain satu demi satu, nggak sekaligus. Jadi kalo ada kesalahan, gw tau kesalahan itu ada di mana. And finally, the process went smoothly :).
Sub AfterLoadCH(NamaGrid As VSFlexGrid, IndeksField As Integer, Baris As Integer, Kolom As Integer, NMax As Integer, NMin As Integer)
Dim JumlahBaris As Integer
With NamaGrid
If (RSData.Fields(IndeksField) 99999) Then
.TextMatrix(Baris, Kolom) = RSData.Fields(IndeksField)
If (RSData.Fields(IndeksField) 88888) Then
.Cell(flexcpFloodPercent, Baris, Kolom) = 100 * (.TextMatrix(Baris, Kolom) - NMin) / (NMax - NMin)
End If
Else
.TextMatrix(Baris, Kolom) = Empty
End If
SystemProcess.RangeData NamaGrid, Kolom, RSData.Fields("Year"), JumlahBaris
SystemData2.CHStatistic NamaGrid, Kolom, JumlahBaris
End With
End Sub
Hehehe ... baru kali ini gw ngerjain proses save dan load plus formatting cuman dalam waktu 6 Jam. Nggak sia-sia gw pulang kemarin. Sekarang tinggal fungsi-fungsi kecil lainnya. InsyaAllah malam ini beres :) .
No comments:
Post a Comment