Arsip: DBExpress-Oracle TSQLStoredProcedure error ...bug ?

more 17 years ago
mastoto
Yth rekans senior,..
Saya sedang menggunakan Delphi7-Oracle menggunakan DBExpress, dan sedang mencoba menjalankan Procedure di Oracle. Saya menggunakan SQLStoredProc :
(sesuai contoh pada help Delphi) ...
StoredProcName := 'INSLEMBUR'; //Procedure dgn 4 parameter, 3in 1 out
Params.Clear;
P1 := TParam.Create(Params, ptInput); //in
P2 := TParam.Create(Params, ptInput); //in
P3 := TParam.Create(Params, ptInput); //in
P4 := TParam.Create(Params, ptOutput); //out
try
Params[0].Name := 'PUSERID';
Params[1].Name := 'PTGLIN';
Params[2].Name := 'PKET';
Params[3].Name := 'PID'; //parameter out
ParamByname('PUSERID').AsString := '7102434';
ParamByname('PTGLIN').AsDateTime := date;
ParamByname('PKET').AsString := 'Testing input data';
ExecProc;
showmessage(inttostr(ParamByname('PID').AsInteger)) ;
yang terjadi adalah muncul error : "no value for parameter PID"
saya sudah muleg2 nyari tetep gak ketemu,... googling juga sepertinya ini bug, tapi solusinya kok gak nemu.
Mohon rekan2 yang pernah workaround mslh ini atau berhasil mengatasinya bisa dishare...
Atau mungkin ada metode lain utk menjalankan Procedure/Function di Oracle menggunakan DBExpress....
Terima kasih sebelumnya,....
=toto=

more 17 years ago
saysansay
Xixixixixixixi...Dikau yakin Mastoto? Biasanya Untuk Paramaters[0] atau param[0] merupakan Return Value {Kalau Nga salah Nech yeee} jangan samakan StoreProcedure dengan Query..Coba Dikau Kasih Paramnya di mulai dr 1 dan seterusnya...Semangat

more 17 years ago
mastoto
sudah dicoba pak ...jadi error List Index out of bounds ...
ternyata parameternya memang dimulai dari 0 pak,... karena waktu saya coba mulai dari 1, begitu sampai param ke-4 error...
...gimana ya ? ada pencerahan lain mungkin pak ??

more 17 years ago
_lmz
@mastoto:Rasanya TParam.Create itu tidak menambahkan ke collection params lho... Dari source codenya:StoredProcName := 'INSLEMBUR'; //Procedure dgn 4 parameter, 3in 1 out Params.Clear; P1 := TParam.Create(Params, ptInput); //in P2 := TParam.Create(Params, ptInput); //in P3 := TParam.Create(Params, ptInput); //in P4 := TParam.Create(Params, ptOutput); //out try Params[0].Name := 'PUSERID'; Params[1].Name := 'PTGLIN'; Params[2].Name := 'PKET'; Params[3].Name := 'PID'; //parameter out ParamByname('PUSERID').AsString := '7102434'; ParamByname('PTGLIN').AsDateTime := date; ParamByname('PKET').AsString := 'Testing input data'; ExecProc; showmessage(inttostr(ParamByname('PID').AsInteger)) ;
constructor TParams.Create(Owner: TPersistent);
begin
FOwner := Owner;
inherited Create(TParam);
end;
Berikut ini yang saya buat, anehnya kalo pake output yang tipenya NUMBER (di Delphi fmtBCD / Currency) tidak jalan (output 0 terus meskipun di SQLPlus jalan) :)
SQLStoredProc1.StoredProcName := 'RSTRING';
SQLStoredProc1.Params.Clear;
SQLStoredProc1.Params.CreateParam(ftString, 'X', ptOutput);
SQLStoredProc1.ParamByName('X').Size := 100;
SQLStoredProc1.ExecProc;
ShowMessage(SQLStoredProc1.ParamByName('X').AsString);
1 create procedure rstring(x out varchar2) as
2 begin
3 x := 'xyzzy';
4* end;
Rekomendasi saya (biasalah orang malas), buat storedprocnya satu-satu untuk masing-masing procedure dan biarkan Delphi yang generate parameternya :)
more 16 years ago
sepoix
masalah saya beda lagi....
saya menggunakan dbexpress dengan database oracle 10g,storeprocedure dengan 1 in dan 1 out,pada waktu dijalankan ke luar error
'Dbexpress : invalid parameter'
ada yang pernah ngalaminya gak ya,kalo ada tolong share ya

more 16 years ago
jsoft07
Seperti-nya kejadian-kejadian yang dialami seperti diatas, error-error tersebut, terletak pada kesalahan coding komponen Delphi 7.
Saya juga menggunakan Borland Delphi 7 + DBExpress + OracleXE (10g engine).
Saya frustrasi masalah mekanisme loading parameter
yang dilakukan Delphi 7 untuk stored procedure di Oracle.
Hasil observasi saya seperti ini :
Saya mbuat stored procedure dgn header spt ini,
....
create or replace procedure getreport ( lckode in varchar2, lcnama in varchar2) is
begin
insert into tabledata (kode,nama) values (lckode,lcnama);
end;
....
Itu untuk yang input saja parameter-nya.
Seperti diketahui bersama, parameter tersebut urut dari kiri ke kanan adalah : 1. lckode dan 2. lcnama
Apa yang terjadi di Delphi 7 ?
.....
sqlproc : tsqlstoredproc;
.....
sqlproc := tslstoredproc.create(NIL);
sqlproc.sqlconnection := sqlconn;
sqlproc.packagename := '';
sqlproc.storedprocedurename := 'GETREPORT'; // musti huruf GEDE
.....
nah, setelah ditentukan "storedprocedurename"-nya spt diatas,
stlh didebug,
he...he..he...
ketemu hal super aneh.
coba ditebak, sqlproc.params[0].name menghasilkan apa ?
harus-nya LCKODE . tapi ini malah LCNAMA.
agak panjang ceritanya kl diceritakan semuanya disini.
namun, source code sqlexpr.pas (source dari komponen TSQLConnection, TSQLQuery, TSQLStoredProc), ada bug-nya.
kenapa bisa ada bug ?
kenapa saya bisa stress ?
inti-nya gini,
sambungan dari kode diatas,
....
sqlproc.packagename := '';
sqlproc.storedprocedurename := 'GETREPORT'; // musti huruf GEDE
sqlproc.parambyname('LCKODE').value := '1';
sqlproc.parambyname('LCNAMA').value := '2';
sqlproc.execproc;
....
kode pun dijalankan.
hayo coba tebak, yang masuk di TABLEDATA di oracle, untuk field KODE dan NAMA masing apa ?
KODE akan berisi 2 , dan NAMA akan berisi 1.
LHO KOQ ???????
ha..ha...ha....ha.....
tapi kalo kode di Delphi diganti spt ini :
....
sqlproc.packagename := '';
sqlproc.storedprocedurename := 'GETREPORT'; // musti huruf GEDE
sqlproc.params[0].value := '1';
sqlproc.params[1].value := '2';
sqlproc.execproc;
....
gimana dgn isi dari TABLEDATA ?
kali ini yang masuk bener. Field KODE akan berisi 1 dan NAMA berisi 2.
LHO KOQ ?????
he..he..., gimana kalau diantara semua parameter input diatas, ada yang beda tipe ???
pasti saat dijalankan di Delphi, akan keluar error invalid type, atau apalah.
saya sudah bisa solve kl untuk masalah ini ( dengan ubah coding sedikit di sqlexpr.pas kemudian dicompile ke sqlexpr.dcu ).
Tapi untuk masalah jalankan storedprocedure oracle yang punya parameter input dan output sekaligus, masih belum punya solusi aku.
masih muuummeeet.....
Ada yang punya solusi ???
Sorry post gua kepanjangan.
:-D

more 16 years ago
jsoft07
Guys.....
Aku balik lagi dengan berita stored procedure oracle (dalam hal ini OracleXE, karena kebetulan aku lagi pake itu), dan Delphi 7 Enterprise edition.
Semua alternatif standard dari Delphi untuk koneksi ke Oracle,
baik itu via BDE (yang mana harus buat setting-an manual di ODBC), ADO, DBExpress, semua pada nggak bisa untuk panggil stored procedure,
baik procedure tunggal (berdiri sendiri) ataupun yang berada dalam package, yang mana, definisi dari procedure tersebut memiliki minimal 1 parameter input dan minimal 1 parameter output.
Contoh :
...
type resultset is ref cursor;
....
procedure report_usage(lcyear in varchar2, lcmonth in varchar2, rpt out resultset)
// 2 parameter input dan 1 parameter output
....
Semua teknologi diatas, baik BDE, ADO maupun DBExpress,
dengan cara apapun (yang aku tahu), nggak bisa manggil itu procedure.
Musti error wrong number or parameter type atau apa gitu.
Error dari Oracle.
Namun, kalau parameter procedure itu input semua,
atau output semua malahan, nggak ada problem sama sekali.
Aneh ya ?
Parameter input di "hardcode" pun tidak menolong.
Terus coba download Direct Oracle Access dari Allround Automations (pengembang PL/SQL Developer). Dan coba install.
Dan coba pake. Dengan bbrp step (dikit banget), procedure tsb bisa diakses dengan lancar, tanpa ada masalah.
Namun pendekatan tersebut membutuhkan biaya. :-D
Karena komponen Direct Oracle Access ini tidak Free alias Berbayar.
Ada yang punya solusi lain ?
Aku udah mentok nih.
Need help guys....
Thank's ya bro....

more 15 years ago
Lamsidjan
All,
Maaf saya sundul ini tread,,,, kayaknya rada nyambung...
Anyway, ada info native connector yang OK gak untuk akses OracleXE dari Delphi7? yang free.
Cheers,
more ...
- Pages:
- 1
reply |
Report Obsolete
AI Forward

🚀 We're thrilled to partner with Alibaba Cloud for "AI Forward - Alibaba Cloud Global Developer Summit 2025" in Jakarta! Join us and explore the future of AI. Register now:
https://int.alibabacloud.com/m/1000400772/
#AlibabaCloud #DeveloperSummit #Jakarta #AIFORWARD
Last Articles
Last Topic
- PascalTalk #6: (Podcast) Kuliah IT di luar negeri, susah gak sih?
by LuriDarmawan in Tutorial & Community Project more 4 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 5 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
- masalah di fastreport3
by esafm in Tip n Trik Pemrograman more 18 years ago - Tanya mengurangkan tanggal
by em_bjr in Hal umum tentang Pascal Indonesia more 16 years ago - Faktur Penjualan/pembelian
by bad2001 in Tip n Trik Pemrograman more 18 years ago - OnCloseQuery
by o-dad in Tip n Trik Pemrograman more 16 years ago - Maintenanced Reporting ::
by Tbawor in Moderator Only more 17 years ago - penjumlahan tanggal
by hafiezd in Bedah Kasus more 15 years ago - ambil nilai terbaik dari masing2 MK
by mas_kofa in Hal umum tentang Pascal Indonesia more 18 years ago - PascalTalk #3: RADically Fast and Easy Mobile Apps Development with Delphi
by LuriDarmawan in Tutorial & Community Project more 4 years ago - tanya inno setup mentog
by jowo in Enginering more 13 years ago - boolean
by brodien in MsSQL more 17 years ago