Arsip: Query bertingkat dengan ADOQuery
more 17 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
more 17 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..
more 17 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
more 17 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)
more 17 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.
more 17 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).
more 17 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'
more 17 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]
more 17 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.....}
more 17 years ago
xmbohx
trims @bangfauzan :)
sy udah nyoba alternatif solusi, dan outpunya sesuai namun proses query jadi lama sekali :-?
thanks semua
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 3 years ago - PascalTalk #4: Obrolan Ringan Seputar IT
by LuriDarmawan in Tutorial & Community Project more 3 years ago - PascalTalk #2: Membuat Sendiri SMART HOME
by LuriDarmawan in Tutorial & Community Project more 3 years ago - PascalTalk #3: RADically Fast and Easy Mobile Apps Development with Delphi
by LuriDarmawan in Tutorial & Community Project more 3 years ago - PascalTalk #1: Pemanfaatan Artificial Intelligence di Masa Covid-19
by LuriDarmawan in Tutorial & Community Project more 3 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 11 years ago - [ask] koneksi ke ODBC user Dsn saat runtime dengan ado
by halimanh in FireBird more 11 years ago - Validasi menggunakan data tanggal
by mas_kofa in Hal umum tentang Pascal Indonesia more 11 years ago
Random Topic
- dbgrid lagi...
by idhiel in MySQL more 11 years ago - Enskripsi n Deskripsi
by lord_kimm in Tip n Trik Pemrograman more 17 years ago - tcard data dari query
by brodien in Tip n Trik Pemrograman more 18 years ago - Searhing Menggunakan Fungsi FILTERING...
by ii_irwan in Hal umum tentang Pascal Indonesia more 14 years ago - Store
by armanefendi in MySQL more 17 years ago - menghapus kolom tertentu dalam ListView???
by s373n in Tutorial & Community Project more 15 years ago - urutkan tanggal lagi
by brodien in Tip n Trik Pemrograman more 17 years ago - Cara mudah untuk Memasukkan TIMage ke Array?
by ivan in Hal umum tentang Pascal Indonesia more 16 years ago - Stored procedure
by Random in MsSQL more 16 years ago - MessageDlg????
by akudana in Hal umum tentang Pascal Indonesia more 14 years ago