ibexpert ile ilk store procedure denemesi

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
forumsad
Üye
Mesajlar: 296
Kayıt: 29 Tem 2010 10:47

ibexpert ile ilk store procedure denemesi

Mesaj gönderen forumsad »

Resim

ilk adım olarak yukardaki gibi procedures mause sağ tıklayıp yeni procedres tıklıyoruz.

Resim

ekrana böyle bir menü geliyor

Resim

internetden bulduğum basit bir örnegi kendi tabloma göre uyarlayıp çalıştırmaya çalıştığımda hata alıyorum
neyi yanlış yapıyorum acaba?

saygılarımla...
anemos
Üye
Mesajlar: 110
Kayıt: 02 Nis 2007 07:51
Konum: Sakarya / Hendek

Re: ibexpert ile ilk store procedure denemesi

Mesaj gönderen anemos »

Firebirdde SP ms sql den biraz farklıdır.

Kod: Tümünü seç

create procedure sp_basit(id integer)
returns(jeton varchar(15))
as
begin
   for select jeton from tbl_hesap where kosul_alanınız = :id into :jeton do
        begin
             suspend;
        end
end
forumsad
Üye
Mesajlar: 296
Kayıt: 29 Tem 2010 10:47

Re: ibexpert ile ilk store procedure denemesi

Mesaj gönderen forumsad »

Kod: Tümünü seç

create procedure sp_basit(id integer)
returns(jeton varchar(15))
as
begin
   for select jeton from tbl_hesap where ID = :id into :jeton do
        begin
             suspend;
        end
end
hocam hata devam ediyor sanki create olayında sorun var gibi
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: ibexpert ile ilk store procedure denemesi

Mesaj gönderen aslangeri »

s.a.
senin yazdığın kodlar ile ibexpertin çalıştırdığı kodlar aynı değil. ondan dolayı hata alıyorsun.
o kodları query editör kullanarak çalıştırman lazım. ibexpert in kullanıcı arayüzünü incele...
editör procedure adını, input ve output parametrelerini vb. ilgili yerlere yazman lazım, kod yazılan alana sadece Begin....End bloğunu yazman lazım.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
forumsad
Üye
Mesajlar: 296
Kayıt: 29 Tem 2010 10:47

Re: ibexpert ile ilk store procedure denemesi

Mesaj gönderen forumsad »

internetden bulduğum videoları inceleyip olayı anlamaya çalışıyorum
triger örnegi buldum birşeyler anlamaya başladım

Kod: Tümünü seç

AS
begin
  /* Trigger text */
  update TEST set ORT=30;
end
bu şekilde yeni kayıt girdiğimde çalışıyor tüm colonlara 30 değeri yazıyor hata yok

Kod: Tümünü seç

AS
begin
  /* Trigger text */
  new.id=gen_id(gen_test_id,1);  

  update TEST set ORT=30 where ID=new.id;
end
yukardaki şekilde aşagıdaki hatayı alıyorum

This column cannot be updated because it is derived from an SQL function or expression.
attempted update of read-only column.

burda güncelleme yapamazsın çünkü colon sadece okunabilir diyor sanırım ama hangisi ORT kolonu olamaz yukardaki örnekte çalışıyor
ID kolonu olamaz onu değiştimeye çalışmıyoruz zaten

hata neden kaynaklanıyor olabilir acaba...
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: ibexpert ile ilk store procedure denemesi

Mesaj gönderen esistem »

Selam;
ibexpert ile yeni procedure oluşturmak çok kolaydır, siz yeni procedure dediğinizde sağ üst köşede NEW_PROCEDURE yazan yere procedur un adını yazacaksınız, procedure dışardan değer girecekseniz Input Parameters kısmında tanımlıcaksınız, dışarıya değer verecekseniz Output Parameters kısmında tanımlıcaksınız, procedure içersinde değişken kullanıcaksınız Variables kısmında tanımlıcaksınız. Tekrardan create procedure vs.vs. yazmanıza gerek yok, normal sql komutlarını kullanıcaksınız, yazım şekli de zaten delphi ile aynıdır, begin-end vs.vs.

kolay gelsin...
ayrıca aşağıdaki kodu before insert olayında değil after insert olayında yaparsanız sorun olmaz,

Kod: Tümünü seç

AS
begin
  update TEST set ORT=30 where ID=new.id;
end
forumsad
Üye
Mesajlar: 296
Kayıt: 29 Tem 2010 10:47

Re: ibexpert ile ilk store procedure denemesi

Mesaj gönderen forumsad »

teşekkürler hocam
update TEST set ORT=30 where ID=new.id; //bu şekilde hata vermeden çalıştı

procedure ilğili önerilerinizi dikkate alarak basit bir örnek hazırlamaya çalışacağım inşallah olur

saygılarımla
forumsad
Üye
Mesajlar: 296
Kayıt: 29 Tem 2010 10:47

Re: ibexpert ile ilk store procedure denemesi

Mesaj gönderen forumsad »

Resim

yukardaki şekilde 15 değerini dışarı gönderen basit bir store procedure yaptım hata vermeden derledi...

şimdi delphi tarafından bu 15 bilgisini almaya çalışacağım

bunun için delphi sayfama
1-IBDatabase1
2-IBTransaction1
3-IBQuery1
4-StoredProc1
5-DataSource1

eklemem yeterli sanırım kurcalayarak bilğiyi almaya çalışacağım fakat netde araştırdım bu konuyu anlatan bir bölüm bulamadım çok tırmalamadan çözmek için
örnek anlatan bir site var mı ben yanlışmı arıyorum.
veya basit bir örnek verebilirmisiniz..

saygılarımla
forumsad
Üye
Mesajlar: 296
Kayıt: 29 Tem 2010 10:47

Re: ibexpert ile ilk store procedure denemesi

Mesaj gönderen forumsad »

Kod: Tümünü seç

procedure test;
var
gelen:integer;
begin
DMvt.IBQuery1.Close;
DMvt.IBQuery1.SQL.Clear;
DMvt.IBQuery1.SQL.Add('select * from NEW_PROCEDURE where ID=1');
DMvt.IBQuery1.Open;


gelen:=DMvt.IBQuery1.fieldbyname('OUTDEGER').value;
ShowMessage(IntToStr(gelen) );

end;
StoredProc1 kullanmadan yukardaki şekilde bilgiyi almaya çalıştığımda hata alıyorum
forumsad
Üye
Mesajlar: 296
Kayıt: 29 Tem 2010 10:47

Re: ibexpert ile ilk store procedure denemesi

Mesaj gönderen forumsad »

Kod: Tümünü seç

DMvt.IBQuery1.SQL.Add('select * from NEW_PROCEDURE ');
şeklinde değiştirince düzeldi bilğiyi aldım...

artık gerisini deneme yanılma -araştırma yöntemiyle geliştiririz...

emeği geçen fikir ve destek veren tüm hocalarıma saygılar sevgiler
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: ibexpert ile ilk store procedure denemesi

Mesaj gönderen esistem »

Tekrar selam,
Eğer stored proc. u tablo gibi kullanacaksanız onu table olarak görmeniz gerek.
Şöyleki;
sizin örneğinize göre ;

Kod: Tümünü seç

declare variable jeton integer;
begin
jeton=15;
outdeger=jeton;
suspend;
end;
şeklinde bir procedure u new_procedure adında ve alan adı outdeger olan tek alanlı bir tablo gibi düşünün, sql ile çekerken de ;
select outdeger from new_procedure yazmanız normaldir, siz out olarak herhangi bir id tanımlamadığınız için where id=xxx diyemezsiniz.
ayrıca şu şekilde de kullanabilirsiniz...

Kod: Tümünü seç

declare variable adet integer;
begin
SELECT COUNT(kod) FROM XXXX INTO :adet;
suspend;
end
bu dışarıya XXXX tablosunun kayıt sayısını döndürür.
net de oldukça fazla örnek bulunabilir. kolay gelsin.
Cevapla