WebService TRemotable verilerini VirtualTable ye aktarmak nasıl yapılır

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
ismailkocacan
Üye
Mesajlar: 76
Kayıt: 25 Eyl 2011 05:11
Konum: İstanbul
İletişim:

Re: WebService TRemotable verilerini VirtualTable ye aktarmak nasıl yapılır

Mesaj gönderen ismailkocacan » 17 Oca 2018 08:56

mbayrak yazdı:
17 Oca 2018 07:18
ismailkocacan yazdı:
16 Oca 2018 04:11
mbayrak yazdı:
16 Oca 2018 01:25

Zaman ayırdığınız için teşekkür ederim. Ben delphi 2010 kullanıyorum ve şu satırda
Adsız.png
[DCC Error] uhitapgonkisi.pas(444): E2010 Incompatible types: 'TVarRec' and 'TValue' hatasını alıyorum. Nette araştırdım ama herhangi bir convert fonksiyonu bulamadım. Bir bilginiz varsa yardımınızı bekliyorum.
Eklediğiniz görüntü çok küçük ya da ben de öyle görünüyor.
Hata mesajı TVarRec ve TValue veri tiplerinin uyumsuzluğu anlatıyor.
Berlin sürümü ile hazırladım.
Resimi satır arası göster dediğim için küçük almış sanırım. Tekrar yolluyorum. Delphi 2010 da bu tiplerin birbirine benzetilmesi ile ilgili bir çözüm bulabilir miyiz acaba.
Resim
GetValue TValue Tipinde veri döndürür.Sonundaki AsVarRec'ti neden kaldırdınız ?

mbayrak
Üye
Mesajlar: 21
Kayıt: 22 Ara 2011 12:41

Re: WebService TRemotable verilerini VirtualTable ye aktarmak nasıl yapılır

Mesaj gönderen mbayrak » 17 Oca 2018 10:49

ismailkocacan yazdı:
17 Oca 2018 08:56
mbayrak yazdı:
17 Oca 2018 07:18
ismailkocacan yazdı:
16 Oca 2018 04:11

Eklediğiniz görüntü çok küçük ya da ben de öyle görünüyor.
Hata mesajı TVarRec ve TValue veri tiplerinin uyumsuzluğu anlatıyor.
Berlin sürümü ile hazırladım.
Resimi satır arası göster dediğim için küçük almış sanırım. Tekrar yolluyorum. Delphi 2010 da bu tiplerin birbirine benzetilmesi ile ilgili bir çözüm bulabilir miyiz acaba.
Resim
GetValue TValue Tipinde veri döndürür.Sonundaki AsVarRec'ti neden kaldırdınız ?
Çünkü Delphi 2010 da AsVarRec tipi tanımlı değil. Öyle bir tip yok malesef. Eski bir projeyle uğraştığım için de Delphi sürümünü yükseltemiyorum

Kullanıcı avatarı
ismailkocacan
Üye
Mesajlar: 76
Kayıt: 25 Eyl 2011 05:11
Konum: İstanbul
İletişim:

Re: WebService TRemotable verilerini VirtualTable ye aktarmak nasıl yapılır

Mesaj gönderen ismailkocacan » 17 Oca 2018 12:49

mbayrak yazdı:
17 Oca 2018 10:49
ismailkocacan yazdı:
17 Oca 2018 08:56
mbayrak yazdı:
17 Oca 2018 07:18


Resimi satır arası göster dediğim için küçük almış sanırım. Tekrar yolluyorum. Delphi 2010 da bu tiplerin birbirine benzetilmesi ile ilgili bir çözüm bulabilir miyiz acaba.
Resim
GetValue TValue Tipinde veri döndürür.Sonundaki AsVarRec'ti neden kaldırdınız ?
Çünkü Delphi 2010 da AsVarRec tipi tanımlı değil. Öyle bir tip yok malesef. Eski bir projeyle uğraştığım için de Delphi sürümünü yükseltemiyorum
Sadece bir AsVarRec fonksiyonu için Delphi sürümü yükseltmek gerek yok tabi ki.
TVarRec tipi çok eski sürümlerden bu yana olması lazım.
Tanımlı değilse, üst Delphi versionlarında TValue yapısının AsVarRec fonksiyonu nasıl yapılmış diye bakabilirsiniz.
TValue tipindeki değeri TVarRec tipinde veriye dönüştüren bir fonksiyon yazabilirsiniz.Ki bunun için hiçbir çaba sarf etmenize gerek yok.
Tek yapmanız gereken; Üst versionlardan TValue.AsVarRec fonksiyonun içine bakmak.

mbayrak
Üye
Mesajlar: 21
Kayıt: 22 Ara 2011 12:41

Re: WebService TRemotable verilerini VirtualTable ye aktarmak nasıl yapılır

Mesaj gönderen mbayrak » 17 Oca 2018 02:05

Teşekkür ederim zaman ayırdığınız için. Dediklerinizi yapmaya çalıştım ama bu sefer de başka başka tiplerde aynı sıkıntı çıkınca artık amelelik yaparak hallediyorum :)

Kullanıcı avatarı
ismailkocacan
Üye
Mesajlar: 76
Kayıt: 25 Eyl 2011 05:11
Konum: İstanbul
İletişim:

Re: WebService TRemotable verilerini VirtualTable ye aktarmak nasıl yapılır

Mesaj gönderen ismailkocacan » 17 Oca 2018 02:35

mbayrak yazdı:
17 Oca 2018 02:05
Teşekkür ederim zaman ayırdığınız için. Dediklerinizi yapmaya çalıştım ama bu sefer de başka başka tiplerde aynı sıkıntı çıkınca artık amelelik yaparak hallediyorum :)
Sıkıntı nedir ?
Dediklerimden ne kadarını, nasıl yaptınız bunları paylaşsaydınız belki bir fikrimiz varsa paylaşırdırk.

mbayrak
Üye
Mesajlar: 21
Kayıt: 22 Ara 2011 12:41

Re: WebService TRemotable verilerini VirtualTable ye aktarmak nasıl yapılır

Mesaj gönderen mbayrak » 17 Oca 2018 03:22

ismailkocacan yazdı:
17 Oca 2018 02:35
mbayrak yazdı:
17 Oca 2018 02:05
Teşekkür ederim zaman ayırdığınız için. Dediklerinizi yapmaya çalıştım ama bu sefer de başka başka tiplerde aynı sıkıntı çıkınca artık amelelik yaparak hallediyorum :)
Sıkıntı nedir ?
Dediklerimden ne kadarını, nasıl yaptınız bunları paylaşsaydınız belki bir fikrimiz varsa paylaşırdırk.
Hocam dediklerinizin tamamını yaptım. Tek sıkıntım TVarRec ile TValue tiplerinin uyuşmazlığı, yani bu iki tipi birbirine benzetebilsek kod çalışacak. Delphi 2010 da AsVarRec fonksiyonu yok. Ben de Üst sürüm delphilerden bu fonksiyonu buldum Rtti içine gömeyim dedim ama rtti yi recompile yapamadığım için bundan vazgeçtim. Kendi unitimin içine alıp orada deneyim dedim bu sefer de AsVarRec fonksiyonun içindeki bazı yapılar delphi 2010 a uymadığı için compile edemedim

Kullanıcı avatarı
ismailkocacan
Üye
Mesajlar: 76
Kayıt: 25 Eyl 2011 05:11
Konum: İstanbul
İletişim:

Re: WebService TRemotable verilerini VirtualTable ye aktarmak nasıl yapılır

Mesaj gönderen ismailkocacan » 17 Oca 2018 03:29

mbayrak yazdı:
17 Oca 2018 03:22
ismailkocacan yazdı:
17 Oca 2018 02:35
mbayrak yazdı:
17 Oca 2018 02:05
Teşekkür ederim zaman ayırdığınız için. Dediklerinizi yapmaya çalıştım ama bu sefer de başka başka tiplerde aynı sıkıntı çıkınca artık amelelik yaparak hallediyorum :)
Sıkıntı nedir ?
Dediklerimden ne kadarını, nasıl yaptınız bunları paylaşsaydınız belki bir fikrimiz varsa paylaşırdırk.
Hocam dediklerinizin tamamını yaptım. Tek sıkıntım TVarRec ile TValue tiplerinin uyuşmazlığı, yani bu iki tipi birbirine benzetebilsek kod çalışacak. Delphi 2010 da AsVarRec fonksiyonu yok. Ben de Üst sürüm delphilerden bu fonksiyonu buldum Rtti içine gömeyim dedim ama rtti yi recompile yapamadığım için bundan vazgeçtim. Kendi unitimin içine alıp orada deneyim dedim bu sefer de AsVarRec fonksiyonun içindeki bazı yapılar delphi 2010 a uymadığı için compile edemedim
Üst versionlardan bulduğunuz AsVarRec fonksiyonunu, standart Rtti uniti içerisine yazmak doğru değil.
AsVarRec fonksiyonun içinde Delphi 2010'a uymayan kısımlar nedir ?

Aşağıdaki fonksiyonu derlemeyi deneyebilirsiniz.

Kod: Tümünü seç

uses 
Rtti,System.SysConst;

function AsVarRec(const AValue:TValue):TVarRec;
const
  TypeKindToVType: array[TTypeKind] of Byte = (
    $FF,         // tkUnknown,
    vtInteger,   // tkInteger,
    vtInteger,   // tkChar,
    vtInteger,   // tkEnumeration,
    vtExtended,  // tkFloat,
    vtUnicodeString, // tkString,
    vtInteger,   // tkSet,
    vtObject,    // tkClass,
    $FF,         // tkMethod,
    vtInteger,   // tkWChar,
    vtUnicodeString, // tkLString,
    vtUnicodeString, // tkWString,
    vtVariant,   // tkVariant,
    $FF,         // tkArray,
    $FF,         // tkRecord,
    vtInterface, // tkInterface,
    vtInt64,     // tkInt64,
    $FF,         // tkDynArray,
    vtUnicodeString, // tkUString,
    vtClass,     // tkClassRef,
    vtPointer,   // tkPointer,
    vtPointer   // tkProcedure
    );
begin
  FillChar(Result, SizeOf(Result), 0);
  Result.VType := TypeKindToVType[AValue.Kind];
  case AValue.Kind of
    TTypeKind.tkInteger: Result.VInteger := AValue.AsInteger;
{$IF Declared(AnsiChar)}
    TTypeKind.tkChar: Result.VChar := AnsiChar(AValue.AsInteger);
{$ENDIF}
    TTypeKind.tkWChar: Result.VWideChar := WideChar(AValue.AsInteger);
    TTypeKind.tkFloat: Result.VExtended := AValue.GetReferenceToRawData;
    TTypeKind.tkString,
    TTypeKind.tkWString,
    TTypeKind.tkLString,
    TTypeKind.tkUString: Result.VUnicodeString := Pointer(AValue.AsString);
    TTypeKind.tkClass: Result.VObject := Pointer(AValue.AsObject);
    TTypeKind.tkInt64: Result.VInt64 := AValue.GetReferenceToRawData;
    TTypeKind.tkClassRef: Result.VClass := AValue.AsClass;
    TTypeKind.tkVariant: Result.VVariant := AValue.GetReferenceToRawData;
    TTypeKind.tkInterface: Result.VInterface := Pointer(AValue.AsInterface);
    TTypeKind.tkProcedure,
    TTypeKind.tkPointer: Result.VPointer := AValue.AsType<Pointer>;
  else
    raise EInvalidCast.CreateRes(@SInvalidCast);
  end;
end;

mbayrak
Üye
Mesajlar: 21
Kayıt: 22 Ara 2011 12:41

Re: WebService TRemotable verilerini VirtualTable ye aktarmak nasıl yapılır

Mesaj gönderen mbayrak » 18 Oca 2018 07:47

ismailkocacan yazdı:
17 Oca 2018 03:29
mbayrak yazdı:
17 Oca 2018 03:22
ismailkocacan yazdı:
17 Oca 2018 02:35

Sıkıntı nedir ?
Dediklerimden ne kadarını, nasıl yaptınız bunları paylaşsaydınız belki bir fikrimiz varsa paylaşırdırk.
Hocam dediklerinizin tamamını yaptım. Tek sıkıntım TVarRec ile TValue tiplerinin uyuşmazlığı, yani bu iki tipi birbirine benzetebilsek kod çalışacak. Delphi 2010 da AsVarRec fonksiyonu yok. Ben de Üst sürüm delphilerden bu fonksiyonu buldum Rtti içine gömeyim dedim ama rtti yi recompile yapamadığım için bundan vazgeçtim. Kendi unitimin içine alıp orada deneyim dedim bu sefer de AsVarRec fonksiyonun içindeki bazı yapılar delphi 2010 a uymadığı için compile edemedim
Üst versionlardan bulduğunuz AsVarRec fonksiyonunu, standart Rtti uniti içerisine yazmak doğru değil.
AsVarRec fonksiyonun içinde Delphi 2010'a uymayan kısımlar nedir ?

Aşağıdaki fonksiyonu derlemeyi deneyebilirsiniz.

Kod: Tümünü seç

uses 
Rtti,System.SysConst;

function AsVarRec(const AValue:TValue):TVarRec;
const
  TypeKindToVType: array[TTypeKind] of Byte = (
    $FF,         // tkUnknown,
    vtInteger,   // tkInteger,
    vtInteger,   // tkChar,
    vtInteger,   // tkEnumeration,
    vtExtended,  // tkFloat,
    vtUnicodeString, // tkString,
    vtInteger,   // tkSet,
    vtObject,    // tkClass,
    $FF,         // tkMethod,
    vtInteger,   // tkWChar,
    vtUnicodeString, // tkLString,
    vtUnicodeString, // tkWString,
    vtVariant,   // tkVariant,
    $FF,         // tkArray,
    $FF,         // tkRecord,
    vtInterface, // tkInterface,
    vtInt64,     // tkInt64,
    $FF,         // tkDynArray,
    vtUnicodeString, // tkUString,
    vtClass,     // tkClassRef,
    vtPointer,   // tkPointer,
    vtPointer   // tkProcedure
    );
begin
  FillChar(Result, SizeOf(Result), 0);
  Result.VType := TypeKindToVType[AValue.Kind];
  case AValue.Kind of
    TTypeKind.tkInteger: Result.VInteger := AValue.AsInteger;
{$IF Declared(AnsiChar)}
    TTypeKind.tkChar: Result.VChar := AnsiChar(AValue.AsInteger);
{$ENDIF}
    TTypeKind.tkWChar: Result.VWideChar := WideChar(AValue.AsInteger);
    TTypeKind.tkFloat: Result.VExtended := AValue.GetReferenceToRawData;
    TTypeKind.tkString,
    TTypeKind.tkWString,
    TTypeKind.tkLString,
    TTypeKind.tkUString: Result.VUnicodeString := Pointer(AValue.AsString);
    TTypeKind.tkClass: Result.VObject := Pointer(AValue.AsObject);
    TTypeKind.tkInt64: Result.VInt64 := AValue.GetReferenceToRawData;
    TTypeKind.tkClassRef: Result.VClass := AValue.AsClass;
    TTypeKind.tkVariant: Result.VVariant := AValue.GetReferenceToRawData;
    TTypeKind.tkInterface: Result.VInterface := Pointer(AValue.AsInterface);
    TTypeKind.tkProcedure,
    TTypeKind.tkPointer: Result.VPointer := AValue.AsType<Pointer>;
  else
    raise EInvalidCast.CreateRes(@SInvalidCast);
  end;
end;
Hocam ilginize çok teşekkür ederim Ben Tokyo sürümünden almıştım ve derleyememiştim. Sizin gönderdiğinizi derledim. Şimdi çalışıyor.

Kullanıcı avatarı
ismailkocacan
Üye
Mesajlar: 76
Kayıt: 25 Eyl 2011 05:11
Konum: İstanbul
İletişim:

Re: WebService TRemotable verilerini VirtualTable ye aktarmak nasıl yapılır

Mesaj gönderen ismailkocacan » 18 Oca 2018 08:51

mbayrak yazdı:
18 Oca 2018 07:47
ismailkocacan yazdı:
17 Oca 2018 03:29
mbayrak yazdı:
17 Oca 2018 03:22


Hocam dediklerinizin tamamını yaptım. Tek sıkıntım TVarRec ile TValue tiplerinin uyuşmazlığı, yani bu iki tipi birbirine benzetebilsek kod çalışacak. Delphi 2010 da AsVarRec fonksiyonu yok. Ben de Üst sürüm delphilerden bu fonksiyonu buldum Rtti içine gömeyim dedim ama rtti yi recompile yapamadığım için bundan vazgeçtim. Kendi unitimin içine alıp orada deneyim dedim bu sefer de AsVarRec fonksiyonun içindeki bazı yapılar delphi 2010 a uymadığı için compile edemedim
Üst versionlardan bulduğunuz AsVarRec fonksiyonunu, standart Rtti uniti içerisine yazmak doğru değil.
AsVarRec fonksiyonun içinde Delphi 2010'a uymayan kısımlar nedir ?

Aşağıdaki fonksiyonu derlemeyi deneyebilirsiniz.

Kod: Tümünü seç

uses 
Rtti,System.SysConst;

function AsVarRec(const AValue:TValue):TVarRec;
const
  TypeKindToVType: array[TTypeKind] of Byte = (
    $FF,         // tkUnknown,
    vtInteger,   // tkInteger,
    vtInteger,   // tkChar,
    vtInteger,   // tkEnumeration,
    vtExtended,  // tkFloat,
    vtUnicodeString, // tkString,
    vtInteger,   // tkSet,
    vtObject,    // tkClass,
    $FF,         // tkMethod,
    vtInteger,   // tkWChar,
    vtUnicodeString, // tkLString,
    vtUnicodeString, // tkWString,
    vtVariant,   // tkVariant,
    $FF,         // tkArray,
    $FF,         // tkRecord,
    vtInterface, // tkInterface,
    vtInt64,     // tkInt64,
    $FF,         // tkDynArray,
    vtUnicodeString, // tkUString,
    vtClass,     // tkClassRef,
    vtPointer,   // tkPointer,
    vtPointer   // tkProcedure
    );
begin
  FillChar(Result, SizeOf(Result), 0);
  Result.VType := TypeKindToVType[AValue.Kind];
  case AValue.Kind of
    TTypeKind.tkInteger: Result.VInteger := AValue.AsInteger;
{$IF Declared(AnsiChar)}
    TTypeKind.tkChar: Result.VChar := AnsiChar(AValue.AsInteger);
{$ENDIF}
    TTypeKind.tkWChar: Result.VWideChar := WideChar(AValue.AsInteger);
    TTypeKind.tkFloat: Result.VExtended := AValue.GetReferenceToRawData;
    TTypeKind.tkString,
    TTypeKind.tkWString,
    TTypeKind.tkLString,
    TTypeKind.tkUString: Result.VUnicodeString := Pointer(AValue.AsString);
    TTypeKind.tkClass: Result.VObject := Pointer(AValue.AsObject);
    TTypeKind.tkInt64: Result.VInt64 := AValue.GetReferenceToRawData;
    TTypeKind.tkClassRef: Result.VClass := AValue.AsClass;
    TTypeKind.tkVariant: Result.VVariant := AValue.GetReferenceToRawData;
    TTypeKind.tkInterface: Result.VInterface := Pointer(AValue.AsInterface);
    TTypeKind.tkProcedure,
    TTypeKind.tkPointer: Result.VPointer := AValue.AsType<Pointer>;
  else
    raise EInvalidCast.CreateRes(@SInvalidCast);
  end;
end;
Hocam ilginize çok teşekkür ederim Ben Tokyo sürümünden almıştım ve derleyememiştim. Sizin gönderdiğinizi derledim. Şimdi çalışıyor.
Ben de Seatle'dan almıştım. Ne yaptığıma dair pek soru sormadınız. Yazdığım kod %100 çalışan bir kod olmayabilir.

Cevapla