SP_Procedure Kontrol

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ozcank
Üye
Mesajlar: 925
Kayıt: 28 Nis 2005 05:29

SP_Procedure Kontrol

Mesaj gönderen ozcank »

Arkadaşlar ; Ben tablolarımı varmı yokmu kontrolünü yaptırıyorum procedure ve function kontrolünü nasıl yapabilirim? Varsa sorun yok yoksa Procedure ve Function oluşturacam.

Kod: Tümünü seç

KONTROL.SQL.Text:='SELECT * FROM information_schema.tables WHERE table_name = ''TabloAdı'''+
                 'OR table_name = ''TabloAdı''+
 'OR table_name = ''TabloAdı''+
 'OR table_name = ''TabloAdı'''+
 'OR table_name = ''TabloAdı'''+
                 'OR Procedure_Name = ''SP_ProcedureAdı''';
KONTROL.Open;
KONTROL.First;
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2356
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: SP_Procedure Kontrol

Mesaj gönderen freeman35 »

https://stackoverflow.com/questions/175 ... sts-or-not
object_id 'P' ve 'PC' olanaları kontrol et

Kod: Tümünü seç

      'SELECT sayi=count(*) 
      'FROM sys.objects       
      WHERE object_id = OBJECT_ID(N''[dbo].['procedure_adi']') AND type in (N''P'', N'PC')
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 !!!
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7586
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Re: SP_Procedure Kontrol

Mesaj gönderen mussimsek »

SQL Server gibi bazı veritabanlarında bunu direk yapabiliyorsunuz.

CREATE OR ALTER PROCEDURE ...

diye yazarsanız: stored procedure veya fonksiyon varsa düzenliyor, yoksa oluşturuyor. Veritabanınızın bu konuda desteği var mı bir araştırın.

Kolay gelsin.
ozcank
Üye
Mesajlar: 925
Kayıt: 28 Nis 2005 05:29

Re: SP_Procedure Kontrol

Mesaj gönderen ozcank »

Şunu yapmak istiyorum, Tablo var mı yok mu kontrolü yapıyorum var ise program açıyor yok ise tablo oluşturuyor. Şimdi programın içerisine SP_EMANETTRK ve EMANETTRK ler SQL de procedure ve function olarak oluşturmak istiyorum yine aynı kontrol ile ama bir türlü bu kontrolü mevcut kontrole ekleyemedim.

Bu kod yapısı mevcut Tablo için ;

Kod: Tümünü seç

KONTROL.SQL.Text:='SELECT * FROM information_schema.tables WHERE table_name = ''TBLEMANET'''+
                  'OR table_name = ''TBLEMANETPARAM'' '+
'OR table_name = ''TBLEMANETIPTFAT'' '+
'OR table_name = ''TBLEMANETIPTSTH'' '+
'OR table_name = ''TBLEMANETEFAT'' ' ;
 
KONTROL.Open;
KONTROL.First;
 
sList := '';
WHILE NOT KONTROL.Eof  DO
BEGIN
sList := sList +  KONTROL.FieldByName('Table_Name').ASString + '###';
KONTROL.NEXT;
End;
 
 
///////////////// TBLEMANET/////////////////////////
if not POS( 'TBLEMANET###', sList ) >= -1  then
Begin
GroupBox1.Visible:=True;
Button2.Enabled:=True;
                     Mesaj;
                     Abort
End
Else
if not POS( 'TBLEMANET###', sList ) < -1  then
Button2.Enabled:=False;
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2356
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: SP_Procedure Kontrol

Mesaj gönderen freeman35 »

Yukarıda yazdığım sql cümlesini denemedin mi? sonuç 0 sa yoktur o zaman Mustafa nın verdiği şekilde ikinci bir sql ile doaha doğru cümle script ile neyi istiyorsan oluşturacaksın
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 !!!
ozcank
Üye
Mesajlar: 925
Kayıt: 28 Nis 2005 05:29

Re: SP_Procedure Kontrol

Mesaj gönderen ozcank »

Arkadaşlar eğer SP_EMANETTRK procedure ve EMANETTRK function kontrol de var , yok kontrolü yaptırmak istiyorum. Eğer var ise Button false olacak , yok ise Button true olacak bunu nasıl yapabilirim? Yardımcı olur musunuz?

Kod: Tümünü seç

KONTROL.SQL.Text:='IF EXISTS (SELECT type_desc, type FROM sys.procedures WITH(NOLOCK) WHERE NAME = ''SP_EMANETTRK'' AND type = ''P'') '+ 
                              'DROP PROCEDURE dbo.SP_EMANETTRK' + 
                              'GO '+
'  CREATE PROC [dbo].[SP_EMANETTRK] '+  
' (@STOK_KODU Nvarchar(150) = null ,  '+
' @GRUP_KODU Nvarchar(150) = null ,  '+
' @KOD_1 Nvarchar(80) = null ,  '+
' @KOD_2 Nvarchar(80) = null ,  '+
' @KOD_3 Nvarchar(80) = null ,  '+
' @KOD_4 Nvarchar(80) = null ,  '+
' @KOD_5 Nvarchar(80) = null ,  '+
' @DEPO_KODU smallint = null ,  '+
' @SUBE_KODU smallint = null )  '+
' AS '+
...
..

Kod: Tümünü seç

KONTROL.SQL.Text:='CREATE FUNCTION [dbo].[EMANETTRK] (' +
                  '@STR NVARCHAR(MAX)) '+
                  'RETURNS NVARCHAR(MAX) '+
                  'AS '+
                  'BEGIN '+
                  'DECLARE @TMP NVARCHAR(MAX) '+
                  'IF @STR IS NULL '+
                  'SET @TMP = NULL '+
                  'ELSE '+
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2356
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: SP_Procedure Kontrol

Mesaj gönderen freeman35 »

freeman35 yazdı: 14 Eyl 2020 08:38 https://stackoverflow.com/questions/175 ... sts-or-not
object_id 'P' ve 'PC' olanaları kontrol et

Kod: Tümünü seç

      'SELECT sayi=count(*) 
      'FROM sys.objects       
      WHERE object_id = OBJECT_ID(N''[dbo].['procedure_adi']') AND type in (N''P'', N'PC')
Bu mesajı gördün mü?
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 !!!
ozcank
Üye
Mesajlar: 925
Kayıt: 28 Nis 2005 05:29

Re: SP_Procedure Kontrol

Mesaj gönderen ozcank »

Merhaba; Evet gördüm ve kullandım ama sonuç yanlış veriyor varsa da yoksa da değer '0'

Bu kodları SQL de deniyorum

Kod: Tümünü seç

SELECT sayi=count(*) 
      'FROM sys.objects       
      WHERE object_id = OBJECT_ID(N''[dbo].['EMANETTRK']') AND type in (N'U')


bu şekilde

Kod: Tümünü seç

SELECT sayi=count(*) 
      FROM sys.objects       
      WHERE object_id = OBJECT_ID(N'dbo.EMANETTRK')
doğru sonuç veriyor.

Delphi de yapmak istediğim bu sonuca göre Button1 True veya False yapmak istiyorum. Belki de çok basit ama ben bir türlü dönen sonucu "SAYI" değerini
kullanamadım.
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2356
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: SP_Procedure Kontrol

Mesaj gönderen freeman35 »

AdoQuery ile
S:='SELECT sayi=count(*) FROM sys.objects WHERE object_id = OBJECT_ID(N''[dbo].[%s]'') AND type in (N''P'', N''PC'') '
qry_check_sp.SQL.Text:= Format(S, ['procedure_Adi']);
qry_check_sp.Open;
if qry_check_sp.Fields[0].AsInteger<1then begin
// qry_sp_Yoksa adoQuery. Form üzerinde, SQL kısmında create sp, func... script var
qry_sp_Yoksa.Parameters.Clear;
qry_sp_Yoksa.ExecSQL;
end;
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 !!!
ozcank
Üye
Mesajlar: 925
Kayıt: 28 Nis 2005 05:29

Re: SP_Procedure Kontrol

Mesaj gönderen ozcank »

Freeman35 Hocam dediğin şekilde çözdüm. Çok Teşekkür ederim yüreğine sağlık.

Çözüm şu şekilde;

Kod: Tümünü seç

S:='SELECT sayi=count(*) FROM sys.objects WHERE object_id = OBJECT_ID(N''dbo.%S'') ';
Kontrol.SQL.Text:= Format(S,['SP_EMANETTRK']);
Kontrol.Open;

if Kontrol.Fields[0].AsInteger < 1 then
begin
GroupBox1.Visible:=True;
Button7.Enabled:=True;
Abort
End
Else
Button7.Enabled:=False;
End;
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2356
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: SP_Procedure Kontrol

Mesaj gönderen freeman35 »

Ne kadar sade kod, o kadar anlaşılır kod
Button7.Enabled:= (Kontrol.Fields[0].AsInteger < 1);

Abort tan sonra ";" ve neden Abort? else zaten çalışmaz. Aşağıda kod varsa Neden Exit değil? Abort ile Exit; faklıdır.
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 !!!
ozcank
Üye
Mesajlar: 925
Kayıt: 28 Nis 2005 05:29

Re: SP_Procedure Kontrol

Mesaj gönderen ozcank »

Merhaba, Freeman35 hocam Abort yerine Exit kullandığım zaman hiç buttona bakmadan program açıyor Abort dediğim de button da duruyor.
Burda şöyle bir çalışma şekli var;
Tablolar,Procedure ve Function var herbir tabloyu kullanıcı tıklayarak oluşturuyor oluşmayan tablo var ise program açmıyor.
ve ben burada Else kullanarak kontrolü yaptırıyorum.

Kod: Tümünü seç

S:='SELECT sayi=count(*) FROM sys.objects WHERE object_id = OBJECT_ID(N''dbo.%S'') ';
Kontrol.SQL.Text:= Format(S,['SP_EMANETTRK']);
Kontrol.Open;

if Kontrol.Fields[0].AsInteger < 1 then
begin
GroupBox1.Visible:=True;
Button7.Enabled:= (Kontrol.Fields[0].AsInteger < 1);
Abort;
End
Else
Button7.Enabled:=False;
End;
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2356
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: SP_Procedure Kontrol

Mesaj gönderen freeman35 »

Anlaşıldı :)
Abort, yapılan işlem her ne ise işlemi sonlandırır. Exit ise sadece bulunduğu yordamdan çıkar. Ben kodunun tamamını görmeden fikir yürütemem. Dikkatini çekmek için yazdım. Kod yazmak kolay iştir. devletin üstmakamlarının üç yılda bir milyon lafını boş muhabbet. Halk eğitim merkezleri yılardır, öle 3-5 yılda değil, baya yıllardır. Aklınıza gelmeyecek konularda kurslar düzenler ve eğitim verir. Yanılmıyorsam da sertifika verir. Programcılık dedikleri kod yazmak. web dizayn, galiba web yazılım dedikleri bir şeyde var.
Yani kod yazmayı öğrenmek 3-5 saatlik bir şey. İş program tasarlamaktır, kurgulamaktır. Gene söylüyorum, kodunu görmedim, örnek olması açısından yazıyorum, abort kullanmak yerine bu işlemi bir function a atayıp, bunu çağırdığın yerde, dönen result a göre yönelendirmek daha doğru olur. Abort, işlemi olduğu yerde sonlandırır.

Kod: Tümünü seç

var S:sting ='SELECT sayi=count(*) FROM sys.objects WHERE object_id = OBJECT_ID(N''dbo.%S'') ';

Function Test(sp: String):Boolean;
  Result:= False;
   Kontrol.SQL.Text:= Format(S,[sp]);
   Kontrol.Open;
  Result:= (Kontrol.Fields[0].AsInteger < 1);
   Kontrol.Close;// Askerdeki mantık, Gereksizse söndür :)
  GroupBox1.Visible:= Result;
  Button7.Enabled:= Result
End;
.....
 İf not Test('SP_EMANETTRK')then begin
   ShowMessage('Program çalışamaz...');
   Application.Terminate;
 end;
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 !!!
ozcank
Üye
Mesajlar: 925
Kayıt: 28 Nis 2005 05:29

Re: SP_Procedure Kontrol

Mesaj gönderen ozcank »

Teşekkür ederim üstadım.
Cevapla