Arsip: Query bertingkat dengan ADOQuery

 
user image
more 14 years ago

xmbohx

Hallo Saya mempunyai query spt berikut: query := 'SELECT [BARANG].NO_BRG, [q_12].Tnr_12 as tr_12,[q_24].Tnr_24 as tr_24 'FROM (((([BARANG] LEFT JOIN '+ ??????? +' ON [BARANG].NO_BRG = q_12.T_BRG) LEFT JOIN '+ + ??????? +' ON [BARANG].NO_BRG = q_24.T_BRG) '+ ''ORDER BY [BARANG].NO_BRG'; bagian ???? itu adalah query yang telah saya simpan menggunakan ADOQuery, dengan nama masing q_12 dan q_24. Command yang seharusnya tertera di sana apa, yah .. trims
user image
more 14 years ago

MrMixer

boss.. ADOQuery dari q_12 dan q_24 isi fieldnya apa sih Teruss Tabel BARANGnya sendiri isi fieldnya apa juga ya..?? Nanti kalo dikasih tahu, mungkin teman-teman lain bisa bantu.. Kalo cuma begini doaang.. Kurang jelas nih.. Kayak main tebak-tebakan..
user image
more 14 years ago

xmbohx

Ok, maaf bro jadi begini: Tabel BARANG: ________________ No_Brg | Nama_Brg ------------------------ HON | Honda YAM | Yamaha SUZ | Suzuki Tabel Tran: _________________ No_brg | Tnr | Harga -------------------------- HON | 12 | 10000000 HON | 12 | 10000000 HON | 12 | 10500000 HON | 24 | 10000000 HON | 36 | 10000000 YAM | 12 | 9000000 HON | 36 | 10000000 q_12 = SELECT [tran].NO_BRG, Count([tran].Tnr) AS Tnr_12 FROM tran INNER JOIN [SELECT [tran].Tnr FROM [tran] GROUP BY [tran].Tnr]. AS q_tnr ON [tran].Tnr = [q_tnr].Tnr WHERE ((([q_tnr].tnr)=12)) GROUP BY [trin].no_brg; q_24 = q_12 hanya pada bagian WHERE ((([q_tnr].tnr)=12)) angka 12 diganti 24. hasil dari query q_12 itu : ______________ NO_BRG | Tnr_12 ----------------------- Hon | 3 YAM |1 hasil dari query q_24 itu : ________________ NO_BRG | Tnr_24 ----------------------- Hon | 1 Nah, sekarang dari kedua query itu mau sy gabungkan dengan tabel barang sehingga hasil yang diinigkan adalah sbb : ______________________ NO_BRG | Tnr_12| Tnr_24 --------------------------------- Hon | 3 |1 Yam | 1| 0 Suz | 0 | 0 BEntuk di atas bisa menggunakan query spt ini : SELECT [BARANG].NO_BRG, [q_12].Tnr_12 as tr_12,[q_24].Tnr_24 as tr_24 FROM (((([BARANG] LEFT JOIN q_12 ON [BARANG].NO_BRG = q_12.no_BRG) LEFT JOIN q_24 ON [BARANG].NO_BRG = q_24.T_BRG) ORDER BY [BARANG].NO_BRG atau dengan mengganti q_12 dan q_24 dengan lgs menuliska querynya. Query ini berjalan mulus kalo saya coba di access, kalo dicoba di delphi (sy menggunakan Delphi 6) saat Run ada error Too few parameter expected 1. kata temen, deplhi ngga bisa kalo menggunakan query bertingkat ( ? ). lalu sy coba akalin dengan membuat AdoQuery yang berisi q_12 dan q_24 itu. cuman problemnya, saat menulilskan kode query itu gimana, yah di delphi? bagian mana yang dipanggil dari q_12 itu? property string kah? ato q_12 itu mesti dalam kondisi active? Demikian, smg bisa memperjelas pertanyaannya. tolong dibantu
user image
more 14 years ago

DelphiExpert

hiyaaaah... kalo q_12 ama q_24 digabungin lagi hasilnya kan sama aja seperti kalo dikau tulis 'full query', cara gabungin ya akses aja isi 1ADOTable1.FindField('q_24').AsString & q_24 dengan operasi penambahan string. tapi tak jamin hasilnya bakal sama seperti awal (full query)
user image
more 14 years ago

bangfauzan

@xmbohcx: Perlu diketahui bahwa komponen Query (misalnya TQuery, TADOQuery, dll) yang ada di delphi, itu sama sekali berbeda dengan query yang ada access. komponen Query dalam delphi tidak bisa diquery hanya bisa dilookup, karena itu adalah objek dalam client bukan objek server. sedangkan query dalam akses itu sifatnya sama dengan View tapi tempatnya di clent bukan diserver, jadi bisa diquery. Jadi agar q_12 dan q_14 bisa diquery maka harus ditempatkan diserver sebagai view, atau kalau menggunakan database access q_!2 dan q_14 harus dibuat di query access, baru diquery dari delphi. semoga dapat dimengerti.
user image
more 14 years ago

bangfauzan

Mengapa query di access bisa diquery???? Access sebenarnya adalah database ("server") sekaligus database engine, jadi query access sebenarnya adalah view. Hal yang sama juga berlaku meskipun database yang diakses adalah remote database (misalnya SQLserver).
user image
more 14 years ago

DelphiExpert

@bangfauzan betul sekali saran dikau :mrgreen: xmbohx query dikau yg njelimet tsb cukup kau jadikan view atau query - pd tab Queries kalo bahasanya access setelah itu, view dapat diperlakukan sebagai table tapi 'read-only'
user image
more 14 years ago

xmbohx

wow ... trims banyak infonya. @bangfauzan dan @DelphiExpert, Saya menggunakan access hanya untuk test query saja . tabel2 tran dan barang itu dalam bentuk dabase4, saya koneknya pakai odbc. memang bnr sih, kalo query itu di simpan dalam bentuk view di access, akan lebih simpel. namun hal itu ngga bisa sy lakukan. sy tertarik dengan infonya @delphiExpert
hiyaaaah... kalo q_12 ama q_24 digabungin lagi hasilnya kan sama aja seperti kalo dikau tulis 'full query', cara gabungin ya akses aja isi 1ADOTable1.FindField('q_24').AsString & q_24 dengan operasi penambahan string.
sy bikinnya bukan pk ADOTable namun pk ADOQuery. sy udah modif query untuk mengikut saran bro @delphiExpert, kurang lebih spt ini : q_tnr.Sql.Add('SELECT tran.tnr FROM tran WHERE [tran].T_BKT Like ''C%'' GROUP BY tran].tnr'); itu akan di inner join dengan q_12.SQL.Add('SELECT tran.no_BRG, Count(tran.tnr) AS Tnr_12 FROM [tran] INNER JOIN '+????+' ON [tran].tnr = '+inttostr(q_tnr.FieldValues['tnr'])+' WHERE ((([q_tnr].tnr)=12) AND ((tran].T_TGL) Between#1/1/2007

And#1/31/2007#)) GROUP BY [tran].no_BRG')

bagian yang ???? itu sy ngga tahu mesti diisi dengan apa. apakah bisa ADOQuery diaccess oleh ADOTable? Mohon petunjuknya. Mungkin @DelphiExpert bisa menjelaskan dengan kode2 ... Terima kasih.
[/pas:1:0a83e8df9a][pas:1:0a83e8df9a]
user image
more 14 years ago

bangfauzan

Kamu juga bisa menggabungkan 3 query tersebut menjadi 1 query, dan itu disebut nested query, tapi bukan sub query. JADI SCRIPT KAMU BISA DIUBAH MENJADI: SELECT [BARANG].NO_BRG, [q_12].Tnr_12 as tr_12,[q_24].Tnr_24 as tr_24 FROM (((([BARANG] LEFT JOIN (SELECT [tran].NO_BRG, Count([tran].Tnr) AS Tnr_12 FROM tran INNER JOIN [SELECT [tran].Tnr FROM [tran] GROUP BY [tran].Tnr]. AS q_tnr ON [tran].Tnr = [q_tnr].Tnr WHERE ((([q_tnr].tnr)=12)) GROUP BY [trin].no_brg) AS q_12 ON [BARANG].NO_BRG = q_12.no_BRG) LEFT JOIN (SELECT [tran].NO_BRG, Count([tran].Tnr) AS Tnr_12 FROM tran INNER JOIN [SELECT [tran].Tnr FROM [tran] GROUP BY [tran].Tnr]. AS q_tnr ON [tran].Tnr = [q_tnr].Tnr WHERE ((([q_tnr].tnr)=24)) GROUP BY [trin].no_brg) AS q_24 ON [BARANG].NO_BRG = q_24.T_BRG) ORDER BY [BARANG].NO_BRG Yang aku tulis murni script kamu dan itu ada yang salah, tapi aku hanya ingin menjunjukkan bagaimana membuat nested query. ALTERNATIF SOLUSI: Selain itu, untuk kasus kamu diatas, sebenarnya tidak perlu membuat nested query, cukup dengan sub query. kamu bisa membuat query : SELECT A.NO_BRG, B.NAMA_BRG, (SELECT COUNT() FROM TRAN WHERE TNR=12 AND TRAN.NO_BRG=A.NO_BRG) AS TNR_12, (SELECT COUNT( ) FROM TRAN WHERE TNR=24 AND TRAN.NO_BRG=A.NO_BRG) AS TNR_24 FROM TRAN AS A INNER JOIN BARANG AS B ON (A.NO_BRG=B.NO_BRG) GROUP BY A.NO_BRG, B.NAMA_BRG ORDER BY A.NO_BRG Semoga bermanfaat. {kalo sukses, bagi-bagi honornya ya? hehehe.....}
user image
more 14 years ago

xmbohx

trims @bangfauzan :) sy udah nyoba alternatif solusi, dan outpunya sesuai namun proses query jadi lama sekali :-? thanks semua
more ...
  • Pages:
  • 1
Share to
Local Business Directory, Search Engine Submission & SEO Tools FreeWebSubmission.com SonicRun.com