Dışarıdan Değişken İsmini Değiştirmek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Dışarıdan Değişken İsmini Değiştirmek

Mesaj gönderen pro_imaj »

Merhaba,

Sabit olarak yazmış olduğum programı biraz daha esnek olması için şöle bir değişiklik yapmaya çalışıyorum ama olmuyor.

Kod: Tümünü seç

Query6MalKodu.Text  :=('152.'+Query1Kod.Text+'.'+copy (Query3Kod.Text,2,3)+'.'+Query2Kod.Text+'.'+Query4Kod.Text);
Yukarıdaki kod'da Query1Kod.Text, Query2Kod.Text, Query3Kod.Text, Query4Kod.Text bu alanlar sabit.

Ama ben kullanıcının bunun yerini değiştirmesini istiyorum yani.

Kod: Tümünü seç

Query6MalKodu.Text  :=('152.'+TanimlarForm.Tanim1Edit.Text+'.'+copy (TanimlarForm.Tanim3Edit.Text,2,3)+'.'+TanimlarForm.Tanim2Edit.Text+'.'+TanimlarForm.Tanim4Edit.Text);
olarak yani böyle yaptığımda editlerin içerisine query isimlerini ben kullanıcıya yazdırtmak istiyorum daha doğrusu sıralamayı değiştirmek kullanıcının elinde olsun diye.

ama yukarıdaki gibi yazarsam Editlerin içerisine
örn
Edit1 içerisine query1kod.text
Edit2 içerisine query2kod.text
Edit3 içerisine query3kod.text
Edit4 içerisine query4kod.text
yazdığımda bu değerleri string görüyor ve istediğim olmuyor acaba nasıl yapabilirim saygılarımla
tşk ederim
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]
_________________
yazicih
Üye
Mesajlar: 92
Kayıt: 11 Şub 2005 02:10
Konum: Antalya

Mesaj gönderen yazicih »

Anladığım kadarıyla if ya da case ile sorununu çözebilirsin
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
if ile çözmek imaknsız gibi şöyleki;


Kod: Tümünü seç

1-2-3-4
1-2-4-3
1-3-2-4
1-3-4-2
..........
Böyle uzuyor.

ya bunun olması gerek değilmi yani dışarıdan koda değişken atayamıyormuyuz sadece stringmi atayabiliyoruz.

Mesela aynı sorun Sql kodu yazarken olmuyor çünkü string bir değer zaten .
ama oluyordur diye düşünüyorum.
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ı
miskin
Üye
Mesajlar: 103
Kayıt: 26 Tem 2005 02:02
Konum: Gavuristan

Mesaj gönderen miskin »

Yanlis hatirlamiyorsam: yaklasik ayni sorunu outlook, telefon siralamasinda kullandigi yöntemle iyi bir yöntem sunmus.
Kullanici Fax, Telefon, Kisisel, cep telofonunu istedigi siraya göre dizebiliyor.
Bircok kullanici sistemini kullaniyorsa, degisiklikleri Nesnelerin yerlerini registry'ye kaydedilebilir veya icerik önemli ise ayni tabloda bir field daha acilip siralama orda nesnelerin sirasi kayd edilebilinir.
Onshow tetiklemesinde Editlerin yerleri sorulur ve yerlestirilir.

Editlerin FeldIsimleri bir yazilamayan comboBox'a konur, secilen Itemler Fieldsiralamaya kayd edilebilir.

Aciklamalarimdan bende memnun degilim. beni sorularla yönlendirebilirsen biraz daha iyi aciklayabilirim.
miskin
Ve Tanri, bütün kullarini davul edecek :)
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 @miskin kardeş.
açıklamaların için öncelikle tşk ederim.

söylediğine yakın fakat aynı şeyler diil.
ben editten Nasıl Query1kod.text yazarsam yukarıdaki yazdığım koda bunu Query1kod.text bakmasını sağlarım
ama program bunu Query1kod.text bakmıyorda Query1kod.text yazı olarak yani metin olarak algılıyor. ben bunu yapmak istiyorum.

Not: bu prog otomatik stok kodu açmak için kullanıyorum. önce query1 den bilgi alıyoru döngü içinde sonra 2 ve 3.querlerde ama kullanıcı bunu sırasını kendi belirlesin istiyorum yapmak istediğim bu yani.
teşekkür ederim herkeze
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ı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

yani ufak çaplı bi derleyici yazmaya çalışıyon.
.net ve javada bu tip şeyler yapmak için reflection sınıfı var ama delphi win32 de böyle birşey var mı araştırmak lazım.
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
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 @sadettinpolat hocam.

yazdığım prog seninde belittiğin gibi yazdığım progmı kullanacak şirkette günde yüzlerce stok kodu açılıyormuş bu prog olmadan önce bir kişi sırf bunun işlemi yapıyormuş. şimdi çok güzel bir mantıkla tek tıkla işi hallediyoruz. ama ufak tefek eksiklikleri giderince bişey benzicek :D
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ı
miskin
Üye
Mesajlar: 103
Kayıt: 26 Tem 2005 02:02
Konum: Gavuristan

Mesaj gönderen miskin »

Query1kod.text ne oluyorki? bu query1.sql.text mi?
pro_imaj yazdı:Merhaba @miskin kardeş.
açıklamaların için öncelikle tşk ederim.

söylediğine yakın fakat aynı şeyler diil.
ben editten Nasıl Query1kod.text yazarsam yukarıdaki yazdığım koda bunu Query1kod.text bakmasını sağlarım
ama program bunu Query1kod.text bakmıyorda Query1kod.text yazı olarak yani metin olarak algılıyor. ben bunu yapmak istiyorum.

Not: bu prog otomatik stok kodu açmak için kullanıyorum. önce query1 den bilgi alıyoru döngü içinde sonra 2 ve 3.querlerde ama kullanıcı bunu sırasını kendi belirlesin istiyorum yapmak istediğim bu yani.
teşekkür ederim herkeze
miskin
Ve Tanri, bütün kullarini davul edecek :)
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 @miskin
Query1kod.text ; bu şu oluyor Query1kod.text içinde ne yazıyorsa onu alıcam.

vtdeki kod alanındaki veriye ulaşıyorum. daha doğrusu bunu dışarıdan nasıl yaparım.
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ı
miskin
Üye
Mesajlar: 103
Kayıt: 26 Tem 2005 02:02
Konum: Gavuristan

Mesaj gönderen miskin »

query1kod hangi nesne(TLabel, TEdit, TQuery)?
vtdeki kod alanındaki veriye ulaşıyorum? bu ne oluyor? Veritabani programi mi yaziyorsun? yoksa Veritabani.sql e mi ulasiyorsun?

tahminlerime göre ilk verdigim örnekle bunu cözebilirsin. dört combobox'un Iteminlerine dört querynkod.text yazar kullanici secimini yaptiktan sonra düzenlersin.

combobox1.Items.Add(Querykod1.Text);
combobox1.Items.Add(Querykod2.Text);
combobox1.Items.Add(Querykod3.Text);
combobox1.Items.Add(Querykod4.Text);
combobox2.Items.Assign(combobox1.Items);
combobox3.Items.Assign(combobox1.Items);
combobox4.Items.Assign(combobox1.Items);

Query6MalKodu.Text :=('152.'+combobox1.Items[combobox1.ItemIndex]+'.'+copy (combobox2.Items[combobox2.ItemIndex],2,3)+'.'+combobox3.Items[combobox3.ItemIndex]+'.'+combobox4.Items[combobox4.ItemIndex]);

Ama querykod dan müsteri anlamaz onun ilgilendigi malin sadece özelligidir ise

ResourceString
OZELLIK1 = 'Fabrika Adi';
OZELLIK2 = 'Rengi';
OZELLIK3 = 'Yeri',
....

Tanim := Tstrings.Create;
..

Tanim.Add(Querykod1.Text);
Tanim.Add(Querykod2.Text);
Tanim.Add(Querykod3.Text);
Tanim.Add(Querykod4.Text);
......


combobox1.Items.Add(Ozellik1);
combobox1.Items.Add(Ozellik2);
combobox1.Items.Add(Ozellik3);
combobox1.Items.Add(Ozellik4);


combobox2.Items.Assign(combobox1.Items);
combobox3.Items.Assign(combobox1.Items);
combobox4.Items.Assign(combobox1.Items);

.......

Query6MalKodu.Text :=('152.'+Tanim[combobox1.ItemIndex]+'.'+copy (Tanim[combobox2.ItemIndex],2,3)+'.'+Tanim[combobox3.ItemIndex]+'.'+Tanim[combobox4.ItemIndex]);
miskin
Ve Tanri, bütün kullarini davul edecek :)
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,
aslında söyledikleriniz aynı şeyler ama olmuyor veya ben tam olarak anlatamadım. Özür dilerim :oops:

Kod: Tümünü seç

procedure TAnaForm.SpeedButton4Click(Sender: TObject);
begin
begin
query1.First;
while not Query1.Eof do
begin  {query1 begini}
 query2.First;

 while not Query2.Eof do
 begin   {query2 begini}
   query3.First;

   while not query3.Eof do
   begin    {query3 begini}
     query4.First;

     while not query4.Eof do
     begin     {query4 begini}

       Query6.Insert;
       Query6.Edit;
       Query6MalKodu.Text  :=('152.'+Query1Kod.Text+'.'+copy (Query3Kod.Text,2,3)+'.'+Query2Kod.Text+'.'+Query4Kod.Text);
       Query6MalAdi.Text:=(copy(Query1Aciklama.Text,1,19)+' '+copy(Query2Aciklama.Text,1,7)+' '+copy(Query3Aciklama.Text,1,7)+' '+copy(Query4Aciklama.Text,1,7));
       Query6Kod1.Text:=Query1Kod.Text;
       Query6Kod2.Text:=Query2Kod.Text;
       Query6Kod3.Text:=Query3Kod.Text;
       Query6Kod4.Text:=Query4Kod.Text;
       Query6.Post;
      // Query6.Refresh;
      // listbox1.Items.add('152-'+Query1Kod.Text+'-'+Query2Kod.Text+'-'+copy (Query3Kod.Text,2,3)+'-'+Query4Kod.Text);
      // listbox2.Items.add(copy(Query1Aciklama.Text,1,10)+' '+copy(Query2Aciklama.Text,1,10)+' '+copy(Query3Aciklama.Text,1,10)+' '+copy(Query4Aciklama.Text,1,10));
       query4.Next;


     end; {query4 endi}

     query3.Next;
   end;   {query3 endi}

   query2.Next;
 end;   {query2 endi}

 query1.Next;
end; {query1 endi}
Query6.Close;
Query6.Open;
SpeedButton4.Enabled:=False;
SpeedButton2.Enabled:=True;
showmessage  ('Toplam '+ IntToStr  (Query6.RecordCount)+' Kayıt Oluşturulmuştur.');
end;
end;
Ben programda 4 tane query var bunlarda tanımlanan kodlarla malkodu üretiyorum.şöyle bişey yapmak istiyorum ama anlatamıyorum



yukarıdaki kodun değiştireceğim kısmı aşağıda
kodun şu kısmı

Query6MalKodu.Text :=('152.'+Query1Kod.Text+'.'+copy (Query3Kod.Text,2,3)+'.'+Query2Kod.Text+'.'+Query4Kod.Text);


ben burada bilgileri querylerden belirlediğim şekilde alıyorum (kırmızı alanlar) ama benim amacım bu querylerin sırasını kullanıcının istediği şekilde dizyn edebilmesi yani buda şu anlama geliyor.

Ben Query1MalKodu.Text demek yerine bir edetin içerisinden burayı yazmak istiyorum.
ama böyle yapıncada bu değeri text görüyor ve olmuyor.

Umarım anlaşılmıştır valla sabahtan beri uğraşıyorum kafayı sıyırıcam. Oruç olunca kafam durdumu ne yaptı :)
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ı
miskin
Üye
Mesajlar: 103
Kayıt: 26 Tem 2005 02:02
Konum: Gavuristan

Mesaj gönderen miskin »

yine anlamadim.
Query lerini yaptiklari islere göre isimlendirmis olsaydin anlatmasi daha basit olacakti.
Query6Kod1 lerinin de dbEdit nesnesi oldugunu belirtseydin.

birde sunu dene

Kod: Tümünü seç

procedure TAnaForm.SpeedButton4Click(Sender: TObject); 
var
  MalAdi, MalAciklamasi : stirng;
begin 
   query1.First; 
   query2.First; 
   query3.First; 
   query4.First; 

   MalAdi :=  '152.'+Query1Kod.Text+'.';
   MalAdi :=  MalAdi + copy(Query3Kod.Text,2,3);
   MalAdi :=  MalAdi + '.'+Query2Kod.Text+'.'+Query4Kod.Text); 
  
   MalAciklamasi := copy(Query1Aciklama.Text,1,19)+' ';
   MalAciklamasi  := MalAciklamasi  +copy(Query2Aciklama.Text,1,7) + ' ';
   MalAciklamasi := MalAciklamasi  +copy(Query3Aciklama.Text,1,7)+ ' ';
   MalAciklamasi  := MalAciklamasi  +' '+copy(Query4Aciklama.Text,1,7); 
   showmessage  (MalAdi + ': ' + Malaciklamasi ); 
end;
birde bunu dene hata ararken isin kolaylasir.
miskin
Ve Tanri, bütün kullarini davul edecek :)
Kullanıcı avatarı
okurtdiken
Üye
Mesajlar: 21
Kayıt: 11 May 2004 01:02
Konum: ankara
İletişim:

Mesaj gönderen okurtdiken »

s.a.

ilk yazdığınız koda göre cevap;

4 adet edit nesnesini yerleştirin (siz bunu zaten yapmışsınız)

eğer mümkünse editler yerine combobox kullanın.

daha sonra bir function yazın;

Kod: Tümünü seç

function KodGetir(Kod: String):String;
begin
        Result:='';
        if kod>'' then begin
           if kod='Query1Kod.Text' then Result:=Query1Kod.Text;
           if kod='Query2Kod.Text' then Result:=Query2Kod.Text;
           if kod='Query3Kod.Text' then Result:=copy(Query3Kod.Text,2,3);
           if kod='Query4Kod.Text' then Result:=Query4Kod.Text;
       end;
end;

Kullanırken:

Kod: Tümünü seç

    Query6MalKodu.Text:=('152.'+
                        KodGetir(TanimlarForm.Tanim1Edit.Text)+'.'+
                        KodGetir(TanimlarForm.Tanim2Edit.Text)+'.'+
                        KodGetir(TanimlarForm.Tanim3Edit.Text)+'.'+
                        KodGetir(TanimlarForm.Tanim4Edit.Text));
bu şekilde çözüm olması lazım.

kolay gelsin.
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 üstadlar,
Öncelikler cevaplarınız için çok tşk ederim.

@okurtdiken hocam ben zaten belirtiğiniz şekilde yapıyorum ama sorun şöyle ki, bana bu değeri txt olarak döndürüyor yani. istediğim olmuyor.

2 gündür uğraşıyorum olmayınca bende istemeyerekte olsa bu işten vazgeçtim. değerin txt dönmemesi gerekiyor yani sanki kod yazarken query1kod.text yazdığımda program bunu query1 bağlı olan kod alanındaki değeri döndürüyor ya ben bunu yapmaya çalışıyorum ama bu değeri normal yazı olarak getirince yani query1kod.text diye o zaman olmuyor.
Herkeze tşk ederim bu sorunu çözünce yazıcam buraya ama bu kadar zor olmaması gerek ya bir yerde sorun var galiba.
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ı
miskin
Üye
Mesajlar: 103
Kayıt: 26 Tem 2005 02:02
Konum: Gavuristan

Mesaj gönderen miskin »

birde bu sorularima cevap ver. Query2Kod.Text te yazan string'i Foruma yazarmisin. Bana öyle geliyorki kullaniciya field'lerin siralamasini sectirmek istiyorsun. Kullanici Field'lerin siralamasini sectikten sonra, sen Fieldlerden gelen verileri almiyorsun, fieldlerin isimleri ile yeni kodunu olusturuyorsun. Yaninda programlamasini bilmiyen biri dahi varsa onunla konus. Büyük bir olasilikla anlatirken yaptigin hatayi anlayacaksin.
miskin
Ve Tanri, bütün kullarini davul edecek :)
Cevapla