SP_Procedure Kontrol

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ozcank
Üye
Mesajlar: 898
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: 2227
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: 7532
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: 898
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: 2227
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: 898
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: 2227
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: 898
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: 2227
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: 898
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: 2227
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 !!!
Cevapla