Seçilmeyecek Alan İsmi

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Seçilmeyecek Alan İsmi

Mesaj gönderen pro_imaj »

Merhaba;

SQL Komutlarıyla vtdeki hangi alanları seçeceğimizi yazıyoruz ya

Kod: Tümünü seç

Select CariKodu,CariAdi.... From TableAdi
Şimdi mesela vtde bütün alanları seçerkende.

Kod: Tümünü seç

Select * From TableAdi
Şeklinde yapıyoruz.

Benim tablelerimde 150 civarında alanlar var bu alanların 3-5 tanesi hariç diğerlerini seçtirmek istiyorum böyle bir durumda hepsini tek tek yazmam gerekiyor Halbuki şöyle bişey olsa.

Kod: Tümünü seç

Select Not Row_ID, Not Application_ID From TableAdi
Yani bu iki alan hariç diğerlerini listele nasıl diyebiliriz.

Forumda daha önce buna yakın bir soru hatırlıyorum ama cevapsız kaldığını gördüm böyle bir yaklaşım varmı nasıl olur merak ediyorum.

Saygılarımla
Teşekkürler.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________

Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7527
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

Bildiğim kadarıyla mümkün değil bu.

Kolay gelsin.

Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Maalesef direk öyle bir SQL komutu yok. Ancak MS-SQL tarafında STORED FUNCTION yazarak, Delphi tarafında da basit bir fonksiyon vs. yazarak işini görebilirsin.
Örnek bir fonksiyon:

Kod: Tümünü seç

function GetSelectTextWithExceptFieldNamesOfTableBySQLConnection(const aTableName: string; aSQLConnection: TSQLConnection; const aExceptFieldNames: string; const aExceptFieldNamesSeperator: string = ';'): string;
var
  I: Integer;
begin
  Result := '';
  with TSQLQuery.Create(nil) do
  try
    SQLConnection := aSQLConnection;
    SQL.Text := 'SELECT TOP 0 * FROM ' + aTableName + ' WHERE 1 = 2';
    Active := TRUE;
    with TStringList.Create do
    try
      Text := AnsiReplaceStr(aExceptFieldNames, aExceptFieldNamesSeperator, sLineBreak); //AnsiReplaceStr için uses kısmına StrUtils ilave edilmeli.
      for I := 0 to FieldCount - 1 do
        if IndexOf(Fields[I].FieldName) < 0 then
        begin
          if Result <> '' then Result := Result + ', ';
          Result := Result + Fields[I].FieldName;
        end;
    finally
      Free;
    end;
    Result := 'SELECT ' + Result + ' FROM ' + aTableName;
  finally
    Free;
  end;
end;

.
.
.

ShowMessage(GetSelectTextWithExceptFieldNamesOfTableBySQLConnection('KZBL_DETAY', TheCurrentSQLConnection, 'BUTCE_KODU;KOD;OCAK', ';'));
İyi çalışmalar.

Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Standart Select cümlesinin bu tarz bir kullanımı yok.... Belki ozel olarak bir veritabanında varsa o da tamamen o veritabanına ozel bir istisna olur....

Kolay gelsin...
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)

Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

SQL kodu delphi tarafta oluşturularak bir CheckListBox a doldurulan tüm alanlardan işaretli olanları bir döngü ile ekletebilirsin :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!

Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

Merhaba;

Değerli ceveplarınız için teşekkür ederim. Delphi tarafında yapılabilr elbette.
Bence bu sql bir eksikliğidir diye düşünüyorum ben.

Buna benzer bir kullanım şekli insert into ile yapılan işlemdede görülmektedir. Yani 150 alanınız varsa benzer bir tableye insert into yapmak isterseniz 300 adet alan bilgisi yazmanız gerekiyor.

Teşekkür Ederim.

İyi akşamlar.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________

Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Select cümlesi için haklısınız.. Bahsettiğiniz imkan olsa bir avantaj sağlayabilir....
Fakat aslında insert into tam o mantıkta değil. Yani değer atamak istemediğiniz veya default değerini almasını istediğiniz alanları insert into ya yazmayabilirsiniz... Sadece sorunlu alanları yazip insert yapabilirsiniz....

Eğer 150 alana da farklı değerler atayacaksanız hepsini yazmaktan başka çare zaten olamaz....
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)

Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

fahrettin yazdı: Eğer 150 alana da farklı değerler atayacaksanız hepsini yazmaktan başka çare zaten olamaz....
Ama işte fahrettim abi. yani şöyle bişey diyorum.

Kod: Tümünü seç

insert into TTK
(IslemTur, 

Kod5, 
Kod6, 
Kod7, 
Kod8, 
Kod9, 
Kod10, 
Kod11, 
Kod12, 
Kod13, 
Kod14, 
Depo, 
Vasita, 
SeriNo, 
SevkTarih, 
PromosyonMiktar, 
Miktar2, 
Tutar2, 
Tarih2, 
VadeTarih, 
Masraf, 
Maliyet, 
MlyYontem, 
MhsKod, 
MhsKarsiKod, 
MasrafMerkezi, 
MhsDurum, 
MlyMhs, 
MhsTabloNo, 
EvrakTarih, 
SiparisSiraNo, 
IskontoOran1, 
IskOran1Net, 
IskontoOran2, 
IskOran2Net, 
IskontoOran3, 
IskOran3Net, 
IskontoOran4, 
IskOran4Net, 
IskontoOran5, 
IskOran5Net, 
KlmTutarIsk, 
KlmTutarIskNet, 
TeslimChk, 
ButceKod, 
FytListeNo, 
FatMiktar, 
TesTemMalKod, 
DvzTL, 
BarkodNo, 
BitisTarih, 
Kredi_Donem_VadeTarih, 
Kredi_Donem_VadeFarkiTutar, 
ReelOlmayanFinansmanMaliyet, 
KrediArindirmaSekli, 
FinansmanGiderTuru, 
Duz_Yapilan_Yıl, 
Duz_Yapilan_Donem, 
Duz_Yontemi, 
Duz_Mhs_Hesap_Kodu, 
Duz_Mhs_Durumu, 
Duz_Stok_Devir_Hizi, 
Duz_Katsayisi, 
Duz_Esas_Tutar, 
Duz_Tutar, 
Duz_Mly_Yontemi, 
Duz_Mly_Tarihi_Mly_Tutar, 
Duz_Mly_Satilan_Mal_Mly_Tutar, 
Duz_Mly_Mhs_Hesap_Kodu, 
Duz_Mly_Mhs_Durumu, 
Kaydeden, 

 FROM TTK )
Halbuki

Kod: Tümünü seç

insert into TTK
(*)
(SELECT
*
 FROM TTK )
Ya zaten görüldüğü gibi iki tablede aynı ben neden 100.. üzerinde alanı tek tek yazayımki :(

Anlatmak istediğim bu.

Hayırlı ramazanlar (bu gün ilk sahura kalakacaz ve sahura az kaldı :) )
En son pro_imaj tarafından 22 May 2007 01:14 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________

Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Kod: Tümünü seç

insert into ACK
SELECT * FROM ACK ) 
şeklindeki kod çalışır. Hatta emin olmak için denedim de Sybase'de çalıştı....

Fakat tabi bu kod hiç bir zaman işi görmeyecek.... Zira en başta primary keyler prob lem çıkaracak. Muhakkak değişen alanlar olacak ve mecburen alan yazmak zorunda kalınacak....

Velhasıl iş donup dolanıp dediğiniz yere gelecek :(

Ben bu tür durumlarda veritabanı tarafındaki toollar ile alan listesini bir şekilde alıp kopyala yapıştır yontemi ile bu dertleri aşmaya çalışıyorum....

Görünen o ki kısa vadede alternatif bir çözüm yok....

Kolay gelsin...
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)

Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2247
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar,

Şimdi burada benim asıl sezinlediğim sorun Dosya Yapısının biraz garip kurulmuş olması. Orada bir sürü alan gördüm, Iskonto1, Iskonto2, Kredifaizoranı, Kod1, Kod2, Kod14...

uzayıp gidiyor. Sanırım birkaç tabloda yapılması gereken işlem, tek bir tabloya abanılmış. Bu da beraberinde bir sürü sorun getiriyor (SQL Cümlesi yazmak dışında da sorunlar getirecektir.) Örneğin milyon tane index koymakzorunda olacaksınız, aynı tabloya benzer fieldlardan kurulu bir sürü index eklemeniz gerekecek vs. vs.

Sorgu cümlelerinizde her bir SELECT * için serverdan tonlarca KB bilgi akıp Client'lara gönderilecek Network Trafiği abaracak, SP'ler vs. Herhangi bir şekilde bu tabloyla ilişkiye geçtiğinde 150 alan için çalışma yapmak zorunda kalacak.

RDBMS'lerde bu tür yapılar işi hantallaştırır, bunun yerine daha küçük yapılara bölünmek ve aralarında ilişkiler kurmak daha iyi sonuçlar verir.

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/

Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

fahrettin yazdı: Fakat tabi bu kod hiç bir zaman işi görmeyecek.... Zira en başta primary keyler prob lem çıkaracak. Muhakkak değişen alanlar olacak ve mecburen alan yazmak zorunda kalınacak....
Evet Fahrettin abi aynen dediğin gibi Row_ID alanlar var bunları almıyorum mecburen delphi tarafından düzenleyip parametre ile gönderiyorum.

Fahrettin abi senin söylediğine yakın bişey yapıyorum alanları otomatik aldırıp gereklş eklemeleri otomatik yapan bir delphi prg. yazdım öyle kısmen çözüyorum.
Kuri_YJ yazdı: Şimdi burada benim asıl sezinlediğim sorun Dosya Yapısının biraz garip kurulmuş olması. Orada bir sürü alan gördüm, Iskonto1, Iskonto2, Kredifaizoranı, Kod1, Kod2, Kod14...

uzayıp gidiyor. Sanırım birkaç tabloda yapılması gereken işlem, tek bir tabloya abanılmış.
Yardımlarınız için tşk ederim, demek oluyorki başka çözüm yok :) Hamallığa devam :)
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________

Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba,
Hakan Bey'in cevabını daha da kısaltanlar varmış. Her yiğidin yoğurt yiyişi farklıymış. :lol: :lol: :lol:
http://www.sqlteam.com/forums/topic.asp ... amic,query linkinde arama yaparken tesadüfen buldum bu kodu bir gün lazım olur diye buraya ekleyeyim dursun dedim.

Kod: Tümünü seç

 DECLARE @s VARCHAR(8000)
SELECT @s=''

SELECT @s=@s + Column_name + ','
from INFORMATION_SCHEMA.Columns
where table_name = 'MyTbl' and Column_name not like '[1-5]%'

set @s = left(@s, Datalength(@s)-1)
set @s = 'Select ' + @s + ' from MyTbl'
execute ( @s)


Kolay gelsin.
http://www.aysbergbilgisayar.com
Logo Go özel eğitim, web tasarım, teknik servis

Cevapla