Seçilen Veriye Göre Kod Atama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
mavitunam
Üye
Mesajlar: 13
Kayıt: 25 Kas 2005 02:12

Seçilen Veriye Göre Kod Atama

Mesaj gönderen mavitunam »

Merhaba Arkadaşlar

Formumda bir db combobox ve içerisinde birden fazla değer var.

Yeni bir kayıt eklerken DBComboBox içerisinde bir değer seçildiğinde DbEdit1'e otomatik bir değer vermesini istiyorum. Veritabanı olarak MSSQL ve AdoTable kullanıyorum.

Örnek DbComBox ta Müdür Değeri seçildiyse DbEdit1'e M1 yazsın. Ancak her bir sonraki kayıtta DbEdit'taki değer M2 .. M3... M4 olsun.

Öncelikle bu mantık doğru mudur? Kod yazımında yardımda bulunur musunuz?

İyi çalışmalar.
[Her Canlı Bir Gün Ölümü Tadacaktır]
qamyoncu
Üye
Mesajlar: 266
Kayıt: 12 Tem 2008 04:30

Re: Seçilen Veriye Göre Kod Atama

Mesaj gönderen qamyoncu »

Öncelikle dbedit1 tablonuzun hangi fieldine bağlı?
Yapacaklarımızı sıralayalım:
-eğer dbcomboboxumuzun ilk itemi seçili ise(Müdür)
global olarak tanımlanmış string değişkene 'M' değerini ata. (a değişkeni olsun)
yine global olarak tanımlanmış integer tipi değişkene 1 değerini ata.(i değişkeni olsun)
Daha sonra her yeni kayıt eklendiğinde; 'i' değerini bir arttır ve dbedit1'in bağlı olduğu fieldin değerini a+inttostr(i) değerine eşitle.
-eğer dbcomboboxumuzun ikinci itemi seçili ise
...

gibi..


Kodlara dökmek size kalmış, kolay gelsin :)
Batuhan TAŞDÖVEN
'Yükseldikçe küçülen bir uçurtma..'
mavitunam
Üye
Mesajlar: 13
Kayıt: 25 Kas 2005 02:12

Re: Seçilen Veriye Göre Kod Atama

Mesaj gönderen mavitunam »

Saçma olacak yazdıklarım ama öğrenmek adına kodu bu konu başlığında oluşturmak istiyorum.
Dbedit tablo üzerinde Kod alanına bağlı.

Önerinize göre oluşturacak olursam

Kod: Tümünü seç

var
  a;char;
  i:integer;
begin
  if dbcombobox1.ItemIndex= 0 then a:='M';
  i:=1 ;
  for:=i++;
buraya kadar sanırım bir sorun yok. Ama ben yukardaki kodu nereye yazacağım ? Kaydet butonunun içerisine mi ?

Daha sonra her yeni kayıt eklendiğinde olayını nasıl anlayacağım AdoTable'ın After insert kısmına mı kodu devam edeceğim. Döngüyü nasıl kuracağım.

Bu düğüm oluyor işte. Yardım lütfen.
[Her Canlı Bir Gün Ölümü Tadacaktır]
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Seçilen Veriye Göre Kod Atama

Mesaj gönderen conari »

Tam anlamadım ama @HusoNet'in son numarayı bulma diye bir makalesi vardı onu kullanarak belki birşeyler yapabilirsiniz.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Seçilen Veriye Göre Kod Atama

Mesaj gönderen aslangeri »

s.a.
bu işlem için kayıt etmeden önce tablodaki enson 'M' ile başlayan değeri bulup onun bir fazlasını vermeniz lazım.
veyahutta en son verdiğiniz değeri bir yerde (veritabanı, ini dosyası, register) tutmanız lazım olunca bir arttırıp tekrar kaydetmeniz lazım.
bu tarz numara arttırımları forumda var. onları incelerseniz bi fikir edinebilirsiniz.
kodları nereye yazacağınız programınızın yapısına ve size kalmış bir durum. Nerede olması lazım sizce?
kaydet densonra , before post olayında veya veritabanında, vb...

kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
qamyoncu
Üye
Mesajlar: 266
Kayıt: 12 Tem 2008 04:30

Re: Seçilen Veriye Göre Kod Atama

Mesaj gönderen qamyoncu »

Global değişkenler unit penceresi içinde, type tanımlamalarının altında implementation tanımlamasının üstündeki var bloğu altına yazılır.

Kod: Tümünü seç

...
var
  Form1: TForm1;
  a : char;
  i  : integer = 1;  //Eğer sizin yaptığınız gibi kod bloğunun içinde 1 değerini verirsek, o kod tekrar döndüğünde yine 1 değerini alacaktır, arttırmamızın anlamı kalmaz.

implementation
...
Ne zaman bu kodun işlev görmesini istiyoruz: Örneğin yeni girilen kayıt bilgilerini sisteme eklemek için bir butonumuz olsun. Adı Button1.

Kod: Tümünü seç

...

procedure TForm1.Button1Click(Sender: TObject);
begin
if dbcombobox1.ItemIndex= 0 then
   begin
       a:='M';
       i=i+1;
       dbedit1.text=a+inttostr(i);          //Gerekli olan table1.post table1.edit falan gibi kodları yazmadım lütfen gerektiği yerlere ekleyiniz.
   end;
end;

...
Her şey fazlasıyla basit aslında. Tek önemli nokta doğru yolu izlemek, doğru tahmin ve mantıklar yürütmek. Delphi mantığıyla ilgili bence biraz sorununuz olabilir. Lütfen yanlış anlamayın ancak "nereye yazacam" diye sormanız temelde bir eksiklik olduğunu gösterir. Veritabanıyla ilgili e-book hatta gerçek kitap edinmenizde fayda var.. :) Kolay gelsin..
Batuhan TAŞDÖVEN
'Yükseldikçe küçülen bir uçurtma..'
mavitunam
Üye
Mesajlar: 13
Kayıt: 25 Kas 2005 02:12

Re: Seçilen Veriye Göre Kod Atama

Mesaj gönderen mavitunam »

2. cevabımda da yazdığım gibi "öğrenmek adına..."

Haklısınız temelde eksiklikler olabilir. Ezbere işde yapmak istemiyorum kod talep ederek. Onun için çalışıyorum. Delphi kitabım var, indexten aradığım konuya bakmak yerine kitabın başından okuma kararı aldım öğrenmek adına.

İlk yanıtınızdan sonra biraz aklım karışmıştı. Son yanıtınızdaki kod içeriğinde ne demek istediğinizi anlamış oldum.

Ayrıca Mantık yürütme konusunda fikir sahibi olduğumu düşünüyorum. Bu fikirleri koda nasıl dökeceğimi bilmiyorum. Çoğu zaman tanımın sonuna . koyarak ne özelliklerini kullanabileceğimi görüyor deneme yanılma yöntemiyle bulmaya çalışıyorum. Bu beni zora soktuğu içinde kitabın başından konuları öğrenmeye başladım :)

Teşekkür eder, iyi çalışmalar dilerim.
[Her Canlı Bir Gün Ölümü Tadacaktır]
mavitunam
Üye
Mesajlar: 13
Kayıt: 25 Kas 2005 02:12

Re: Seçilen Veriye Göre Kod Atama

Mesaj gönderen mavitunam »

conari yazdı:Tam anlamadım ama @HusoNet'in son numarayı bulma diye bir makalesi vardı onu kullanarak belki birşeyler yapabilirsiniz.
Merhaba,

Aşadağıdaki şekilde kodu oluşturdum fakat program kapandığında son numara hafızada tutulmuyor. Yukardaki arkadaşın makalesini bulmaya çalıştım ama bulamadım.

Bu kod ile program çalıştığında

[URL=http://www.yukle.tc][img]http://im ... .JPG[/img][/url] gibi oluyor.

Ancak istediğim

1. Kaydım için Genel Müdür kodu: G1 olsun
2. Kaydım İçin Müdür Kodu: M1 Olsun (3.kaydım olduğu için M3 Olmuş)

Yardımcı olur musunuz?

Teşekkürler.

Kod: Tümünü seç

procedure TForm2.BitBtn2Click(Sender: TObject);
begin
table1.Edit;
table1.FieldByName('kayitzamani').AsDateTime:=Now;
  begin
  IF dbCOMBOBOX1.ItemIndex = 0  THEN
  begin
    a:='Y';
    i:=i+1;
    dbedit1.Text := a + inttostr(i);
          end
      else
        if dbcombobox1.ItemIndex = 1 then
      begin
      a:= 'G';
      i:=i+1;
      dbedit1.text := a + inttostr(i);
      end
          else
       if dbcombobox1.ItemIndex = 2 then
      begin
      a:= 'M';
      i:=i+1;
      dbedit1.text := a + inttostr(i);
      end
          else
       if dbcombobox1.ItemIndex = 3 then
      begin
      a:= 'Ş';
      i:=i+1;
      dbedit1.text := a + inttostr(i);
      end
          else
       if dbcombobox1.ItemIndex = 4 then
      begin
      a:= 'V';
      i:=i+1;
      dbedit1.text := a + inttostr(i);
      end
          else
       if dbcombobox1.ItemIndex = 5 then
      begin
      a:= 'U';
      i:=i+1;
      dbedit1.text := a + inttostr(i);
      end
          else
       if dbcombobox1.ItemIndex = 6 then
      begin
      a:= 'P';
      i:=i+1;
      dbedit1.text := a + inttostr(i);
       end
   else
if table1.FieldCount=0 then showmessage ('Tüm Alanları Doldurunuz');

table1.post;
end;
end;
[Her Canlı Bir Gün Ölümü Tadacaktır]
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Seçilen Veriye Göre Kod Atama

Mesaj gönderen conari »

Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
mavitunam
Üye
Mesajlar: 13
Kayıt: 25 Kas 2005 02:12

Re: Seçilen Veriye Göre Kod Atama

Mesaj gönderen mavitunam »

Arkadaşlar Merhaba,

Bu projede daha doğrusu bu ödevimde paradox veritabanı kullanıyorum.

kullanıcı oluşturma bölümündeyim. Kullanıcı koduna veritabanında * özelliği verdim.

Program ilk çalıştığında düzgünce kod veriyor. Daha önce seviyesi şef olupta oluşturulmuş Ş1 koduna sahip bir kullanıcı varsa programı yeniden başlattığımda yeni kullanıcı deyip seviyesini şef seçtiğimde kaydet dediğimde Ş1 kodunu vermeye çalışıyor. Ondan dolayı da "Key violation" hatası alıyorum. Kaydetme gerçekleşmiyor.

Kullanıcı oluşturma ekranına girdiğimde son girilen kodları hafızasında tutup yeni oluşturacağım kayıtları bu hafızaya göre veren işi nasıl yaptırabilirim?

Daha yeniyim bu işte, ister fikir verin ister yol gösterin ama lütfen yardım edin.

Herkese iyi akşamlar.
[Her Canlı Bir Gün Ölümü Tadacaktır]
Cevapla