sp procedure oluştururken hata

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Kod: Tümünü seç

CREATE PROCEDURE SP_musteri(  giris INTEGER) 
RETURNS (        cikis varchar(15)) 
AS 
BEGIN 
  FOR SELECT AD 
      FROM musteri 
      WHERE MUSTERI_NO=:giris 
      INTO :cikis
  DO 
  BEGIN 
    SUSPEND; 
  END 
END
ben aynen bu sekilde create edebildim.... bendeki alanlar farkli oldugu icin sadece alan isimlerini degistirdim bir de cikis dan sonraki ; u kaldirdim....
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
ercere
Üye
Mesajlar: 48
Kayıt: 23 Kas 2004 02:38
Konum: Ulus-BARTIN

Mesaj gönderen ercere »

CREATE PROCEDURE SP_musteri( giris INTEGER)
RETURNS ( cikis varchar(15))
AS
BEGIN
FOR SELECT AD
FROM musteri
WHERE MUSTERI_NO=:giris
INTO :cikis
DO
BEGIN
SUSPEND;
END
END
Bu kodu (kendi tablomdaki alanları değiştirerek) aynen İbconsole interactive SQL ne kopyaladım ama yine olumsuz .Benim İB de bir şey olabilirmi ?

Birde kendi tablomu değiştirirken bir şey dikkatimi çekti.Ortaya yazayım istedim.
  • ibquery1.SQL.Add('create table "musteri"( ') ;
    ibquery1.SQL.Add('"kayitbul" integer not null, ') ;
    ibquery1.SQL.Add('"musteri_no" varchar(15) not null,') ;
    ibquery1.SQL.Add('"AD" varchar(15) not null,') ;
    ibquery1.SQL.Add('primary key ("kayitbul","musteri_no","ad"))') ;
"AD" ile "ad" büyük-küçük harf yazılması tablonun create edilmesi engelleyip hata veriyor (field ile field key aynı şekilde olması gerekiyor)

Tabii bu arada sorunumu hala çözmüş değilim.
Bilginin sınırı öğrenmenin yaşı yoktur.
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

create koduna verdigi hata nedir?
biliyorsunuz problemi cozmede size yardim edebilmek icin en cok ihtiyacimiz olan oa hata mesaji ...

Bir de ben mesela butun tablo ve alan isimlerini buyuk harf olarak kullanırım. Boyle bir standart kullanım olasi kucuk buyuk harf problemlerini engelleyecektir....

eklenen MUSTERI_NO integer tipinde olmalidir... Zira zaten giris isimli parametreniz de integer tipinde....
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
ercere
Üye
Mesajlar: 48
Kayıt: 23 Kas 2004 02:38
Konum: Ulus-BARTIN

Mesaj gönderen ercere »

Kod: Tümünü seç

ibquery1.SQL.Add('create table "musteri"( ') ;
 ibquery1.SQL.Add('"kayitbul" integer not null, ') ;
 ibquery1.SQL.Add('"musteri_no" integer not null,') ;
  ibquery1.SQL.Add('"ad" varchar(50) not null,') ;
  ibquery1.SQL.Add('primary key ("kayitbul","musteri_no", AD"))') ;
kodu çalıştırılınca

  • unsuccessful metadata update
    unknown columns in index RDB$primary1'
şeklinde hata veriyor

Evet eklediğim musteri_no varchar olarak kalmış.Ben yine sizin kod ile devam edip taloda musteri_no integer olarak tanımladım.
ib console den procedure tekrar yaratmayı denedim sonuç yine aynı.
şimdi ib den şüpheleniyorum.Acaba versiyonmu eski yada eksik bir yordamı varanlıyamadım.
(kodda başka satırlarda vardı.Hata üreten kodları aktarırken "AD" nin tırnağını atlamışım.Orijinalinde tırnak var)
En son ercere tarafından 25 Kas 2004 08:36 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Bilginin sınırı öğrenmenin yaşı yoktur.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

S.A.
ibquery1.SQL.Add('primary key ("kayitbul","musteri_no", AD"))') ;
AD dan önce tırnak açmamışsınız. ama açmadığınız tırnağı kapatmışsınız.
Biraz Dikkat.
Kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Kod: Tümünü seç

unsuccessful metadata update 
unknown columns in index RDB$primary1'
primary key deki alan isimleri ile gercek alan isimleri farkindan kaynaklaniyor...

Dedigim gibi mutlaka ama mutlaka bir standart oturtmak lazim.... Ben kendi adima butun tablo ve alan isimlerini buyuk harf yapiyorum....

Bunu da duzeltirseniz bu mesele de asilmis olacak zannederim...
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
ercere
Üye
Mesajlar: 48
Kayıt: 23 Kas 2004 02:38
Konum: Ulus-BARTIN

Mesaj gönderen ercere »

Fahrettin Bey

primary'ide ki hatayı diğer arkadaşlarda aynı sorunu yaşıyabilirler diye yazmıştım .Tesadüfen karşılaştığım için ortaya yazma ihtiyacı hissettim.
Benim asıl problemim hala çözülmedi.Yani ben İçinde tablo ile irtibatlı cümle bulunan sp procedurleri hala yaratabilmiş değilim.

Ne İB sql ile nede ibquery i ile .
Create edilmiş procedur kodlarımı değiştirip araya

Kod: Tümünü seç

SELECT * FROM MUSTERI
Eklediğim anda hata mesajı başlıyor.
:cry:
Bilginin sınırı öğrenmenin yaşı yoktur.
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

sayin ercere,
Kanaatimce problemin etrafinda hem de akin cevresinde donuyoruz ama belki kontrollu deney yapmamamizdan belki de goremedigimiz bir baska meseleden cozemiyoruz...

En basitinten bir procedure yazalim o zaman....
viewtopic.php?t=644
buradaki makaledeki ornek tabloyu ve ornek SP 'yi deneyin... Orada Interbase için verilen tablo olusturma kodları var.

Kod: Tümünü seç

CREATE TABLE URUN ( 
       URUN_NO              INTEGER NOT NULL, 
       URUN_ADI             VARCHAR(40) NOT NULL, 
       PRIMARY KEY (URUN_NO)); 

CREATE UNIQUE INDEX XPKURUN ON URUN(       URUN_NO); 

CREATE TABLE URUN_GIRIS ( 
       URUN_NO              INTEGER NOT NULL, 
       GIRIS_ZAMANI         DATE DEFAULT 'now' NOT NULL, 
       GIRIS_MIKTARI        INTEGER NOT NULL, 
       PRIMARY KEY (URUN_NO, GIRIS_ZAMANI)); 

CREATE UNIQUE INDEX XPKURUN_GIRIS ON URUN_GIRIS 
(       URUN_NO,       GIRIS_ZAMANI); 

CREATE INDEX XIF803URUN_GIRIS ON URUN_GIRIS(       URUN_NO); 


CREATE TABLE URUN_SATIS ( 
       URUN_NO              INTEGER NOT NULL, 
       SATIS_ZAMANI         DATE DEFAULT 'now' NOT NULL, 
       SATIS_MIKTARI        INTEGER NOT NULL, 
       PRIMARY KEY (URUN_NO, SATIS_ZAMANI)); 

CREATE UNIQUE INDEX XPKURUN_SATIS ON URUN_SATIS 
(       URUN_NO,       SATIS_ZAMANI); 

CREATE INDEX XIF804URUN_SATIS ON URUN_SATIS(       URUN_NO); 

CREATE TABLE URUN_STOK ( 
       URUN_NO              INTEGER NOT NULL, 
       STOK_MIKTARI         INTEGER DEFAULT 0 NOT NULL, 
       PRIMARY KEY (URUN_NO)); 

CREATE UNIQUE INDEX XPKURUN_STOK ON URUN_STOK(   URUN_NO); 
Bu kodları calistirarak tablolari olusturduktan sonra

SP olusturmak icin de

Kod: Tümünü seç

CREATE PROCEDURE SP_STOK_HAREKETLERI (  BASLANGIC_TARIHI DATE,  BITIS_TARIHI DATE) RETURNS (  TARIH DATE,  URUN_ADI CHAR(40),  HAREKET_TIPI CHAR(5),  MIKTAR INTEGER) AS 
begin 
for 
  select UG.GIRIS_ZAMANI,U.URUN_ADI,'GIRIS',UG.GIRIS_MIKTARI from 
    URUN_GIRIS UG,URUN  U where 
    UG.URUN_NO = U.URUN_NO and cast(UG.GIRIS_ZAMANI as date) between :BASLANGIC_TARIHI and :BITIS_TARIHI union 
  select US.SATIS_ZAMANI,U.URUN_ADI,'SATIS',US.SATIS_MIKTARI from 
    URUN_SATIS  US,URUN  U where 
    US.URUN_NO = U.URUN_NO and cast(US.SATIS_ZAMANI as date) between :BASLANGIC_TARIHI and :BITIS_TARIHI order by 
    1 asc,2 asc 
INTO :TARIH, :URUN_ADI, :HAREKET_TIPI,:MIKTAR 
  DO 
  SUSPEND; 
end
Bu veya baska bir SP create kodunu calistirmayi deneyin...
Buna ragmen bir hata mesaji var ise onu tekrar konusalim...

Fakat konuyu dagitmadan gitmekte fayda var... Yani cikan bir hatayi giderdikten sonra varsa baska hata onu giderip varsa baska onu girererek vs... sonuca gidebiliriz.... Her defasında sadece problemi cozen degisikligi yaparsak ya da her defasında sadece tek bir seyi degistirirsek bu kontrollu deney olur ki aksi taktirde iki parametre birden degistirerek yapılan denemelerde problemin asıl kaynaginin gercekte ne oldugunu asla ogrenemeyiz...

iyi calismalar dilerim....
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
ercere
Üye
Mesajlar: 48
Kayıt: 23 Kas 2004 02:38
Konum: Ulus-BARTIN

Mesaj gönderen ercere »

Fahrettin Bey ben daha önce sizin bu örnek kodlarınızla çalıştım. Şimdi tekrar İBconsole yardımı ile 'deneme.gdb' isimli bir database oluşturdum.
Verdiğiniz kodları kopyalayıp İnteractive SQL'in üstteki panosuna yapıştırdım. Execute Query komutu ile 4 adet tabloyu oluşturdum.
Sonra sizin mesajda gönderdiğiniz 'create procedure.....' kodunu kopyalayıp İnteractive SQL'in üstteki panosuna yapıştırdım Execute Query komutu bu kez

  • SQL error code = -104
    Unexpected end of command
    Statement: CREATE PROCEDURE ........
hata mesajını verdi.
Hatanın yerini öğrenebilmek için Prepare Query komutunu çalıştırdığımda
  • SQL error code = -104
    Token unknown - line 11, char 4
    ?
hata mesajını verdi.Buda
  • INTO :TARIH, :URUN_ADI, :HAREKET_TIPI,:MIKTAR
satırında :TARIH parametresini gösteriyor.
Onları " " tırnak içine aldım (bu satırdaki parametreleri).Bu defa da

  • SQL error code = -104
    Unexpected end of command
    Statement: CREATE PROCEDURE ........
hata mesajını verdi.
Bilginin sınırı öğrenmenin yaşı yoktur.
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

kullandığın Fb yada IB versiyonu nedir ? diğer özelikleri de bildirirsen biraz daha kesin konuşulacak. Sanırım senin sisteminde bir şeyler var. Fahrettin'in örneğinin çalışmama gibi bir durum söz konusu değil.
özellikle gds32.dll in versiyonunu bildirebilirsen iyi olur

kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
ercere
Üye
Mesajlar: 48
Kayıt: 23 Kas 2004 02:38
Konum: Ulus-BARTIN

Mesaj gönderen ercere »

Kullandığım Ib nin versiyonları

IBserver version 6.5.0.28
IBconsole version 1.0.1.340
Gds32.dll version 6.5.0.28
Bilginin sınırı öğrenmenin yaşı yoktur.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7602
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

off topic
begin

IB 6.5 paralı bir sürüm. Kullandığın zaman lisans ücreti ödemen gerekir. Interbase'in bedava olan sürümleri sadece 6.0, 6.01 ve 6.02'dir.
end;
ercere
Üye
Mesajlar: 48
Kayıt: 23 Kas 2004 02:38
Konum: Ulus-BARTIN

Mesaj gönderen ercere »

Makinamdaki IB yi ve delphi 7 uninstal ettim.Kalan dizinleri sildim.
internetten ib 6.01 yükledim.

IBserver version 6.0.1.0
IBconsole version 1.0.1.326
Gds32.dll version 6.0.1.0

Yine Fahrettin Beyin gönderdiği kodlarla tabloları yarattım.Ama sp ler yine hata verdi.Bu kez fahrettin Beyin Trıgger,stored ...makalesinde basit bir sp proc. denedim sonuç yine olumsuz.

Ben kodları yanlış bir yerdemi kullanıyorum Yoksa.
(İbconsol->tools->interactive SQL ) :cry:

Artıkksa yapmam gereken makinamı koltuğumun altına koyup İstanbul'a gitmek galiba .
(Bu vesile ile oğlumu ziyaret etmiş olurum....)
Bilginin sınırı öğrenmenin yaşı yoktur.
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

peki bu sefer ki hata neydi yine ayni mi?
bir de ornek database varmi elinizin altinda? Yani kurulum yapinca bir ornek database yukluyor mu *.gdb ile aratabilirsiniz.. Eger varsa onda Sp filan vardir belki ayni kodu denersiniz...

Diyorum ama anlamadim gitti....

Ciddi bir terslik var bu iste.... Bu is o kadar zor degil ve bu kadar problem olasi degil bence... temel bi terslik var bu iste.... Ama anlamadim dedigim gibi.... bendeki interbase versiyonlarini karsilastiramiyorum su an baska bir makinadayim.... ama sonucta bu kodlar cok standart kodlar her versiyonda calisacagina inaniyorum...
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
ercere
Üye
Mesajlar: 48
Kayıt: 23 Kas 2004 02:38
Konum: Ulus-BARTIN

Mesaj gönderen ercere »

örnek database lerden employee.gdb nin add_emp_proj sp procedure ünü ismini değiştirip tekrar execute butonuna tıkladığımda yine aynı hata mesajı .
yoksa diyorum ib yi intall ederken eksik bir şeymi yapıyorum.

Kod: Tümünü seç

CREAT PROCEDURE EKLEME
(EMP_NO SMALLINT,
  PROJ_ID CHAR(5)
)
AS
BEGIN
INSERT INTO employee_project (emp_no,proj_id) VALUES (:emp_n0, :proj_id);
   WHEN SQLCODE -530 DO
  EXCEPTION unknown_emp_id;
END
SUSPEND;
END
fb enkolay nerden indirebirim.Birde onu deneyeyim.
Bilginin sınırı öğrenmenin yaşı yoktur.
Cevapla