Arsip: [ask] hitung total
more 17 years ago
cyber_hecker
spesifikasi :
Delphi 7.0
mySQL Data Access Component 4.0.0.2 by CoreLab
mySQL ver. 5.0.24a-community-nt
dari dulu saya paling bingung adalah pada bagian menghitung total harga dari barang. contoh kita membuat faktur. satu faktur terdiri dari banyak item. nah kesemua item bila di tambah dan dihapus kan ada keterangan total harga yang selalu berubah-ubah.
kalo kita tidak menggunakan cache.. biasanya saya langsung mengaksesnya lewat query. contoh :
SELECT SUM(HARGA) FROM TB_ITEM_JUAL
ini bisa dilakukan karena harga sudah disimpan kedalam database secara langsung.
tapi bila kita menggunakan cache.. data tidak tersimpan kedalam database. jadi cara diatas tidak bisa saya lakukan. untuk mengakali hal tersebut, saya menggunakan function bego sebagai berikut :
function TFTrPOTemp.myHitungTotalAll: Single;
var
bm: TBookmark;
lTotal : Single;
begin
Result := 0;
if myQuPOTempDet.Active then
with myQuPOTempDet do begin
bm := GetBookmark;
DisableControls;
try
lTotal := 0;
First;
while not Eof do begin
lTotal := lTotal + FieldByName('harga').AsFloat;
Next;
end;
Result := lTotal;
finally
if BookmarkValid(bm) then
GotoBookmark(bm);
FreeBookmark(bm);
EnableControls;
end;
end;
end;
prosedur ini ku letakan pada event afterpost dan afterdelete. cara ini berhasil tapi masih punya kelemahan yang sangat fatal yaitu : bila datanya banyak.. prosesnya di jamin lama banget. walaupun kemungkinan untuk data banyak masih kecil sekali. emang ada orang belanja sampe 1000 item sekali belanja ??
sebenernya komponen myDAC ini sudah disediakan fasilitas untuk melakukan perhitungan seperti ini. yaitu dengan menggunakan TAggregateField. tapi sudah ku coba dan tidak pernah berhasil menampilkan datanya. saya juga udah mencoba mencarinya di google dan forum milik corelab (www.crlab.com/forum) tapi belum menemukan jawabannya.
nah.. adakah rekan-rekan disini mempunyai cara yang lebih ampuh ??
more 17 years ago
Manz
Ada cara lebih ampuh, ... kalo dikau pake DevEx Grid seperti ini dijamin gampang.... meskipun masih menggunakan metode looping, tapi ini lebih cepat daripada langsung akses dari db nya...
Tinggal simpan function perhitungan total di event : DataSummaryFooterSummaryItems0GetText(... bla bla bla parameter)
dikau sudah dapat menghitung seperti itu dengan cepatnya.
Sama halnya dengan daku disini ... tadinya seperti itu, tapi sekarang sudah SOLVED ... :mrgreen:
more 17 years ago
deLogic
Kalo gak pengen looping per record.. ya taruh aja perhitungan di setiap event Post, Delete...misalnya untuk delete, maka kasih perhitungan lTotal := lTotal - NilaiFieldDariRecordYgDiDelete.. demikian pula untuk Post, tinggal bedakan aja apakah itu Insert atau Update.
Btw.. kayaknya ada sesuatu yg aneh kalo proses looping dan perhitungan dengan record < 1000 dikau bilang lambat.. biasanya sih cepat, apalagi perhitungan dikau cukup simpel.
more 17 years ago
cyber_hecker
@manz_delphi: Ada cara lebih ampuh, ... kalo dikau pake DevEx Grid seperti ini dijamin gampang.... meskipun masih menggunakan metode looping, tapi ini lebih cepat daripada langsung akses dari db nya...waduh.. kalo pake cara dengan menggunakan komponen, SMDBGrid ku juga punya fungsi bawaan untuk menghitung total seperti itu. tapi kurang keren.. karena pernah ku coba ternyata caranya juga hampir sama dengan fungsi looping ku diatas, yaitu melakukan perhitungan dengan cara bego :D.
@deLogic: Kalo gak pengen looping per record.. ya taruh aja perhitungan di setiap event Post, Delete...misalnya untuk delete, maka kasih perhitungan lTotal := lTotal - NilaiFieldDariRecordYgDiDelete.. demikian pula untuk Post, tinggal bedakan aja apakah itu Insert atau Update.nah.. kalo mo diletakkan kayak di atas. karena kadang-kadang sulit mbeda in antara insert dan edit. sebagi contoh : harga barang yang kita edit awalnya 5000. dan kita ubah menjadi 1000. nah lTotal harus kita kurangi 4000 kan ?? dari mana kita tahu bahwa harga awal adalah 5000 dan di ubah menjadi 1000. kecuali kita beri prosedur untuk menyimpan nilai awal pada event before edit. saya kira dengan model kayak gini cukup merepotkan.. karena harus mikir kira-kira event apa aja yang harus kita preventif agar tidak terjadi kesalahan hitung. kita tidak tahu sebeapa kreatifnya user kita wekeke.... emang kelebihannya tidak terjadi looping sia-sia. yang dikerjakan adalah proses pada record active aja. untuk proses looping, emang gak ada hitung macem-macem. tapi bayangin aja.. kita entry data. anggap aja setelah menyimpan melakukan perhitungan untuk mencari total sebanyak 1000 record. pasti kelihatan ada jeda.. alias freeze :D. saya kemaren nyoba pengen menggunakan thread. tapi hasilnya 0 besar.. karena diriku gak bisa gimana cara make thread... contoh yang di berikan oleh oom google minta ampun diriku. gak bisa ngerti logikannya.. huekekekek..... :D jadi kayaknya rekan-rekan belum mempunyai cara ampuh ya ? :( ku pikir ada cara yang lebih simple.. gak pake prosedur macem-macem. but, thanks atas sedikit pencerahannya ...
more 17 years ago
deLogic
@CH:
merepotkan? itu sih tergantung.. :) kalupun banyak prosedurnya, kan singkat2 kodenya..
btw mengenai jeda proses looping perhitunganpasti adalah, lama waktunya tergantung kode perhitungan dikau dan kemampuan komputer, tinggal dikau aja pake trik biar gak keliatan freeze.. :)
more 17 years ago
Manz
@CH: waduh.. kalo pake cara dengan menggunakan komponen, SMDBGrid ku juga punya fungsi bawaan untuk menghitung total seperti itu. tapi kurang keren.. karena pernah ku coba ternyata caranya juga hampir sama dengan fungsi looping ku diatas, yaitu melakukan perhitungan dengan cara bego :D.Ya jelas kalo hanya pake fungsi bawaan dari grid tersebut... dikau kan bisa customized code untuk totalnya... sama seperti hal yang aku lakukan dengan menggunakan customized code, gak langsung dari bawaan grid tersebut... jadi coding nya gak bego bego benerrr ... meskipun memang iya bego :mrgreen: Total yang aku pake malah : qty price - disc (kalo ada disc) .... kalo engga berarti qty price ajah, dan ini juga bisa dipergunakan untuk mengetahui value asalnya, alias underlying value (ambil istilah VB sorry).
@CH: nah.. kalo mo diletakkan kayak di atas. karena kadang-kadang sulit mbeda in antara insert dan edit. sebagi contoh : harga barang yang kita edit awalnya 5000. dan kita ubah menjadi 1000. nah lTotal harus kita kurangi 4000 kan ?? dari mana kita tahu bahwa harga awal adalah 5000 dan di ubah menjadi 1000.ini kasusnya sama dengan daku pada saat tidak diketemukannya underlying value, nah aku pake DevEx ini udah ketauan bisa diambil underlying valuenya itu. Nah, kalo daku menggunakan even Before dan After post ... kalo beforepost untuk checking apakah insert atawa edit, nah untuk after postnya aku pake statusnya untuk mengetahui apakah tadi itu insert atawa edit... tidak terjadi freezing pada saat terjadi peng-update-an data baik edit atawa insert ... :mrgreen:
more ...
- Pages:
- 1
reply |
Report Obsolete
Last Articles
Last Topic
- PascalTalk #6: (Podcast) Kuliah IT di luar negeri, susah gak sih?
by LuriDarmawan in Tutorial & Community Project more 3 years ago - PascalTalk #5: UX: Research, Design and Engineer
by LuriDarmawan in Tutorial & Community Project more 4 years ago - PascalTalk #4: Obrolan Ringan Seputar IT
by LuriDarmawan in Tutorial & Community Project more 4 years ago - PascalTalk #2: Membuat Sendiri SMART HOME
by LuriDarmawan in Tutorial & Community Project more 4 years ago - PascalTalk #3: RADically Fast and Easy Mobile Apps Development with Delphi
by LuriDarmawan in Tutorial & Community Project more 4 years ago - PascalTalk #1: Pemanfaatan Artificial Intelligence di Masa Covid-19
by LuriDarmawan in Tutorial & Community Project more 4 years ago - Tempat Latihan Posting
by LuriDarmawan in OOT more 4 years ago - Archive
- Looping lagi...
by idhiel in Hal umum tentang Pascal Indonesia more 12 years ago - [ask] koneksi ke ODBC user Dsn saat runtime dengan ado
by halimanh in FireBird more 12 years ago - Validasi menggunakan data tanggal
by mas_kofa in Hal umum tentang Pascal Indonesia more 12 years ago
Random Topic
- Tips lengkap membuat aplikasi untuk mengakses Web Service
by EkoIndri in Delphi.NET more 16 years ago - Tanya tenteng Copy String
by krishy in Tip n Trik Pemrograman more 18 years ago - Delphi codenames
by deLogic in Hal umum tentang Pascal Indonesia more 19 years ago - Menampilkan stok barang berdasarkan tanggal
by deded in Hal umum tentang Pascal Indonesia more 12 years ago - Ask table exist di zeos
by ferry in Lain-lain more 16 years ago - Aplikasi Apotik
by andip70 in Hal umum tentang Pascal Indonesia more 17 years ago - Connect ke SQL Server dari Client
by unank in MsSQL more 17 years ago - Download E-Mail
by xerion in Tip n Trik Pemrograman more 18 years ago - Cek koneksi Database
by om20020 in MySQL more 13 years ago - Grumple.. Grumple...
by cyber_hecker in OOT more 19 years ago