Nasıl bir yol izlemeliyim?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
OnderTastan
Üye
Mesajlar: 38
Kayıt: 01 Tem 2007 05:09
Konum: İzmir

Nasıl bir yol izlemeliyim?

Mesaj gönderen OnderTastan »

10 adet alan adı var. Bu alanlardan 9 tanesine her seferinde bir tek bilgi kaydediliyor, 1 tanesine 5 ile 10 arasında bilgi kaydı yapılabiliyor.

Mesela;

Adı-Soyadı: Önder TAŞTAN (Sadece bir seferde bir isim kaydecek)
Görevi: Sigortacı (Sadece bir seferde bir görev kaydecek)
Tarih: (Sadece bir seferde bir tarih kaydecek)
.
.
.
Yapılan Poliçeler: Kasko, Trafik, Yangın ... (Bu alana girilen birden fazla kayıt diğerleriyle birlikte aynı anda liste halinde olacak)

Nasıl yapmalıyım?
"Kendini Affeder Gibi Başkalarını Affet, Başkalarını Azarlar Gibi Kendini Azarla..."
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7605
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Bunun için 2 yöntem var. Eğer bilgiler sabit ise yani sonradan ekleme olmayacaksa direk combobox'tan seçtirebilirsiniz. Mesela Cinsiyet alanlarında ben bir combobox içine Erkek ve Kadın yazıyorum, ve veritabanına da E ve K olarak tek karakter olarak kaydediyorum.

Eğer bilgiler değişken ise bunları ayrı bir tabloya saklayın ve lookup kullanın. Mesela POLICE_TIPLERI diye bir tablo yapın ve bu tabloya

K - Kasko
T - Trafik

gibi bilgileri kaydedin. Kullanıcı lookupcombo'dan Kasko seçerse alana "K" değerini kaydedersiniz.

Kolay gelsin.
Kullanıcı avatarı
OnderTastan
Üye
Mesajlar: 38
Kayıt: 01 Tem 2007 05:09
Konum: İzmir

Mesaj gönderen OnderTastan »

Önce ilginize tşk ederim. Sanırım tam anlatamadım. Combobax gibi bir nesne işimi görmez. Ben poliçeyi örnek olsun diye verdim. Tam olarak yapmak istediğim şu;

Bir belediyeye Taşıt Görev Emri diye bir program yapıyorum.

Sürücü Adı, Amir Adı, Personel Adı gibi alanlar var. Bu alanlar girilmesi zorunlu. Bunlarla birlikte bir de Gidilen Yer diye bir alan var. Yani bir çıkış görevinde 3 ayrı kişi olacak fakat bu çıkış görevinde aynı anda birden fazla yere gidilebiliyor. Ben bir seferde bu kayıtları yapmak istiyorum. Umarım anlaşılır olmuştur. Bunu nasıl yapabilirim.
"Kendini Affeder Gibi Başkalarını Affet, Başkalarını Azarlar Gibi Kendini Azarla..."
Glen
Üye
Mesajlar: 277
Kayıt: 12 Eki 2005 11:58

Mesaj gönderen Glen »

Merhaba, eger yanlis anlamadiysam, ki sizin orneginiz bana biraz yabanci, kendim bir ornek verererek eger sizinkinle ayniysa yardimci olmaya calisacagim, umarim ayni konudan bahsediyoruzdur.

1. Tablo kişinin bilgilerini tutar (ID, AD, SOYAD)
2. Tablo hobilerini tutar.. (ID, KisiID, HobiID) // HobiID kismini string bir alan ile degistirirseniz tabiki daha kolay olur ancak daha zorunu anlatmak istedim.

Her iki tabloya da aynı anda kayıt yapmak istiyorsunuz..

İzleyeceginiz yol, en azindan benim izledigim yol..

1. Tablodaki kisinin ID si, yeni kayit eklerken belirlenir.

Form acilir, 2. tablodan

Kod: Tümünü seç

" SELECT * FROM TABLO2 WHERE KISIID = " + ID
Seklinde cekilir. Kayitlar bos gelecektir cünkü zaten KisiID yeni eklendigi icin ona ait hobiler de olmamaktadir.. AdoQuery kullaniyorsaniz, BatchOptimistic moduna getirmelisiniz. Yani kayitlar bastan client tarafinda tutulur degistirilir silinir vs., en son onayladiginizda kayitlar kaydedilir..

Transaction baslatip,

1. Tabloya kayitlari post edin,
2. Tablodaki kayitlarin post edilmesi icin AdoQuery.UpdateBatch komutunu kullanin,

En son hersey hatasiz ise commit edin..

2. Tablo ile ilgili HobiID gerekmektedir, HobiID kismina, gridin icinde bir DbLookupCombobox eklerseniz bunu da cozeceksiniz. Ancak HobiID ye denk gelen Hobi ismini yine ayni formun icinde bulunan Hobi datasetine baglayarak cekeceksiniz.

NOT Tablo2nin BeforePost kismina mutlaka ve mutlaka,

Kod: Tümünü seç

Tablo2Query.Properties['Update Criteria'].value :=adCriteriaKey;

kodunu eklemelisiniz. bunu kullanabilmek icin de uses kismina AdoInt'i eklemeniz gerekmektedir.

Eger farkli konulari konusuyorsak, ne anlatiyor bu demis olabilirsiniz :) Herneyse, umarim ayni konuyu konusuyoruzdur, ve de anlattiklarim ise yarar..

Bu arada yeni kayit eklemeden once Kisinin ID sini belirlemistik, degistirmede bu kodu kaldiriyorsunzu cunku zaten kisinin id si belli oldugu icin ona bagli hobiler de gelecektir ;)

İyi çalışmalar, kolay gelsin.
Glen
Üye
Mesajlar: 277
Kayıt: 12 Eki 2005 11:58

Mesaj gönderen Glen »

Bu arada orneginizi tekrar gozden gecirdim..

1 alan 1 den fazla kayit iceriyorsa, o alani farkli bir tablo olarak tutup baglamaniz daha kolay olur..

Yani gidilen güzergâhlari dedigim sekilde farkli bir tabloda yapip formun icine bir DataGrid koyup onun üzerinden sınırsız olarak yaptırabilirsiniz.

Kolay gelsin.
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

Poliçelerin her birine numara verin.
1, 2, 3... (0 olmasın)

Tabloda Integer bir alan tanımlayın, Policeler diyeyim şimdilik.

Forma checkbox'lar koyun, caption'larına poliçe isimlerini verip, tag teğerlerine de numaralarını yazın.

Kaydedeceğiniz zaman

Kod: Tümünü seç

var
  i,
  Policeler: Integer;
begin
  Policeler := 0;

  for i := 0 to Pred(ComponentCount) do
    if (Components[i] is TCheckBox) then
      with TCheckBox(Components[i]) do
        if (Tag > 0) and (Checked) then
          Inc(Policeler, Trunc(Power(2, Tag)));

  dstTabloAdi.FieldByName('Policeler').AsInteger := Policeler;
end;
Kayıt okurken

Kod: Tümünü seç

var
  i,
  Policeler: Integer;
begin
  Policeler := dstTabloAdi.FieldByName('Policeler').AsInteger;

  for i := 0 to Pred(ComponentCount) do
    if (Components[i] is TCheckBox) then
      with TCheckBox(Components[i]) do
        if (Tag > 0) then
          Checked := (Trunc(Power(2, Tag)) and Policeler = Trunc(Power(2, Tag)));
end;
Kolay gelsin...
Cevapla