Einzelnen Beitrag anzeigen

Benutzerbild von Kurt56
Kurt56

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

Stringfield in Datenbank; EIN Byte ÄNDERN

  Alt 26. Sep 2007, 11:57
Datenbank: Perversive (BTrieve) • Version: 8 • Zugriff über: ODBC
Ich habe eine Fremdanwendung, auf die ich zugreifen muß.
Es ist eine Datenbank (BTrieve), die ich auch bearbeiten kann.
Soweit so gut. Aber der Kollege von einst hat ein Datenbankfeld definiert

Character, 4 Byte lang

in das er aber eine 4-Byte-Integerzahl BINÄR "hart" überschreibt.
Dort steht dann 00 00 00 00 für Null, oder 30 75 00 00 für 30000

WENN ich nun

Delphi-Quellcode:
var x : array[1..4] of byte;
      i, j : Integer;

i:= adstableAnzahl.Value div 16777216; x[4]:=ord(i);
j:= adstableAnzahl.Value mod 16777216;
i:=j div 65536; x[3]:=ord(i);
i:=j mod 65536;
j:=i div 256; x[2]:=ord(j);
j:=i mod 256; x[1]:=ord(j);
table1Anzahl.Value:=char(x[1])+char(x[2])+char(x[3])+char(x[4]);
programmiere, dann wird die Zahl 30000 in X[1]=30h; X[2]=75h; X[3]=00h und X[4]=00h umgewandelt,
aber, weil das Datenbankfeld ein 4-Byte Charakterfeld ist, werden nur das erste und zweite Byte übertragen, die 0-Byte werden (als Stringende) nicht mit "angesehen" und im Tabellenfeld steht dann:

03 75 20 20, also mit BLANK aufgefüllt.
--------------------------------------
Wie kann ich auf die einzelnen BYTES des 4-Byte Stringfeldes zugreifen? (Zeiger vielleicht)

Denn

Delphi-Quellcode:
table1Anzahl.Value[1]:=char(x[1]); table1Anzahl.Value[2]:=char(x[2]);
table1Anzahl.Value[1]:=char(x[3]); table1Anzahl.Value[2]:=char(x[4]);
geht natürlich nicht.


Ich habe auch schon
for i:= 1 to 4 do X[i] := x[i] xor 255;
table1Anzahl.Value:=char(x[1])+char(x[2])+char(x[3])+char(x[4]); gemacht.
Damit schreibt er natürlich 00h als FFh und alle 4 Byte werden gefüllt.

ABER
table1Anzahl.Value[4] := table1Anzahl.Value[4] xor #255; geht auch nicht.
Mit IF kann man ein Byte ABFRAGEN (if table1Anzahl.Value[4] = #0 then ....)
aber nicht schreiben.

Kann mir jemand einen Tip geben, wie ich die Byte im String, in der Tabelle, beschreiben kann?
Kurt
  Mit Zitat antworten Zitat