ADOStoredProc de bir hata

Oracle veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
filiz
Üye
Mesajlar: 82
Kayıt: 24 Ara 2003 08:11
Konum: İzmir

ADOStoredProc de bir hata

Mesaj gönderen filiz »

merhabalar

Kod: Tümünü seç

With DataModule1.SPUstProjeEkle do
    begin
      Open;
      Parameters.ParamByName('ad').value:=edit2.text;
      Parameters.ParamByName('kod').value:=Edit1.Text;
      Parameters.ParamByName('seviye').Value:=TreeView1.Selected.Level;
      Parameters.ParamByName('ustid').Value:=ustid;
      ExecProc;
    end;
execproc satırına geldiğinde 'parameter object is improperly defined' gibi bir hata alıyorum..veritabanı oracle
stroredprocedure de bir sorun yok
bu Spyi delphide nasıl çalıştırabilirim
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Bugünlerde ADOStoredProc ile nekadar çok sorun yaşayan forumdaşımız var :) Ben hiç kullanmadım bu componenti ve kullananlara da ADOQuery kullanmasını tavsiye ediyorum, ben hep onu kullanıyorum ve şimdiye kadar bu konuda bir sorun yaşamadım.

Kod: Tümünü seç

AdoQuery1.Close;
AdoQuery1.SQL.Text := 'exec procedure_ismi :Parametre';
AdoQuery1.Parameters.ParamByName('Parametre').Value := deger;
AdoQuery1.Open;
filiz
Üye
Mesajlar: 82
Kayıt: 24 Ara 2003 08:11
Konum: İzmir

Mesaj gönderen filiz »

Kod: Tümünü seç

With DataModule1 do
 begin
    AdoQuery1.Close;
    AdoQuery1.SQL.Text := 'exec ustproje_ekle :ad,:kod,:seviye,:ustid';
    AdoQuery1.Parameters.ParamByName('ad').Value := Edit2.Text;
    AdoQuery1.Parameters.ParamByName('kod').Value := Edit1.Text;
    AdoQuery1.Parameters.ParamByName('seviye').Value := TreeView1.Selected.Level;
    AdoQuery1.Parameters.ParamByName('ustid').Value := ustid;
    AdoQuery1.Open;
 end;
şeklinde değiştirdim ama şimdide 'invalid SQL Statement' hatası alıyorum
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Selamlar.
UstId nedir, hangi tiptedir, keza sp'deki ustid'nin tipi nedir?Value olarak kullanmanızdan kaynaklandığını sanıyorum.AsInteger ya da muadili bir atama kullanarak deneyin.
Kolay gelsin.
filiz
Üye
Mesajlar: 82
Kayıt: 24 Ara 2003 08:11
Konum: İzmir

Mesaj gönderen filiz »

ustid in tipi number..ancak burda bir sorun yok..
oracle sql*plus tan spyi çalıştırdıgımda sp çalısıyor ...

parametre verirken de value yerine asinteger diye bir ifade yok.
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Eğer procedure'ün değer döndürmüyorsa AdoQuery1.Open; yerine AdoQuery1.ExecSQL; kullanılması gerekiyor. Bundan kaynaklanıyor gibi gelmedi bana hata ama bir de böyle dener misin(tabi değer döndürmüyorsan)?
filiz
Üye
Mesajlar: 82
Kayıt: 24 Ara 2003 08:11
Konum: İzmir

Mesaj gönderen filiz »

Sp aşagıda

Kod: Tümünü seç

CREATE OR REPLACE PROCEDURE USTPROJE_EKLE
 (AD IN VARCHAR2,
KOD IN VARCHAR2,
SEVIYE IN NUMBER,
USTID IN NUMBER
)
IS
BEGIN
  INSERT INTO USTPROJE VALUES (USTPROJE_SEQ.NEXTVAL,AD,KOD,SEVIYE,USTID);  
  COMMIT;
END;


adoquery1.Exec yaptıgımda da aynı hatayı 'invalid SQL statement hatası veriyor..parametreleri düzgün gönderemiyorum sanırım
Uğur1982
Üye
Mesajlar: 383
Kayıt: 11 Mar 2005 03:18
Konum: İzmir

Mesaj gönderen Uğur1982 »

merhaba..
'invalid SQL statement hatası veriyor..
SQL cümlesinin hatalı olduğunu söylüyor...

Belki parentez isteyebilir..Ben parentezli kullanılırım. :D

Kod: Tümünü seç

AdoQuery1.SQL.Text := 'exec ustproje_ekle (:ad,:kod,:seviye,:ustid)'; 
* Bir de çalıştırmadan SQL'in textine Showmessage ile bakın...

Bu adreslerde procedure ile ilgili bilgiler var belki faydası olabilir...
http://www.psoug.org/reference/procedures.html
http://www.exzilla.net/docs/php-oci8/php-plsql.php
filiz
Üye
Mesajlar: 82
Kayıt: 24 Ara 2003 08:11
Konum: İzmir

Mesaj gönderen filiz »

Kod: Tümünü seç

  AdoQuery1.SQL.Text := 'exec ustproje_ekle (:ad,:kod,:seviye,:ustid)'
şeklinde parantezleri koydugumda hata veriyor

hatta direkt değerleri verdiğimdede aynı hata 'ora 00900 invalid SQL Statement' hatası veriyor:(

Kod: Tümünü seç

with  DataModule1 do
  begin
    ADOQuery1.Close;
    AdoQuery1.SQL.Text := 'exec ustproje_ekle (''deneme'',''1'',2,3)';
    AdoQuery1.ExecSQL;
  end;
Uğur1982
Üye
Mesajlar: 383
Kayıt: 11 Mar 2005 03:18
Konum: İzmir

Mesaj gönderen Uğur1982 »

Deneme şansım olmadığından bir şey diyemiyorum ama;

* Procedure ilk önce delphi dışı bir SQL editörle çalıştırıp sonra delphi ye uyarlamak..Ben böyle yapıyorum..Kullanışlı oluyor..
* Procedure ismini büyük harfle yazmayı dene..USTPROJE_EKLE gibi...
* Procedure de kullandığın input değişkenleriyle Tablo alan adların aynı olmaması lazım..Bundan da kaynaklanabiliyor..Senin ki aynı...
* Son olarakta Showmessage(AdoQuery1.SQL.Text ); olarak çıktıya bakarak kontrol edebilirsin...Bu önemli...
* Parametre kullanırsan syntax. vs.. hatalarıyla uğraşmassın...
filiz
Üye
Mesajlar: 82
Kayıt: 24 Ara 2003 08:11
Konum: İzmir

Mesaj gönderen filiz »

Kod: Tümünü seç

  with  DataModule1 do
  begin
    ADOQuery1.Close;
    ADOQuery1.SQL.Clear;
    AdoQuery1.SQL.Text := 'EXEC USTPROJE_EKLE (''deneme'',''1'',2,3)';
    Memo1.Text:=ADOQuery1.SQL.Text;
    AdoQuery1.ExecSQL;

  end;
memo1 deki sqli Oracle SQL*Plus'a aldığımda çalışıyor...ilginç

Kod: Tümünü seç

SQL> EXEC USTPROJE_EKLE ('deneme','1',2,3)

PL/SQL procedure successfully completed.
filiz
Üye
Mesajlar: 82
Kayıt: 24 Ara 2003 08:11
Konum: İzmir

Mesaj gönderen filiz »

sorun ADOStoredProc kullanarak çözüldü..

Kod: Tümünü seç

var
   param:TParameter;
begin
  with DataModule1.SPUstProjeEkle do
  begin
     Close;
     Parameters.Clear;

     param:=Parameters.AddParameter;
     param.Name:='AD';
     param.DataType:=ftString;
     param.Value:=Edit2.Text;

     param:=Parameters.AddParameter;
     param.Name:='KOD';
     param.DataType:=ftString;
     param.Value:=Edit1.Text; 

     param:=Parameters.AddParameter;
     param.Name:='SEVIYE';
     param.DataType:=ftInteger;
     param.Value:= TreeView1.Selected.Level;

     param:=Parameters.AddParameter;
     param.Name:='USTID';
     param.DataType:=ftInteger;
     param.Value:=ustid;
     Open;
  end;
end;
Cevapla