Einzelnen Beitrag anzeigen

Benutzerbild von Kurt56
Kurt56

Registriert seit: 6. Apr 2005
Ort: Wedemark
47 Beiträge
 
Delphi XE8 Professional
 
#3

Re: Stringfield in Datenbank; EIN Byte ÄNDERN

  Alt 26. Sep 2007, 13:34
Zitat von shmia:
Deine Vorgehensweise gefällt mir gar nicht; zu umständlich.
Zunächst wird ein Varianter Record definiert:
Delphi-Quellcode:
type
   T32BitCharField = record
      case Integer of
         0:
          (LongValue:Longint);
         1:
          (bytes: array[0..3] of char);
   end;
Damit kann man zwischen den verschiedenen Darstellungen wechseln:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
   x : T32BitCharField;
   s : string;
begin
   s := adstableAnzahl.AsString; // Feld auslesen
   StrLCopy(x.bytes, Pchar(s), 4); // auf "x" kopieren

   // x wird verändert
   x.LongValue := x.LongValue + 100;

   SetString(s, x.bytes, 4);
   dstableAnzahl.AsString := s; // Feld zurückschreiben
end;
Leider wird daraus dann nicht 30 75 00 00, sondern 97 30 30 30 hex ( 'ù000' )

Delphi-Quellcode:
   s := adstableAnzahl.AsString; // Feld auslesen ______________ Datenbankfeld Integer 30000 => s: ergibt s:= '30000'
   StrLCopy(x.bytes, Pchar(s), 4); // auf "x" kopieren__________ x wird zu ==> '3' '0' '0' '0'

   // x wird verändert
   x.LongValue := x.LongValue + 100;_____________________________ aus '30000' wird ==> 808464535

   SetString(s, x.bytes, 4); ________umgewandelt in einen String 'ù0000'
   dstableAnzahl.AsString := s; // Feld zurückschreiben ________der dann in das Datenbankfeld geschreiben wird.
Kurt
  Mit Zitat antworten Zitat