Delphi Can

Orjinalini görmek için tıklayınız: SQL Tablo Var veya Yok Kontrolu !!
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
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,');
(10-02-2019, Saat: 09:14)OZCANK Adlı Kullanıcıdan Alıntı: [ -> ]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ı.';
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
(10-02-2019, Saat: 09:28)cinarbil Adlı Kullanıcıdan Alıntı: [ -> ]
(10-02-2019, Saat: 09:14)OZCANK Adlı Kullanıcıdan Alıntı: [ -> ]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.
(11-02-2019, Saat: 06:22)OZCANK Adlı Kullanıcıdan Alıntı: [ -> ]
(10-02-2019, Saat: 09:28)cinarbil Adlı Kullanıcıdan Alıntı: [ -> ]
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;

(12-02-2019, Saat: 06:17)Bu şekilde de denedim yine olmadı DATABASE bulamıyorum ; Adlı Kullanıcıdan Alıntı: [ -> ]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.
(12-02-2019, Saat: 06:17)OZCANK Adlı Kullanıcıdan Alıntı: [ -> ]
(11-02-2019, Saat: 06:22)OZCANK Adlı Kullanıcıdan Alıntı: [ -> ]Ç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.
(12-02-2019, Saat: 07:11)FiRewaLL Adlı Kullanıcıdan Alıntı: [ -> ]
(12-02-2019, Saat: 06:17)Bu şekilde de denedim yine olmadı DATABASE bulamıyorum ; Adlı Kullanıcıdan Alıntı: [ -> ]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'
Sizin program yazmadan önce temel programlama ve Delphi öğrenmeniz gerekiyor. Bu nedenle konuyu kilitliyorum.