Thursday, June 22, 2006

CH Load Process, Accomplished !!!

Thursday, June 22th 2006

Finally, sistem Load data CH dr database Access ke Spreadsheet beres emoticon!!!  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 emoticon. 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