Record varsayılanı tanımlama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
lazymule
Üye
Mesajlar: 127
Kayıt: 16 Eki 2006 04:03
İletişim:

Record varsayılanı tanımlama

Mesaj gönderen lazymule »

Kod: Tümünü seç

type
  TBL_STOK_KART =  record
    ID: Int64;
    KODU: string[20];
    ADI: string[100];
end

var
  FOO: TBL_STOK_KART;
Merhabalar
Yukarıdaki gibi kaydım var.
foo tanımlandıktan sonra değişkenler garip karekterler alıyor.
Varsayılan değerleri nasıl yapa bilirim boş olsalar bile yeter ?

foo tanımlandıktan sonra yapılması işime yaramıyor
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Record varsayılanı tanımlama

Mesaj gönderen aslangeri »

s.a.
record yerine class kullanıp create olayında varsayılan değerlerini atabilirsin.
onun haricinde fillchar belki işine yarar ama class kullanmaya başlarsan daha rahat edersin derim.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
lazymule
Üye
Mesajlar: 127
Kayıt: 16 Eki 2006 04:03
İletişim:

Re: Record varsayılanı tanımlama

Mesaj gönderen lazymule »

@aslangeri
class kulanırsam değişkenleri kullanmadan önce oluşturmam gerekecek
var
aa:tbl_stok;
aa:= Tbl_Stok.create ... gibi

düşündüm lakin o kadar çok yerde kullanmışımki düzeltmem çok uzun zaman alacak

bir fonksiyonla tanımlanmış değişkenlerin içini boşaltmakla aynı iş yüküne geliyor
derleyici direktiflerine felan bakındım yok

KODU: string[20]; yerine KODU: string; olursa stringler boş geliyor lakin sayısalları nasıl çözecem onu anlamadım
bu şekilde çok kullanışlı olmuştu küçük bir uyglama yazdım kendisi bana bir kütüpane oluşturuyor nerede ne kadar büyüklük kullanmışım veritabanına girmeden görebiliyordum. kod yazarken bu kaç karekterdi gibi düşünler ortadan kalkıyordu;

sayısalları "0" stringleride "" yapabilmenin yöntemini arıyorum ;
Evrende Ulaşılamayacak Tepe Yoktur !!!!
Yeterki İnsan Ulaşmak İstesin !!!!
http://www.maxiteknik.com
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Re: Record varsayılanı tanımlama

Mesaj gönderen sadettinpolat »

http://delphi.about.com/od/adptips2006/ ... record.htm

2006 ve ustu delphi surumlerinde recordlar icin constructur tanimlayabiliyorsunuz.
varsayilan degerleri construstur da tanimlayip recordu kullanabilirsiniz.

butun degiskenlere teker teker deger atamak yerine delphi 2010 kullaniyorsaniz yine constructur metodunda generic bir metod yazip (genisletilmis rtti destegi ile) string alanlari '' , sayisal alanlari ise 0 yapabilirsiniz.
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Kullanıcı avatarı
lazymule
Üye
Mesajlar: 127
Kayıt: 16 Eki 2006 04:03
İletişim:

Re: Record varsayılanı tanımlama

Mesaj gönderen lazymule »

@sadettinpolat

Delphi 2007 kullanıyorum. 2010 a da unicode de sorun yaşadığım için şimdilik geçemedim.
Bahsettiğin örneği inceledim

turboRecord := TTurboRecord.Create(2006) ; -> buradaki nesneyi oluşturma işimi bozuyor
Yazmış olduğum yazılımda bütün liste ekranları aşağıdaki şekilde çalışıyor

Kod: Tümünü seç

var
  foo: TBL_STOK_KART;
begin
  TFrmStok_Liste.FormGoster(ftMdi, fmIzleme, foo);
formgösteri çağırıyorum sunucun doğru yada yanlış olmasına göre stok seçilip seçilmediğini belirliyorum
doğru ise seçilen kaydı "foo" da elde ediyorum. herşeyim normal lakin bir müşterimin isteği ortaya çıktı
mesela stok için düşünelim ben edit e "stk" yazayım listeye tıklayınca stk ile başlayanlar gelsin dedi fatura ile teklif bölümünde şimdilik istedğini yaparız diğerlerini boş vaktimizde çeviririz dedik olur dediler.

başaladık değişikliği yapmaya hani işi kısa yoldan çözmekya işimiz

Kod: Tümünü seç

var
  foo: TBL_STOK_KART;
begin
foo.stokkodu := edit1.text ; -> dedik 
  TFrmStok_Liste.FormGoster(ftMdi, fmIzleme, foo);

//

class function TFrmStok_Liste.FormGoster(FormType: TFormType; FormMod: TFormMod;
  var Stok_Kart: TBL_STOK_KART): Boolean;
...
...
...
if Stok_kart.kodu = '"" then 
mstablo.open
else
begin
mstablo.params[0].asstring := stok_kart.kodu; 
mstablo.open
end;
.....
buraya kadar da süper eğer kod belirtildi ise her formda küçücük bir değişiklik işi çözdü
teklif/faturada sorun yok çünkü edit en kötü ihtimalle boş geliyor o zaman da tüm liste açılıyor

lakin diğer bölümlerden form çağrılınca çuvalladık çünkü "foo.stokkodu" na bir değer atanmadı saolsun delphide boş yada null yapmadı kendine göre garip karekterler verdi (belki belirli bir sebep e göre veriyor) bu seferde sql amca kızıyor garip karekterleri görünce bu ne diyor tüm derdim bu
Belki baştaki liste ekranlarını çağrış yönetmim yanlış fakat böyle başladık birkere programda büyüdü müşterinin isteğide mantıklı geldi aklımıza öyle bir güzellik gelmemişti. olmaz ise nerelerde çağırdıysak paşa paşa birer fonksiyonla record ları temizliycez :(
unutmadan kodlamaları çok dikkate almayın sorunumu anlatmak için yazdım.
Evrende Ulaşılamayacak Tepe Yoktur !!!!
Yeterki İnsan Ulaşmak İstesin !!!!
http://www.maxiteknik.com
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Record varsayılanı tanımlama

Mesaj gönderen aslangeri »

s.a.
bu durumda class yapmanızı daha fazla önereceğim.
artık her yerde create etmenizede gerek kalmadı.
formgosterde geçtiğiniz parametre null ise formgosterin içerisinde bir kere create edersiniz. :wink:
ön değer kullanmak istediğiniz yerde manuel create edersiniz.
hatta ikinci bir constructor tanımlayarak edit in textini parametre olarak geçer tek satırda halledersiniz işinizi.
yani

Kod: Tümünü seç

foo.stokkodu := edit1.text
yerine

Kod: Tümünü seç

foo:=tfoo.create(edit1.text);
gibi.
yinede sen bilirsin.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
lazymule
Üye
Mesajlar: 127
Kayıt: 16 Eki 2006 04:03
İletişim:

Re: Record varsayılanı tanımlama

Mesaj gönderen lazymule »

@aslangeri

ilginizden dolayı teşekkürler gitti gene bir kaç gecem :) sağlık olsun ne diyelim.

bendemi öyledir bilmiyorum ama tam programlama işini baya öğrendim diyorum bir sorun çıkıyor.
dış ses diyor "öğrendiklerin, öğreneceklerinden AZ" sanırım bu söz bu meslekte unutulmamalı :)
Evrende Ulaşılamayacak Tepe Yoktur !!!!
Yeterki İnsan Ulaşmak İstesin !!!!
http://www.maxiteknik.com
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: Record varsayılanı tanımlama

Mesaj gönderen emin_as »

Formgoster i bu şekilde tanımla istersen.

Kod: Tümünü seç

class function TFrmStok_Liste.FormGoster(FormType: TFormType; FormMod: TFormMod;
  var Stok_Kart: TBL_STOK_KART; arama_yok: boolean=true): Boolean;
arama_yok true ise TBL_STOK_KART in içerigini önemseme, varsa filtrelemeyi yaparsın. Default olarak true verildiği için başka yerlerdeki çagrılar için bu parametreyi kullanmasalar da sorun çıkmaz. Arama yaptırmak istediğin yer de false olarak parametreyi geçersin.
Kullanıcı avatarı
lazymule
Üye
Mesajlar: 127
Kayıt: 16 Eki 2006 04:03
İletişim:

Re: Record varsayılanı tanımlama

Mesaj gönderen lazymule »

@emin_as
orada bir sorun yok gerigönüşü formun kapanma şekli seçimin ok yada cancel olması belirliyor fonksiynu devamı aşağıda ki gibi
kayıt değiştikçede kayıt bilgilerini SelectKart' a aktarıyor tek sorunum tanımladığım kaydın var sayılan değeri class yada fonskiyonsuz çözmek istedim lakin çözüm yok gibi görünüyor.

Kod: Tümünü seç

   
class function TFrmStok_Liste.FormGoster(FormType: TFormType; FormMod: TFormMod;
  var Stok_Kart: TBL_STOK_KART): Boolean;
begin
  Result := False;
  FrmStok_Liste := TFrmStok_Liste.Create(Application);
  with FrmStok_Liste do
  begin
    GelenKart := Stok_Kart;
    FormStart;
   case FormType of
      ftModal:
        begin
          if ShowModal = mrOk then
            Result := True
          else
            Result := False;
        end;
...
  Stok_Kart := FrmStok_Liste.SelectKart;

Evrende Ulaşılamayacak Tepe Yoktur !!!!
Yeterki İnsan Ulaşmak İstesin !!!!
http://www.maxiteknik.com
Cevapla