AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Stringfield in Datenbank; EIN Byte ÄNDERN
Thema durchsuchen
Ansicht
Themen-Optionen

Stringfield in Datenbank; EIN Byte ÄNDERN

Ein Thema von Kurt56 · begonnen am 26. Sep 2007 · letzter Beitrag vom 27. Sep 2007
 
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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:35 Uhr.
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