Birden çok Alanın Değerini Birleştirmek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
kara_kule06
Üye
Mesajlar: 150
Kayıt: 18 Nis 2006 02:15
Konum: ankara/polatlı
İletişim:

Birden çok Alanın Değerini Birleştirmek

Mesaj gönderen kara_kule06 »

Herkese Kolay Gelsin.


Bir Adet içinde ILKODU, ILCEKODU, BOLGEKODU adlı üç alanım var. ve ben bir döngü içinde her seferinde tablodan var olan alan ile sıradaki alanı alacak. Yani i:=1 to 3 kadar uzunluktaki bir döngüde,
i:1-->ILKODU
i:2-->ILKODU, ILCEKODU
i:3-->ILKODU, ILCEKODU, BOLGEKODU

Bu şekilde sıraylan her seferinde bir alan seçecek ve o an kaç alan seçtiyse o alanların içeriğini birleşik olarak almam lazım.

Mesela ILKODU ve ILCEKODU alanlarının içeriğini şu şekilde alabilmem lazım

Kod: Tümünü seç

deger:=tablo1.FieldByName('ILKODU,ILCEKODU').AsAtring;
Tabi bu şekilde almaya çalışınca doğal olarak compiler hatası veriyor. ben bunu başka türlü nasıl yapabilirim. Cevaplarınız için şimdiden tşk.
İlim öğrenmek akıntıya karşı yüzmek gibidir. Ara verildiği zaman gerilenir...
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
şöyle birşey işinizi görmez mi?

Kod: Tümünü seç

deger:=tablo1.FieldByName('ILKODU').AsAtring+','+
tablo1.FieldByName('ILCEKODU').AsAtring;
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
kara_kule06
Üye
Mesajlar: 150
Kayıt: 18 Nis 2006 02:15
Konum: ankara/polatlı
İletişim:

Mesaj gönderen kara_kule06 »

Malesef hocam aslında sizin dediğiniz gibi oluyor fakat. bu döngü içinde ilk saymada degere sadece ILKODU aktarılacak 2. saymada ILCEKODU 3. saymada BOLGEKODU aktarılacak eğer döngü daha uzunsa bu şekilde gidecek. İşte bunu nasıl yapabilirim çözemedim.
İlim öğrenmek akıntıya karşı yüzmek gibidir. Ara verildiği zaman gerilenir...
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Mrb; bunu bir fonksiyon içinde halletmek mümkün alabilir.

Kod: Tümünü seç

function AlanlarinDegerleri(Alanlar:String;const Ayrac:Char=';'):String;
var i:Integer; Alan:String;
begin
  Result:='';
  while Alanlar<>'' do begin
    i:=Pos(Ayrac,Alanlar);
    if i=0 then begin
      Alan:=Alanlar;
      Alanlar:='';
    end else begin
      Alan:=Copy(Alanlar,1,i-1);
      Delete(Alanlar,1,i);
    end;
    Result:=Result+Ayrac+Tablo.FieldByName(Alan).AsString;
  end;
  if Result<>'' then Delete(Result,1,1);
end;
Örnek: Degerler:=AlanlarinDegerleri('Alan1;Alan2;Alan3',';'); şeklinde. Sonuçta ';' ayraçları içinde verilir. Eğer , ayracı kullanılmak isteniyorsa Degerler:=AlanlarinDegerleri('Alan1,Alan2,Alan3',','); şeklinde kullanılmalıdır. Kolay gele.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

@kara_kule06

- @aslangeri'nin metodunu CASE bloğunda kullanırsan olacaktır...


- Örnek :

Kod: Tümünü seç

Var
  Deger : String;
begin
  With Tablo1 do
    For Sayac := 1 to 3 do begin
      Case Sayac of
      1: Deger := FieldByName('ILKODU').AsString;
      2: Deger := FieldByName('ILKODU').AsString +', '+ FieldByName('ILCEKODU').AsString;
      3: Deger := FieldByName('ILKODU').AsString +', '+ FieldByName('ILCEKODU').AsString +', '+ FieldByName('BOLGEKODU').AsString;
      end; // Case

      ShowMessage(Deger);

  end; // For // With
end;
Resim
Resim ....Resim
mero
Üye
Mesajlar: 109
Kayıt: 04 Mar 2005 04:54

Mesaj gönderen mero »

Sadece tablodaki bir kaç alan ise @mrmarman'nin söylediği gibi halledebilirsin.
Fakat tablodaki tüm alanları sıralamak istersen:

Kod: Tümünü seç

procedure TStok.Button1Click(Sender: TObject);
var
 deger:string;
 i:integer;
begin

 for i:= 0 to IBQuery1.FieldCount-1 do
   begin
    deger:=deger+IBQuery1.FieldByName(IBQuery1.FieldDefList.Strings[i]).AsString+',';
    showmessage(deger);
   end;


end;
bunu kullanabilirsin.
Kullanıcı avatarı
kara_kule06
Üye
Mesajlar: 150
Kayıt: 18 Nis 2006 02:15
Konum: ankara/polatlı
İletişim:

Mesaj gönderen kara_kule06 »

Cevaplarınız için teşekkür ediyorum.

Kolay Gelsin...
İlim öğrenmek akıntıya karşı yüzmek gibidir. Ara verildiği zaman gerilenir...
Cevapla