Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
SQL Tablo Var veya Yok Kontrolu !!
#1
Arkadaşlar Merhaba , Ben bir yerde takıldım bana yardımcı olur musunuz ?
DATA değişkeninde ilgili şirketi buluyorum ve bu şirket altında 'TBLPARAMETRE' tablosu varsa programa girecek yoksa tabloyu create edecek bunu nasıl yapabilirim?
Şirket Databases 'SOFT2019'
Şirket altındaki Tablo 'TBLPARAMETRE'

Bu şekilde oluşturuyor fakat ben 'USE [SOFT2019]' şirket adını yazarsam  
Var
DATA:String;
begin
//////////////şirket datasını bulma
    DATA:=DBLookupComboBox1.Text;
    ADOConnection1.Connected:=False;
    memo1.Lines.LoadFromFile('c:\Pro\dataconnection.txt');
    ADOConnection1.DefaultDatabase:=DATA;
    ADOConnection1.Connected:=True;
/////////////////////////////////////
SIRKET.Close;
SIRKET.SQL.Clear;
SIRKET.SQL.Add('USE [SOFT2019]');
SIRKET.SQL.Add('SET ANSI_NULLS ON');
SIRKET.SQL.Add('SET QUOTED_IDENTIFIER ON');
SIRKET.SQL.Add('SET ANSI_PADDING ON');
SIRKET.SQL.Add('CREATE TABLE [dbo].[TBLPARAMETRE](');
SIRKET.SQL.Add('[PARAM_1] [varchar](15) NULL,');
#2
(10-02-2019, Saat: 09:14)OZCANK Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Arkadaşlar Merhaba , Ben bir yerde takıldım bana yardımcı olur musunuz ?
DATA değişkeninde ilgili şirketi buluyorum ve bu şirket altında 'TBLPARAMETRE' tablosu varsa programa girecek yoksa tabloyu create edecek bunu nasıl yapabilirim?
Şirket Databases 'SOFT2019'
Şirket altındaki Tablo 'TBLPARAMETRE'

Bu şekilde oluşturuyor fakat ben 'USE [SOFT2019]' şirket adını yazarsam  
Var
DATA:String;
begin
//////////////şirket datasını bulma
    DATA:=DBLookupComboBox1.Text;
    ADOConnection1.Connected:=False;
    memo1.Lines.LoadFromFile('c:\Pro\dataconnection.txt');
    ADOConnection1.DefaultDatabase:=DATA;
    ADOConnection1.Connected:=True;
/////////////////////////////////////
SIRKET.Close;
SIRKET.SQL.Clear;
SIRKET.SQL.Add('USE [SOFT2019]');
SIRKET.SQL.Add('SET ANSI_NULLS ON');
SIRKET.SQL.Add('SET QUOTED_IDENTIFIER ON');
SIRKET.SQL.Add('SET ANSI_PADDING ON');
SIRKET.SQL.Add('CREATE TABLE [dbo].[TBLPARAMETRE](');
SIRKET.SQL.Add('[PARAM_1] [varchar](15) NULL,');
select * from master.dbo.sysdatabases

// sorgu ile sql databases baglan sql de bulunan database isimlerinde senin aradığın var mı bak
   
while not data_form.giris2_sorgu.Eof do
   begin
     // sql de çalışılacak firma varmı ona bakıyor
       if (data_form.giris2_sorgu.FieldByName('NAME').AsString = Database_adi ) then
       begin
         x_tamyol := data_form.giris2_sorgu.FieldByName('FILENAME').AsString;
         // sql den databases yolu ve adını alıyor
         data_form.giris1_sorgu.Close; // sysprm kapat
         data_form.giris2_sorgu.Close; // sysdatabases kapat
         giris_frm.Hide;
         Application.CreateForm(Tanamenufrm, anamenufrm);
             try
             anamenufrm.ShowModal;
             finally
             giris_frm.Show;
             halt;
             giris_frm.close;
             end;

       end  else data_form.giris2_sorgu.Next;
   end; // do while end

   mesaj := Database_adi + ' isimli veritabanı bulunamadı.';

	
"…De ki: "Hiç bilenlerle bilmeyenler bir olur mu? Şüphesiz, temiz akıl sahipleri öğüt alıp-düşünürler" (Zümer Suresi, 9)
#3
Her veritabanında INFORMATION_SCHEMA.TABLES adında bir 'system view' var.

Kendi veritabanında iken "select * from INFORMATION_SCHEMA.TABLES" çağırabilirsin.


IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES
           WHERE TABLE_NAME = 'tablo_adı')
BEGIN
   DROP TABLE tablo_adı
END ELSE
BEGIN
   CREATE TABLE tablo_adı 
   ...
END
#4
(10-02-2019, Saat: 09:28)cinarbil Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
(10-02-2019, Saat: 09:14)OZCANK Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Arkadaşlar Merhaba , Ben bir yerde takıldım bana yardımcı olur musunuz ?
DATA değişkeninde ilgili şirketi buluyorum ve bu şirket altında 'TBLPARAMETRE' tablosu varsa programa girecek yoksa tabloyu create edecek bunu nasıl yapabilirim?
Şirket Databases 'SOFT2019'
Şirket altındaki Tablo 'TBLPARAMETRE'

Bu şekilde oluşturuyor fakat ben 'USE [SOFT2019]' şirket adını yazarsam  
Var
DATA:String;
begin
//////////////şirket datasını bulma
    DATA:=DBLookupComboBox1.Text;
    ADOConnection1.Connected:=False;
    memo1.Lines.LoadFromFile('c:\Pro\dataconnection.txt');
    ADOConnection1.DefaultDatabase:=DATA;
    ADOConnection1.Connected:=True;
/////////////////////////////////////
SIRKET.Close;
SIRKET.SQL.Clear;
SIRKET.SQL.Add('USE [SOFT2019]');
SIRKET.SQL.Add('SET ANSI_NULLS ON');
SIRKET.SQL.Add('SET QUOTED_IDENTIFIER ON');
SIRKET.SQL.Add('SET ANSI_PADDING ON');
SIRKET.SQL.Add('CREATE TABLE [dbo].[TBLPARAMETRE](');
SIRKET.SQL.Add('[PARAM_1] [varchar](15) NULL,');
select * from master.dbo.sysdatabases

// sorgu ile sql databases baglan sql de bulunan database isimlerinde senin aradığın var mı bak
   
while not data_form.giris2_sorgu.Eof do
   begin
     // sql de çalışılacak firma varmı ona bakıyor
       if (data_form.giris2_sorgu.FieldByName('NAME').AsString = Database_adi ) then
       begin
         x_tamyol := data_form.giris2_sorgu.FieldByName('FILENAME').AsString;
         // sql den databases yolu ve adını alıyor
         data_form.giris1_sorgu.Close; // sysprm kapat
         data_form.giris2_sorgu.Close; // sysdatabases kapat
         giris_frm.Hide;
         Application.CreateForm(Tanamenufrm, anamenufrm);
             try
             anamenufrm.ShowModal;
             finally
             giris_frm.Show;
             halt;
             giris_frm.close;
             end;

       end  else data_form.giris2_sorgu.Next;
   end; // do while end

   mesaj := Database_adi + ' isimli veritabanı bulunamadı.';

Çok Teşekkür ederim yardımın için. Bende şu şekilde Kodunu değiştirdim ;

procedure TForm1.BitBtn3Click(Sender: TObject);
Var
yol,DATA:String;
begin
//////////////şirket datasını bulma
    DATA:=DBLookupComboBox1.Text;
    ADOConnection1.Connected:=False;
    memo1.Lines.LoadFromFile('c:\Pro\dataconnection.txt');
    ADOConnection1.DefaultDatabase:=DATA;
    ADOConnection1.Connected:=True;

/////////////////////////////////////

SIRKET.SQL.Add('select * from master.dbo.sysdatabases');
while not SIRKET.Eof do
  begin
    // sql de çalışılacak firma varmı ona bakıyor
      if (SIRKET.FieldByName('NAME').AsString = DATA ) then
      begin
       yol := SIRKET.FieldByName('FILENAME').AsString;
        // sql den databases yolu ve adını alıyor
         SIRKET.Close; // sysprm kapat
//         giris_frm.Hide;
//         Application.CreateForm(Tanamenufrm, anamenufrm);
            try
            ShowMessage('1');
            //anamenufrm.ShowModal;
            finally
            //giris_frm.Show;
            //halt;
            //giris_frm.close;
            ShowMessage('2');
            end;

      end  else SIRKET.Next;
  end; // do while end
  ShowMessage(DATA);
  ShowMessage(NAME);
  ShowMessage('YOK');
//   mesaj := DATA + ' isimli veritabanı bulunamadı.';
//////////////////////////////////////
DATA : Şirketi doğru buluyor
NAME : Form1 diye bir şey buluyor . Database eşitleyemedim. Eşitledikten sonra da ilgili Database altın da Tablo bulmalıyım.
#5
(11-02-2019, Saat: 06:22)OZCANK Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
(10-02-2019, Saat: 09:28)cinarbil Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
select * from master.dbo.sysdatabases

// sorgu ile sql databases baglan sql de bulunan database isimlerinde senin aradığın var mı bak
   
while not data_form.giris2_sorgu.Eof do
   begin
     // sql de çalışılacak firma varmı ona bakıyor
       if (data_form.giris2_sorgu.FieldByName('NAME').AsString = Database_adi ) then
       begin
         x_tamyol := data_form.giris2_sorgu.FieldByName('FILENAME').AsString;
         // sql den databases yolu ve adını alıyor
         data_form.giris1_sorgu.Close; // sysprm kapat
         data_form.giris2_sorgu.Close; // sysdatabases kapat
         giris_frm.Hide;
         Application.CreateForm(Tanamenufrm, anamenufrm);
             try
             anamenufrm.ShowModal;
             finally
             giris_frm.Show;
             halt;
             giris_frm.close;
             end;

       end  else data_form.giris2_sorgu.Next;
   end; // do while end

   mesaj := Database_adi + ' isimli veritabanı bulunamadı.';

Çok Teşekkür ederim yardımın için. Bende şu şekilde Kodunu değiştirdim ;

procedure TForm1.BitBtn3Click(Sender: TObject);
Var
yol,DATA:String;
begin
//////////////şirket datasını bulma
    DATA:=DBLookupComboBox1.Text;
    ADOConnection1.Connected:=False;
    memo1.Lines.LoadFromFile('c:\Pro\dataconnection.txt');
    ADOConnection1.DefaultDatabase:=DATA;
    ADOConnection1.Connected:=True;

/////////////////////////////////////

SIRKET.SQL.Add('select * from master.dbo.sysdatabases');
while not SIRKET.Eof do
  begin
    // sql de çalışılacak firma varmı ona bakıyor
      if (SIRKET.FieldByName('NAME').AsString = DATA ) then
      begin
       yol := SIRKET.FieldByName('FILENAME').AsString;
        // sql den databases yolu ve adını alıyor
         SIRKET.Close; // sysprm kapat
//         giris_frm.Hide;
//         Application.CreateForm(Tanamenufrm, anamenufrm);
            try
            ShowMessage('1');
            //anamenufrm.ShowModal;
            finally
            //giris_frm.Show;
            //halt;
            //giris_frm.close;
            ShowMessage('2');
            end;

      end  else SIRKET.Next;
  end; // do while end
  ShowMessage(DATA);
  ShowMessage(NAME);
  ShowMessage('YOK');
//   mesaj := DATA + ' isimli veritabanı bulunamadı.';
//////////////////////////////////////
DATA : Şirketi doğru buluyor
NAME : Form1 diye bir şey buluyor . Database eşitleyemedim. Eşitledikten sonra da ilgili Database altın da Tablo bulmalıyım.
Bu şekilde de denedim yine olmadı DATABASE bulamıyorum ;
DATA :  ile Şirketi DATABASE buluyorum sonra NAME ile eşitliyorum.
ama tepkisiz. Yardımcı olurmusunuz ?

procedure TForm1.BitBtn3Click(Sender: TObject);
Var
DATA:String;
begin
//////////////şirket datasını bulma
    DATA:=DBLookupComboBox1.Text;
    ADOConnection1.Connected:=False;
    memo1.Lines.LoadFromFile('c:\Pro\dataconnection.txt');
    ADOConnection1.DefaultDatabase:=DATA;
    ADOConnection1.Connected:=True;

/////////////////////////////////////
KONTROL.Close;
KONTROL.SQL.Clear;
KONTROL.SQL.Text:=' select * from master.dbo.sysdatabases';
while not KONTROL.Eof do
  begin
    // sql de çalışılacak database var mı ona bakıyor
      if (KONTROL.FieldByName('NAME').AsString = DATA ) then
      begin
ShowMessage('Buldum');
end
Else
Begin
ShowMessage('Bulamadım');
end;
End;

#6
(12-02-2019, Saat: 06:17)Bu şekilde de denedim yine olmadı DATABASE bulamıyorum ; Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.DATA :  ile Şirketi DATABASE buluyorum sonra NAME ile eşitliyorum.
ama tepkisiz. Yardımcı olurmusunuz ?

procedure TForm1.BitBtn3Click(Sender: TObject);
Var
DATA:String;
begin
//////////////şirket datasını bulma
    DATA:=DBLookupComboBox1.Text;
    ADOConnection1.Connected:=False;
    memo1.Lines.LoadFromFile('c:\Pro\dataconnection.txt');
    ADOConnection1.DefaultDatabase:=DATA;
    ADOConnection1.Connected:=True;

/////////////////////////////////////
KONTROL.Close;
KONTROL.SQL.Clear;
KONTROL.SQL.Text:=' select * from master.dbo.sysdatabases';
while not KONTROL.Eof do
  begin
    // sql de çalışılacak database var mı ona bakıyor
      if (KONTROL.FieldByName('NAME').AsString = DATA ) then
      begin
ShowMessage('Buldum');
end
Else
Begin
ShowMessage('Bulamadım');
end;
End;


 qry1.SQL.Add('select * from master.dbo.sysdatabases  WHERE name = ''ARANANDATA''');
  qry1.Open;
  qry1.ExecSQL;

  while not qry1.Eof do
  begin
    if (qry1.FieldByName('NAME').AsString = 'ARANANDATA') then
    begin
      ShowMessage('Buldu');
      exit;
    end
    else
    begin
      ShowMessage('Yok');
      exit;
    end;
  end;

Bu Şekilde ararsan Sonuca varırsın.
Kolay Gelsin.
#7
(12-02-2019, Saat: 06:17)OZCANK Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
(11-02-2019, Saat: 06:22)OZCANK Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Çok Teşekkür ederim yardımın için. Bende şu şekilde Kodunu değiştirdim ;

procedure TForm1.BitBtn3Click(Sender: TObject);
Var
yol,DATA:String;
begin
//////////////şirket datasını bulma
    DATA:=DBLookupComboBox1.Text;
    ADOConnection1.Connected:=False;
    memo1.Lines.LoadFromFile('c:\Pro\dataconnection.txt');
    ADOConnection1.DefaultDatabase:=DATA;
    ADOConnection1.Connected:=True;

/////////////////////////////////////

SIRKET.SQL.Add('select * from master.dbo.sysdatabases');
while not SIRKET.Eof do
  begin
    // sql de çalışılacak firma varmı ona bakıyor
      if (SIRKET.FieldByName('NAME').AsString = DATA ) then
      begin
       yol := SIRKET.FieldByName('FILENAME').AsString;
        // sql den databases yolu ve adını alıyor
         SIRKET.Close; // sysprm kapat
//         giris_frm.Hide;
//         Application.CreateForm(Tanamenufrm, anamenufrm);
            try
            ShowMessage('1');
            //anamenufrm.ShowModal;
            finally
            //giris_frm.Show;
            //halt;
            //giris_frm.close;
            ShowMessage('2');
            end;

      end  else SIRKET.Next;
  end; // do while end
  ShowMessage(DATA);
  ShowMessage(NAME);
  ShowMessage('YOK');
//   mesaj := DATA + ' isimli veritabanı bulunamadı.';
//////////////////////////////////////
DATA : Şirketi doğru buluyor
NAME : Form1 diye bir şey buluyor . Database eşitleyemedim. Eşitledikten sonra da ilgili Database altın da Tablo bulmalıyım.
Bu şekilde de denedim yine olmadı DATABASE bulamıyorum ;
DATA :  ile Şirketi DATABASE buluyorum sonra NAME ile eşitliyorum.
ama tepkisiz. Yardımcı olurmusunuz ?

procedure TForm1.BitBtn3Click(Sender: TObject);
Var
DATA:String;
begin
//////////////şirket datasını bulma
    DATA:=DBLookupComboBox1.Text;
    ADOConnection1.Connected:=False;
    memo1.Lines.LoadFromFile('c:\Pro\dataconnection.txt');
    ADOConnection1.DefaultDatabase:=DATA;
    ADOConnection1.Connected:=True;

/////////////////////////////////////
KONTROL.Close;
KONTROL.SQL.Clear;
KONTROL.SQL.Text:=' select * from master.dbo.sysdatabases';
while not KONTROL.Eof do
  begin
    // sql de çalışılacak database var mı ona bakıyor
      if (KONTROL.FieldByName('NAME').AsString = DATA ) then
      begin
ShowMessage('Buldum');
end
Else
Begin
ShowMessage('Bulamadım');
end;
End;


while döngüsü içinde KONTROL.NEXT satırı olmadığından sonsuz döngüye girmiş!  

KONTROL.NEXT satırını eklerseniz sorununuz çözülecektir.
Girdim İlim Meclisine, 
Eyledim Kıldım Talep, 

Dediler İlim Geride, 
İlla Edep İlla Edep.

Yunus Emre
#8
(12-02-2019, Saat: 07:11)FiRewaLL Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
(12-02-2019, Saat: 06:17)Bu şekilde de denedim yine olmadı DATABASE bulamıyorum ; Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.DATA :  ile Şirketi DATABASE buluyorum sonra NAME ile eşitliyorum.
ama tepkisiz. Yardımcı olurmusunuz ?

procedure TForm1.BitBtn3Click(Sender: TObject);
Var
DATA:String;
begin
//////////////şirket datasını bulma
    DATA:=DBLookupComboBox1.Text;
    ADOConnection1.Connected:=False;
    memo1.Lines.LoadFromFile('c:\Pro\dataconnection.txt');
    ADOConnection1.DefaultDatabase:=DATA;
    ADOConnection1.Connected:=True;

/////////////////////////////////////
KONTROL.Close;
KONTROL.SQL.Clear;
KONTROL.SQL.Text:=' select * from master.dbo.sysdatabases';
while not KONTROL.Eof do
  begin
    // sql de çalışılacak database var mı ona bakıyor
      if (KONTROL.FieldByName('NAME').AsString = DATA ) then
      begin
ShowMessage('Buldum');
end
Else
Begin
ShowMessage('Bulamadım');
end;
End;


 qry1.SQL.Add('select * from master.dbo.sysdatabases  WHERE name = ''ARANANDATA''');
  qry1.Open;
  qry1.ExecSQL;

  while not qry1.Eof do
  begin
    if (qry1.FieldByName('NAME').AsString = 'ARANANDATA') then
    begin
      ShowMessage('Buldu');
      exit;
    end
    else
    begin
      ShowMessage('Yok');
      exit;
    end;
  end;

Bu Şekilde ararsan Sonuca varırsın.
Kolay Gelsin.

Merhaba ; Dediğiniz gibi Kodu düzenledim ama yine sonuç alamadım değiştirdiğim hali ;
procedure TForm1.BitBtn3Click(Sender: TObject);
Var
DATA:String;
begin
//////////////şirket datasını bulma
    DATA:=DBLookupComboBox1.Text;
    ADOConnection1.Connected:=False;
    memo1.Lines.LoadFromFile('c:\Pro\dataconnection.txt');
    ADOConnection1.DefaultDatabase:=DATA;
    ADOConnection1.Connected:=True;

/////////////////////////////////////
 KONTROL.SQL.Add('SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_CATALOG=''DATA'''); //// Şirket data bulma
 KONTROL.Open;
 KONTROL.ExecSQL;

 while not KONTROL.Eof do
 begin
   if (KONTROL.FieldByName('TABLE_NAME').AsString = 'TBLANATABLO') OR
      (KONTROL.FieldByName('TABLE_NAME').AsString = 'TBLIPTFAT') OR
      (KONTROL.FieldByName('TABLE_NAME').AsString = 'TBLIPTSTH') OR
      (KONTROL.FieldByName('TABLE_NAME').AsString = 'TBLEFAT') OR
      (KONTROL.FieldByName('TABLE_NAME').AsString = 'TBLPARAM') Then
   begin
     ShowMessage('Tablo Oluşturma');
     exit;
   end
   else
   begin
     ShowMessage('Tablo Oluştur');
     exit;
  End;
KONTROL.Next;
End;
End;
Amacım İlgili şirketi bulmak ve altındaki tabloları kontrol etmek var ise programa girecek yok ise hangisi yoksa onu Create edecek.

Bu şekilde SQL de sorgu çektiğimde Tablolar geliyor.
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_CATALOG='DATA2019' AND TABLE_NAME='TBLANATABLO' or TABLE_NAME='TBLIPTFAT' or TABLE_NAME='TBLIPTSTH' or TABLE_NAME='TBLEFAT' or TABLE_NAME='TBLPARAM'
#9
Sizin program yazmadan önce temel programlama ve Delphi öğrenmeniz gerekiyor. Bu nedenle konuyu kilitliyorum.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  ÇÖZÜLDÜ-timer kullanmadan saat kontrolü mümkünmü? sadikacar60 3 129 10-09-2019, Saat: 22:19
Son Yorum: sadettinpolat
  Deneme süreli lisans kontrolü anemos 1 196 18-07-2019, Saat: 20:12
Son Yorum: cinarbil
  Delphi 7- 4 Adet Tablo Döngü Problemi bsrgmsy 2 418 20-05-2019, Saat: 17:17
Son Yorum: bsrgmsy
  Fastreport nesne kontrolu ve veri yazma cinarbil 3 380 18-04-2019, Saat: 08:16
Son Yorum: cinarbil
  SQL de Aynı Tablo İçinde Kopyalamak OZCANK 7 552 09-04-2019, Saat: 11:00
Son Yorum: Tuğrul HELVACI



Konuyu Okuyanlar: 1 Ziyaretçi