GetValue TValue Tipinde veri döndürür.Sonundaki AsVarRec'ti neden kaldırdınız ?mbayrak yazdı: ↑17 Oca 2018 08:18Resimi 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.ismailkocacan yazdı: ↑16 Oca 2018 05:11Eklediğiniz görüntü çok küçük ya da ben de öyle görünüyor.mbayrak yazdı: ↑16 Oca 2018 02: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.
Hata mesajı TVarRec ve TValue veri tiplerinin uyumsuzluğu anlatıyor.
Berlin sürümü ile hazırladım.
WebService TRemotable verilerini VirtualTable ye aktarmak nasıl yapılır
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Üye
- Mesajlar: 88
- Kayıt: 25 Eyl 2011 06:11
- Konum: İstanbul
- İletişim:
Re: WebService TRemotable verilerini VirtualTable ye aktarmak nasıl yapılır
Re: WebService TRemotable verilerini VirtualTable ye aktarmak nasıl yapılır
Çü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ükseltemiyorumismailkocacan yazdı: ↑17 Oca 2018 09:56GetValue TValue Tipinde veri döndürür.Sonundaki AsVarRec'ti neden kaldırdınız ?mbayrak yazdı: ↑17 Oca 2018 08:18Resimi 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.ismailkocacan yazdı: ↑16 Oca 2018 05: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.
-
- Üye
- Mesajlar: 88
- Kayıt: 25 Eyl 2011 06:11
- Konum: İstanbul
- İletişim:
Re: WebService TRemotable verilerini VirtualTable ye aktarmak nasıl yapılır
Sadece bir AsVarRec fonksiyonu için Delphi sürümü yükseltmek gerek yok tabi ki.mbayrak yazdı: ↑17 Oca 2018 11:49Çü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ükseltemiyorumismailkocacan yazdı: ↑17 Oca 2018 09:56GetValue TValue Tipinde veri döndürür.Sonundaki AsVarRec'ti neden kaldırdınız ?
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.
Re: WebService TRemotable verilerini VirtualTable ye aktarmak nasıl yapılır
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
-
- Üye
- Mesajlar: 88
- Kayıt: 25 Eyl 2011 06:11
- Konum: İstanbul
- İletişim:
Re: WebService TRemotable verilerini VirtualTable ye aktarmak nasıl yapılır
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.
Re: WebService TRemotable verilerini VirtualTable ye aktarmak nasıl yapılır
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 edemedimismailkocacan yazdı: ↑17 Oca 2018 03:35Sıkıntı nedir ?
Dediklerimden ne kadarını, nasıl yaptınız bunları paylaşsaydınız belki bir fikrimiz varsa paylaşırdırk.
-
- Üye
- Mesajlar: 88
- Kayıt: 25 Eyl 2011 06:11
- Konum: İstanbul
- İletişim:
Re: WebService TRemotable verilerini VirtualTable ye aktarmak nasıl yapılır
Üst versionlardan bulduğunuz AsVarRec fonksiyonunu, standart Rtti uniti içerisine yazmak doğru değil.mbayrak yazdı: ↑17 Oca 2018 04:22Hocam 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 edemedimismailkocacan yazdı: ↑17 Oca 2018 03:35Sıkıntı nedir ?
Dediklerimden ne kadarını, nasıl yaptınız bunları paylaşsaydınız belki bir fikrimiz varsa paylaşırdırk.
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;
Re: WebService TRemotable verilerini VirtualTable ye aktarmak nasıl yapılır
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.ismailkocacan yazdı: ↑17 Oca 2018 04:29Üst versionlardan bulduğunuz AsVarRec fonksiyonunu, standart Rtti uniti içerisine yazmak doğru değil.mbayrak yazdı: ↑17 Oca 2018 04:22Hocam 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 edemedimismailkocacan yazdı: ↑17 Oca 2018 03: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.
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;
-
- Üye
- Mesajlar: 88
- Kayıt: 25 Eyl 2011 06:11
- Konum: İstanbul
- İletişim:
Re: WebService TRemotable verilerini VirtualTable ye aktarmak nasıl yapılır
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.mbayrak yazdı: ↑18 Oca 2018 08:47Hocam 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.ismailkocacan yazdı: ↑17 Oca 2018 04:29Üst versionlardan bulduğunuz AsVarRec fonksiyonunu, standart Rtti uniti içerisine yazmak doğru değil.mbayrak yazdı: ↑17 Oca 2018 04: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
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;