Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Record ve Dinamik diziler hakkında yardım
#1
Merhaba, birkaç gündür üzerinde düşündüğüm ve bu gün ufak tefek te olsa sonunda yazmaya başladığım bir proje parçacığım var. Standart JSon veri döndüren bir sistemden gelen tablo bilgilerini ve içeriklerini memorytable kullanmadan record şeklinde tutmaya çalışıyorum. Aslında kodu yazdım zaten ama sormak istediğim bir şey var.
Record örneği aşağıdadır.
type
  TTabloRecs = array of record
    TId    : Integer;
    TValue : String;
 end;
 
type
 TTabloFields = array of record
    TId   : Integer;
    TName : String;
    TType : Smallint;
    TSize : Integer;
    TValues : TTabloRecs;
 end;
Şu an bu şekilde sorunsuz verileri alıp doldurabiliyorum. Öğrenmek istediğim şudur, Çalışma anında TTabloRecs kısmında TValue tipini TTabloFields deki TType kısmına göre Integer, String, Date, Double vs.vs. gibi değişik tiplerde oluşturabilirmiyim? Veya Variant olarak belirleyip tipine göre işlem yapmam daha mı uygun olur?
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
WWW
Cevapla
#2
Tam olarak istediğinizi karşılar mı bilmiyorum ama TTabloFields'ın TType'ının alacağı değerler sınırlı ise "Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız." şeklinde ifade edilen yapı işinizi görebilir:
TTabloRecInt = array of record
   TId    : Integer;
   TValue : Integer;
 end;

 TTabloRecString = array of record
   TId    : Integer;
   TValue : String
 end;

 TTabloRecDate = array of record
   TId    : Integer;
   TValue : TDate;
 end;

 TTabloFields = array of record
   TId   : Integer;
   TName : String;
   TSize : Integer;
   case TType: Smallint of
      0: (TIntValues: TTabloRecInt);
      1: (TStrValues: TTabloRecString);
      2: (TDateValues: TTabloRecDate);
 end;

Not: soruyu yanlış anlamış da olabilirim Sad
There's no place like 127.0.0.1
WWW
Cevapla
#3
Doğru anlamışsınız hocam, bunu bende düşünmüştüm ama yazmak mı zor geldi nedendir test etmemiştim sizde yazdığınıza göre bi uygulamaya çalışayım bakalım bu gece vakit olursa, umarım işe yarar. TType zaten Fieldtype olarak geliyor bilinen tipler yani.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
WWW
Cevapla
#4
Bende yanlış anlamadıysam C deki bağlı liste gibi verileri Ramde tutmak istiyorsunuz. Struct=record. Eğer öyleyse bildiğim kadarıyla pointer kaçınılmaz son
Cevapla
#5
Bu akşam biraz baktım, @SimaWB hocam, aklıma bişi geldi yazdığınızı o yüzden denemedim. Daha önce bu tip konular konuşulmuştu forumda, bende en güzeli öyle yapmak dedim ve aşağıdaki kod çıktı ortaya.Şimdilik bu haliyle işimi fazlası ile görecek gibi.

type
  TTabloRecs = array of record
    TId    : Integer;
    TValue : Variant;
 end;

Function VarToStr(const Value: Variant): string;
begin
      case VarType(Value) of
        varInteger  :  Result := IntToStr(Value) ;
        varString   :  Result := Value ;
        varCurrency :  Result := FormatFloat('#,##0.#0',Value) ;
        varDate     :  Result := datetostr(Value) ;
      end;
end;

Kısaca variant olarak alıp, istediğimiz formata çevirebiliriz.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
WWW
Cevapla
#6
(14-05-2018, Saat: 17:25)esistem Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Merhaba, birkaç gündür üzerinde düşündüğüm ve bu gün ufak tefek te olsa sonunda yazmaya başladığım bir proje parçacığım var. Standart JSon veri döndüren bir sistemden gelen tablo bilgilerini ve içeriklerini memorytable kullanmadan record şeklinde tutmaya çalışıyorum. Aslında kodu yazdım zaten ama sormak istediğim bir şey var.
Record örneği aşağıdadır.
type
  TTabloRecs = array of record
    TId    : Integer;
    TValue : String;
 end;
 
type
 TTabloFields = array of record
    TId   : Integer;
    TName : String;
    TType : Smallint;
    TSize : Integer;
    TValues : TTabloRecs;
 end;
Şu an bu şekilde sorunsuz verileri alıp doldurabiliyorum. Öğrenmek istediğim şudur, Çalışma anında TTabloRecs kısmında TValue tipini TTabloFields deki TType kısmına göre Integer, String, Date, Double vs.vs. gibi değişik tiplerde oluşturabilirmiyim? Veya Variant olarak belirleyip tipine göre işlem yapmam daha mı uygun olur?

Merhaba,
JSON olarak gelen veri Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız. tipinde olduğundan, kendisi bir nevi Dataset yapısındadır. 
JSON sunucudan gelen veriyi çözümleyip, dataset benzeri bir dizi yapıya refere etmeniz, TJSonArray'ı işlemenize göre hem hız kaybına sebebiyet verecek hemde kod satırlarınızın artmasına sebep olacaktır.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#7
Fesih hocam gelen veri boyutu çok büyük değil, ayrıca program tarafında kesinlikle db ile ilgili bişi kullanmıyorum, mecburen kendim çözüm üretmem gerekiyor. Record a atıp ordan stringgrid e aktarmak çok kolay oldu. Şimdilik bu yolda ilerliycem bakalım ne göstericek durum.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
WWW
Cevapla
#8
Bu gün işi biraz daha kolaylaştırdım.

type
  TTabloFields = array of record
    TId   : Integer;
    TName : String;
    TType : Smallint;
    TSize : Integer;
    TValues : TStringList;
 end;

Değerleri StringList olarak dolduruyorum, böylece, StringGrid1.Cols[x]:=Tablo[x].TValues; şeklinde kolonları direk doldurabiliyoruz.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
WWW
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Moduler Programlama Hakkinda TheEAK 4 140 18-09-2019, Saat: 10:43
Son Yorum: TheEAK
  IDE çoklu monitör kullanımı hakkında adelphiforumz 2 231 10-07-2019, Saat: 12:45
Son Yorum: adelphiforumz
  GarantiBBVA SFTP işlemleri hakkında adelphiforumz 4 359 09-07-2019, Saat: 10:43
Son Yorum: r3n4m3
  read ve write kullanımı hakkında alisahin 3 376 21-05-2019, Saat: 14:57
Son Yorum: alisahin
  [Çözüldü] - Google Cloud Platformunda OAuth 2.0 ile Dinamik Token Nasıl Alınır? Fesih ARSLAN 14 1.220 21-05-2019, Saat: 13:11
Son Yorum: Bay_Y



Konuyu Okuyanlar: 1 Ziyaretçi