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

 
user image
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=
user image
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
user image
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 ??
user image
more 17 years ago

_lmz

@mastoto:

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)) ; 
Rasanya TParam.Create itu tidak menambahkan ke collection params lho... Dari source codenya:

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 :)
user image
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
user image
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
user image
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....
user image
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
Share to

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

Random Topic

Local Business Directory, Search Engine Submission & SEO Tools FreeWebSubmission.com SonicRun.com