SQL Veritabanındaki Table'lerden Şarta Bağlı Seçim

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
izmirlikemal
Üye
Mesajlar: 155
Kayıt: 10 Oca 2014 01:08
Konum: izmir/Buca

SQL Veritabanındaki Table'lerden Şarta Bağlı Seçim

Mesaj gönderen izmirlikemal »

Daha önce sorduğum MSSQL de bulunan veritabanlarından istediğimi DBGrid'de listeleme ilgili sorumu çözdüm, aşağıda çözümü paylaşacağım.
Ama bu arada başkabir sorunumu çözebilmem için sizlerden yardım beklentim var.
Sorum şu:
Aşağıda combobox1 de bütün tablolar listeleniyor ben table'leri belli bir şarta bağlı, örneğin ilk 3 harfi 'rad' ile başlayanları Combobox'da listeleme ve buradan istediğim bir tanesini seçmek istiyorum,böyle bir olasılık varmı?
Not: Kullandığım Delphi versiyonu; Delphi 10.2
Şimdi daha önce sorduğum Veritabanlarını Listeleme ilgili bulduğum çözümü sizlerle paylaşıyorum, burada veritabanındaki Table'leri şarta bağlı olarak ( Örneğin; isimlerinin ilk 3 veya 4 harfi ) Combobox1 de listeleyip oradan işime yarayacak olanı seçmek istiyorum.
Önceki sorumun çözümü:
------------------------------

Kod: Tümünü seç

procedure TForm1.VeriTabaniListesi;
 var
  SL: TStrings;
  index: Integer;
begin
  SL := TStringList.Create;
  try
     ADOConnection1.GetTableNames(SL, False);
    for index := 0 to (SL.Count - 1) do begin
    ComboBox1.Items.Add(SL.Strings[index]);
    end;
  finally
    SL.Free;
  end;
end;
[code]
ertank
Kıdemli Üye
Mesajlar: 1651
Kayıt: 12 Eyl 2015 12:45

Re: SQL Veritabanındaki Table'lerden Şarta Bağlı Seçim

Mesaj gönderen ertank »

Merhaba,

Aşağıdaki gibi bir fonksiyon kullanılabilir.

Kod: Tümünü seç

function GetTableNames(const Connection: TAdoConnection; List: TStrings; const StartsWith: string = ''; const IgnoreCase: Boolean = False): Boolean;
var
  I: Integer;
begin
  if not Connection.Connected then Exit(False);
  if not Assigned(List) then Exit(False);

  Connection.GetTableNames(List, False);

  if StartsWith <> EmptyStr then
  begin
    I := 0;
    while I < List.Count do
    begin
      if not List[I].StartsWith(StartsWith, IgnoreCase) then
      begin
        List.Delete(I);
      end
      else
      begin
        Inc(I);
      end;
    end;
  end;
  
  Result := True;
end;
Uygulama içindeki aşağıdaki gibi çağırılabilir:

Kod: Tümünü seç

  // Sadece "temp" ile başlayan tablo isimlerini almak için
  GetTableNames(ADOConnection1, ComboBox1.Items, 'temp');
  
  // Sadece "res" ile başlayan tablo isimlerini almak için ve büyük küçük harf ayrımı yapmamak için
  GetTableNames(ADOConnection1, ComboBox1.Items, 'res', True);
  
  // Bütün tablo isimlerini almak için
  GetTableNames(ADOConnection1, ComboBox1.Items);
  
  // Başarılı bir şekilde bilgilerin alınıp alnımadığını anlamak için
  if GetTableNames(ADOConnection1, ComboBox1.Items) then ShowMessage('Tablo listesi alındı');
izmirlikemal
Üye
Mesajlar: 155
Kayıt: 10 Oca 2014 01:08
Konum: izmir/Buca

Re: SQL Veritabanındaki Table'lerden Şarta Bağlı Seçim

Mesaj gönderen izmirlikemal »

ertan bey deneyecğim, sonuç alırsam buradan paylaşırım. Tşk. Edrm.
izmirlikemal
Üye
Mesajlar: 155
Kayıt: 10 Oca 2014 01:08
Konum: izmir/Buca

Re: SQL Veritabanındaki Table'lerden Şarta Bağlı Seçim

Mesaj gönderen izmirlikemal »

Ertan Bey
Seçenklerden 1 tanesini aktif edip diğerlerini (* *) içine alarak denedim, ancak bütün tablo isimlerini verdi. Burada tabiki "temp" yazan yere veritabanındaki tablonun ilk 4 harfini yazdım. Bilginize...
ertank
Kıdemli Üye
Mesajlar: 1651
Kayıt: 12 Eyl 2015 12:45

Re: SQL Veritabanındaki Table'lerden Şarta Bağlı Seçim

Mesaj gönderen ertank »

Örnek kod çalışıyor. Foruma göndermeden önce birden fazla defa test ettim. Fonksiyonu nasıl kullandığınızı paylaşabilir misiniz?
izmirlikemal
Üye
Mesajlar: 155
Kayıt: 10 Oca 2014 01:08
Konum: izmir/Buca

Re: SQL Veritabanındaki Table'lerden Şarta Bağlı Seçim

Mesaj gönderen izmirlikemal »

Kullanış şeklini önce formcreate ile yaptım, sonra butonla denedim yine de olmadı.

Kod: Tümünü seç

unit Unit4;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Data.Win.ADODB, Vcl.StdCtrls;

type
  TForm4 = class(TForm)
    ADOConnection1: TADOConnection;
    ADOQuery1: TADOQuery;
    ComboBox1: TComboBox;
    Button1: TButton;
    
    function GetTableNames(const Connection: TAdoConnection; List: TStrings; const StartsWith: string = ''; const IgnoreCase: Boolean = False): Boolean;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form4: TForm4;

implementation

{$R *.dfm}

{ TForm4 }

procedure TForm4.Button1Click(Sender: TObject);
label cik;
begin
 // Sadece "temp" ile başlayan tablo isimlerini almak için
 //  GetTableNames(ADOConnection1, ComboBox1.Items, 'temp');

  // Sadece "res" ile başlayan tablo isimlerini almak için ve büyük küçük harf ayrımı yapmamak için
  GetTableNames(ADOConnection1, ComboBox1.Items, 'par', True);

  // Bütün tablo isimlerini almak için
 // GetTableNames(ADOConnection1, ComboBox1.Items);

  // Başarılı bir şekilde bilgilerin alınıp alnımadığını anlamak için

  if GetTableNames(ADOConnection1, ComboBox1.Items) then ShowMessage('Tablo listesi alındı');
end;


  function TForm4.GetTableNames(const Connection: TAdoConnection; List: TStrings;
  const StartsWith: string; const IgnoreCase: Boolean): Boolean;
var
  I: Integer;
begin
  if not Connection.Connected then Exit(False);
  if  Assigned(List) then Exit(False);
                                     
  Connection.GetTableNames(List, False);

  if StartsWith <> EmptyStr then
  begin
    I := 0;
    while I < List.Count do
    begin
      if not List[I].StartsWith(StartsWith, IgnoreCase) then
      begin
        List.Delete(I);
      end
      else
      begin
        Inc(I);
      end;
    end;
  end;

  Result := True;
end;

end.
ertank
Kıdemli Üye
Mesajlar: 1651
Kayıt: 12 Eyl 2015 12:45

Re: SQL Veritabanındaki Table'lerden Şarta Bağlı Seçim

Mesaj gönderen ertank »

Fonksiyonu iki kez çağırıyorsunuz.

En alttaki "if GetTableNames" ile başlayan satır listeye tüm tablo isimlerini yüklüyor. İlgili satır başına da // ekler iseniz istediğiniz olacaktır.
izmirlikemal
Üye
Mesajlar: 155
Kayıt: 10 Oca 2014 01:08
Konum: izmir/Buca

Re: SQL Veritabanındaki Table'lerden Şarta Bağlı Seçim

Mesaj gönderen izmirlikemal »

Ertan Bey şimdi oldu. Teşekkür ederim.
Cevapla