Merhaba
Hernekadar konuyu MSSQL Server Forum başlığında paylaşmış olsamda 'naile' nikli arkadaşın uyarısı ile 'PROGRAMLAMA' forum başlığında paylaşmaya karar verdim. Dikkatsizliğim konusunda da tüm arkadaşlarımdan özür dileyerek, sorumu tekrar güncelleme ihtiyacı duydum.
Aşağıdaki kodlardan yararlanarak sorumu sormak istiyorum.
procedure KayitGetir;
Var Query:TAdoQuery;Table_Adi: ?? ;(Burada değişkene tipi ne olacak)
begin
Query := TADOQuery.Create(nil);
Query.Close;
try
Query.Connection:=ADOConnection1;
Query.SQL.Text:='SELECT * FROM MA';
-----
Query.open;
finally
end;
end;
-------------------
Sorunumu sanırım düzgün ve doğru şekilde anlatabilirim düşüncesiyle yukarıda kodlarda bulunan ve altını çizdiğim MSSQL veri tabanındaki "MA" Table adını, örneğin Edit1.text:='MA';
Table_Adi:=Edit1.text; ???? (Böyle değişken olmayacağını biliyorum sadece örneklemek istedim)
bu Edit1.text girdisini Table adı olarak kullanmak istiyorum.
Bunu yapmak istememin sebebi Programı yazarken aynı "alan_adı/alan_adları" verilere ulaşmak için
Veritabanı adını(Table adı) Edit1.text den veya dabgrid denseçerek almak ve programın aynı kodları kullanarak şişmesini önlemek.
Bunu yapmamız mümkün mü? Mümkün ise uzman arkadaşlarımdan yardımcı olmasını ve kısa bir procedure veya Function örneği verebilirler ise memnun olurum. Hayırlı günler dilerim. Teşekkür ederim.
MSSQL veritabanında Table_Adı 'nı DBGrid'den Seçerek veya Edit1 hücresine Girerek Atamak
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Üye
- Mesajlar: 155
- Kayıt: 10 Oca 2014 01:08
- Konum: izmir/Buca
Re: MSSQL veritabanında Table_Adı 'nı DBGrid'den Seçerek veya Edit1 hücresine Girerek Atamak
Kod: Tümünü seç
Query.SQL.Text:='SELECT * FROM '+EditTabloAdi.Text;
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
-
- Üye
- Mesajlar: 155
- Kayıt: 10 Oca 2014 01:08
- Konum: izmir/Buca
Re: MSSQL veritabanında Table_Adı 'nı DBGrid'den Seçerek veya Edit1 hücresine Girerek Atamak
Merhaba,izmirlikemal yazdı: ↑10 Nis 2018 10:16 Merhaba
Hernekadar konuyu MSSQL Server Forum başlığında paylaşmış olsamda 'naile' nikli arkadaşın uyarısı ile 'PROGRAMLAMA' forum başlığında paylaşmaya karar verdim. Dikkatsizliğim konusunda da tüm arkadaşlarımdan özür dileyerek, sorumu tekrar güncelleme ihtiyacı duydum.
Aşağıdaki kodlardan yararlanarak sorumu sormak istiyorum.
procedure KayitGetir;
Var Query:TAdoQuery;Table_Adi: ?? ;(Burada değişkene tipi ne olacak)
begin
Query := TADOQuery.Create(nil);
Query.Close;
try
Query.Connection:=ADOConnection1;
Query.SQL.Text:='SELECT * FROM MA';
-----
Query.open;
finally
end;
end;
-------------------
Sorunumu sanırım düzgün ve doğru şekilde anlatabilirim düşüncesiyle yukarıda kodlarda bulunan ve altını çizdiğim MSSQL veri tabanındaki "MA" Table adını, örneğin Edit1.text:='MA';
Table_Adi:=Edit1.text; ???? (Böyle değişken olmayacağını biliyorum sadece örneklemek istedim)
bu Edit1.text girdisini Table adı olarak kullanmak istiyorum.
Bunu yapmak istememin sebebi Programı yazarken aynı "alan_adı/alan_adları" verilere ulaşmak için
Veritabanı adını(Table adı) Edit1.text den veya dabgrid denseçerek almak ve programın aynı kodları kullanarak şişmesini önlemek.
Bunu yapmamız mümkün mü? Mümkün ise uzman arkadaşlarımdan yardımcı olmasını ve kısa bir procedure veya Function örneği verebilirler ise memnun olurum. Hayırlı günler dilerim. Teşekkür ederim.
Sorunuzu cevaplamadan aşağıdaki konulara dikkatinizi çekmek istiyorum.
0- Kullandığınız Delphi sürümünü belirtmemişsiniz. Örnekler Delphi 10.2.3 sürümü ile uyumlu hazırlanmıştır.
1- Her programlama dilinin zorunlu olmayan ama uyulması halinde okunurluğunu arttıran yazım formatı vardır. Pascal dili için bunlardan en başlıcaları;
- Bolk içinde kalan (begin..end, try..finally..end, değişken tanımı için kullanılan var ile begin arası) kodlar blok hizasından en az iki karakter içeriden yazılır.
- Değişken isimleri birden fazla kelimeden oluşuyor ise arasında alt çizgi "_" kullanmadan her kelimenin ilk harfi büyük olacak şekilde yazılır.
2- Mesaj hazırlar iken "Tam Editör & Önİzleme" butonunu kullanarak mesajınızı hazırlayın. Kod örneklerini seçip "</>" butonunu tıklayın. Böylece yazdığınız kod daha kolay okunabilir olacaktır.
3- Query bileşeni Create edildikten hemen sonra kullandığınız Query.Close() ifadesi gereksizdir. Query bileşenine henüz bir TAdoConnection ataması dahi yapılmadığı için zaten kapalı durumdadır.
4- Create ettiğiniz Query bileşenini Free etmediğiniz için örnek kodunuzda hafıza kaçağı oluşacaktır.
Sorunuza gelince;
Aşağıdaki gibi bir fonksiyon kullanabilirsiniz:
Kod: Tümünü seç
function KayitGetir(Connection: TAdoConnection; const TableName, FieldName: string; const Filter: string = ''): string;
var
Query: TAdoQuery;
begin
Result := EmptyStr;
Query := TADOQuery.Create(nil);
try
Query.Connection:= Connection;
Query.SQL.Text:='SELECT * FROM ' + AnsiQuotedStr(TableName, '"');
if Filter <> EmptyStr then
begin
Query.SQL.Add(Filter);
end;
try
Query.Open(); // TableName veya Filter değerleri hatalı olabilir. Bu durumda boş değer çeviriyoruz.
except
Exit();
end;
Result := Query.FieldByName(FieldName).AsString; // Herşey yolunda gider ise istenilen alanın değerini çeviriyoruz.
finally
Query.Free();
end;
end;
- Parametre olarak TAdoConnection nesnesini alıyor ki böylece kendi başına (Belirli bir forma bağlı kalmadan herhangi bir ünite içerisinde daha sonra da kullanabileceğiniz bir "utility" fonksiyonu olabilir.
- Tablo adı ve hangi alanın değerini görmek istiyorsanız bu bilgileri belirtiyorsunuz.
- Filter değerine örneğin 'WHERE Kodu = 15' gibi bir değer vererek tek bir kayıt bilgisi elde edebilirsiniz. Bu parametre opsiyoneldir. Fonksiyonu çağırır iken kullanmanız şart değil.
Örnek kullanımı aşağıdaki gibi olacaktır:
Kod: Tümünü seç
KayitGetir(AdoConnection1, Edit1.Text, 'adi'); // Filtreleme yapılmadan örnek kullanılış
KayitGetir(AdoConnection1, Edit1.Text, 'adi', 'WHERE kod = 15'); // Filtreleme ile örnek kullanılış
Eğer kayıtları Form/DataModule üzerindeki bir TAdoQuery üzerinden okumanız gerekiyor ise bu defa aşağıdaki gibi bir fonksiyon kullanabilirsiniz:
Kod: Tümünü seç
function GetFieldValue(Query: TAdoQuery; const FieldName: string; out Value: string): Boolean;
begin
if not Assigned(Query) then Exit(False);
try
Value := Query.FieldByName(FieldName).AsString;
except
Exit(False);
end;
end;
Kod: Tümünü seç
unit DbUtilies;
interface
uses
System.SysUtils,
Data.DB,
Data.Win.ADODB;
function GetFieldValue(Query: TAdoQuery; const FieldName: string; out Value: string): Boolean; overload;
function GetFieldValue(Query: TAdoQuery; const FieldName: string; out Value: Integer): Boolean; overload;
implementation
function GetFieldValue(Query: TAdoQuery; const FieldName: string; out Value: string): Boolean;
begin
if not Assigned(Query) then Exit(False);
try
Value := Query.FieldByName(FieldName).AsString;
except
Exit(False);
end;
Result := True;
end;
function GetFieldValue(Query: TAdoQuery; const FieldName: string; out Value: Integer): Boolean;
begin
if not Assigned(Query) then Exit(False);
try
Value := Query.FieldByName(FieldName).AsInteger;
except
Exit(False);
end;
Result := True;
end;
end.
Kod: Tümünü seç
var
KarakterDeger: string;
TamSayiDeger: Integer;
begin
GetFieldValue(AdoQuery1, 'adi', KarakterDeger);
GetFieldValue(AdoQuery1, 'sirano', TamSayiDeger);
end;
Kod: Tümünü seç
var
KarakterDeger: string;
TamSayiDeger: Integer;
begin
if not GetFieldValue(AdoQuery1, 'adi', KarakterDeger) then
begin
ShowMessage('"adi" alanı değeri okunamıyor');
end;
if not GetFieldValue(AdoQuery1, 'adi', TamSayiDeger) then
begin
ShowMessage('"sirano" alanı değeri okunamıyor');
end;
end;
-
- Üye
- Mesajlar: 155
- Kayıt: 10 Oca 2014 01:08
- Konum: izmir/Buca
Re: MSSQL veritabanında Table_Adı 'nı DBGrid'den Seçerek veya Edit1 hücresine Girerek Atamak
ertank Arkadaşım Merhaba...
Yazım kuralları ile ilgili verdiğiniz önerileri yazmakda olduğum programda dikkate almaya başlayacağım. teşekkür ederim.
Sorunumu başka bir şekilde çözmüştüm. Başka arkadaşlarımda yararlanabilir düşüncesiyle paylaşıyorum
Yazım kuralları ile ilgili verdiğiniz önerileri yazmakda olduğum programda dikkate almaya başlayacağım. teşekkür ederim.
Sorunumu başka bir şekilde çözmüştüm. Başka arkadaşlarımda yararlanabilir düşüncesiyle paylaşıyorum
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]