Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Int64 spinnt oder ich. HILFE!!!! (https://www.delphipraxis.net/216144-int64-spinnt-oder-ich-hilfe.html)

Papaschlumpf73 6. Nov 2024 09:33

AW: Int64 spinnt oder ich. HILFE!!!!
 
Zitat:

Zitat von Sinspin (Beitrag 1542904)
Ich habe nur Delphi 11 hier. Habe mich ein bisschen durch die Sourcen gegraben. Sieht so aus als wenn es 3 Methoden gibt mit denen intern umgewandelt wird. Interessant wäre es zu sehen was wirklich im fall des Fehlers genommen wird.
Aber, das ist eigentlich ein Fall für Emba, denn egal wie, es sollte immer der gleiche Wert rauskommen.

Meine Anwendung wird auch noch mit 11.3 kompiliert. Da kommt derselbe Unsinn raus, wie bei 12.1.

Bernhard Geyer 6. Nov 2024 10:49

AW: Int64 spinnt oder ich. HILFE!!!!
 
Was passiert wenn man AsLargeInt nutzt?

https://docwiki.embarcadero.com/Libr...eld.AsLargeInt
https://docwiki.embarcadero.com/Libr...ta.DB.Largeint

Bernhard Geyer 6. Nov 2024 10:51

AW: Int64 spinnt oder ich. HILFE!!!!
 
Delphi-Quellcode:
function TLargeintField.GetValue(var Value: Largeint): Boolean;
begin
  Result := GetData(FIOBuffer);
  if Result then
    Value := TDBBitConverter.UnsafeInto<Int64>(FIOBuffer);
end;

Papaschlumpf73 6. Nov 2024 11:24

AW: Int64 spinnt oder ich. HILFE!!!!
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1542907)

AsLargeInt funktioniert nur mit TFields. Unsere Fields sind aber irgendeine Vorstufe davon - OLEVariant-Irgendwas. Daher haben wir auch keinen richtigen Fieldtype sondern nur Fields[0].Type_ = adBigInt - also ADO Data Types. Insbesondere in Threads lässt es sich so viel einfacher programmieren, wenn man nicht immer erst neue TFields erstellen muss.

Papaschlumpf73 6. Nov 2024 12:17

AW: Int64 spinnt oder ich. HILFE!!!!
 
Fehler ist jetzt gemeldet: https://embt.atlassian.net/servicede...tal/1/RSS-2285

Bernhard Geyer 6. Nov 2024 16:20

AW: Int64 spinnt oder ich. HILFE!!!!
 
Wenn du nun irgendweche Vorstufen nutzt, dann glaube ich nicht das Emba das hierfür auch "nachimplementiert".

Kannst du nicht einen Helper implementieren, der diese AsLargInt (oder AsInt64) bereit stellt?

himitsu 6. Nov 2024 17:01

AW: Int64 spinnt oder ich. HILFE!!!!
 
$914800050C81C3F9
$914800050C81C400

Die Art der Änderung sieht auch komisch aus.
Was man sonst so für Probleme kennt, scheint es hier nicht zu sein (gedrehtes Bit, abgeschnittene Bytes, ...)


Passiert es hier auch?
Delphi-Quellcode:
var A, B: Int64; C: String; V: Variant;
begin
  A := -7978126718202166279;
  V := DM.ADOCon.Execute('SELECT CAST(-7978126718202166279 as bigint)').Fields[0].Value;
  B := Int64(V);
  C := VarToStr(V);
  Memo1.Lines.Append('A: ' + A.ToString);
  Memo1.Lines.Append('B: ' + B.ToString);
  Memo1.Lines.Append('C: ' + C);
end;

Olli73 6. Nov 2024 17:26

AW: Int64 spinnt oder ich. HILFE!!!!
 
Und mit "VarAsType(..., varInt64);" anstatt "Int64(...);" ?

Papaschlumpf73 7. Nov 2024 07:28

AW: Int64 spinnt oder ich. HILFE!!!!
 
Zitat:

Zitat von himitsu (Beitrag 1542926)
$914800050C81C3F9
$914800050C81C400

Die Art der Änderung sieht auch komisch aus.
Was man sonst so für Probleme kennt, scheint es hier nicht zu sein (gedrehtes Bit, abgeschnittene Bytes, ...)


Passiert es hier auch?
Delphi-Quellcode:
var A, B: Int64; C: String; V: Variant;
begin
  A := -7978126718202166279;
  V := DM.ADOCon.Execute('SELECT CAST(-7978126718202166279 as bigint)').Fields[0].Value;
  B := Int64(V);
  C := VarToStr(V);
  Memo1.Lines.Append('A: ' + A.ToString);
  Memo1.Lines.Append('B: ' + B.ToString);
  Memo1.Lines.Append('C: ' + C);
end;

Ergebnis:
A: -7978126718202166279
B: -7978126718202166272
C: -7978126718202166279

Papaschlumpf73 7. Nov 2024 07:33

AW: Int64 spinnt oder ich. HILFE!!!!
 
Zitat:

Zitat von Olli73 (Beitrag 1542929)
Und mit "VarAsType(..., varInt64);" anstatt "Int64(...);" ?

Funktioniert leider auch nicht. Ich habe das Beispiel mal erweitert:
Delphi-Quellcode:
var A, B, D, E: Int64; C: String; V: Variant;
begin
  A := -7978126718202166279;
  V := ADOCon.Execute('SELECT CAST(-7978126718202166279 as bigint)').Fields[0].Value;
  B := Int64(V);
  C := VarToStr(V);
  D := V;
  E := VarAsType(V, varInt64);
  Memo1.Lines.Append('A: ' + A.ToString);
  Memo1.Lines.Append('B: ' + B.ToString);
  Memo1.Lines.Append('C: ' + C);
  Memo1.Lines.Append('D: ' + D.ToString);
  Memo1.Lines.Append('E: ' + E.ToString);
end;
A: -7978126718202166279
B: -7978126718202166272
C: -7978126718202166279
D: -7978126718202166272
E: -7978126718202166272


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:08 Uhr.
Seite 2 von 4     12 34      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz