AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Lesen/Schreiben von BINARY(16) über DataSet

Lesen/Schreiben von BINARY(16) über DataSet

Offene Frage von "tumo"
Ein Thema von tumo · begonnen am 25. Jun 2025 · letzter Beitrag vom 27. Jun 2025
Antwort Antwort
Edelfix

Registriert seit: 6. Feb 2015
Ort: Stadtoldendorf
251 Beiträge
 
Delphi 12 Athens
 
#1

AW: Lesen/Schreiben von BINARY(16) über DataSet

  Alt 26. Jun 2025, 08:43
Bin aktuell mit gleichem Problem beschäftigt.

Habe mich für Char(36) entschieden als Ersatz für ein GUID Feld Type in ADS.

Jetzt kommt aber folgendes:

Version 1: Mit Klammern {GUID} - Ist für Windows Registry, COM, einige Konfig-Dateien
Version 2: Ohne Klammern - Ist für "GUID APIs", JSON, allgemeine Programmierung

Also stelle ich auf Char(38) um damit beides funktioniert.
  Mit Zitat antworten Zitat
tumo

Registriert seit: 28. Apr 2014
49 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Lesen/Schreiben von BINARY(16) über DataSet

  Alt 26. Jun 2025, 09:34
Ist ja auch nicht falsch, es gibt ja aber auch (zumindest im FireDac TFDDataType) ein "dtByteString". Mein Problem ist ja nicht unbedingt, dass er es als String anbietet, sondern, dass er da Konvertierungen macht. Ein "BINARY" ist ja ein String von Bytes, da soll er wenn ich explizit Bytes zuweise auch nichts mehr dran rütteln.

Ein "BLOB(16)" würde auch gehen, korrekt. Blöd daran ist, dass es nicht eine Länge von 16 forciert und einen zusätzlichen Byte für die tatsächliche Länge verbraucht. MySQL sagt selber, dass sie für GUIDs einen BINARY(16) empfehlen https://dev.mysql.com/blog-archive/s...-mysql-tables/

Zitat:
oder du erstellst selber die TField (TBlobField) und richtest sie passend ein (BlobType=ftBlob)
(Dank dem neuen MixedMode muß man nun auch nicht mehr ALLE Felder selbst erstellen, sondern nur noch die Nötigen)
Kannst du mich da noch in die richtige Richtung schubsen? Wie mache ich das in FireDAC bzw. wie heißt das Konzept da?

Zitat:
oder du spielst am TypeMapping rum, wo du selbst ensprechend die DBTypen zum gewüünschten TField-Typ definierst
Das hatte ich mit den FireDac MapRules schon versucht, Problem hierbei ist, dass ich schon die "konvertierten" Datentypen bekomme und die Größe nicht mehr anpassen darf.
Also ich könnte eine Rule machen:
Delphi-Quellcode:
with MapRules.Add do
begin
  SourceDataType := dtWideString;
  SizeMin := 5; SizeMax := 5;
  TargetDataType := dtByteString;
end;
Und ich bekomme den gewünschten Typ "ftBytes" raus, aber die Size ist trotzdem nur 5. (Zudem finde ich das ein wenig "hacky". Was, wenn ich tatsächlich einen String von 5 Chars speichern will?)

Zitat:
Habe mich für Char(36) entschieden als Ersatz für ein GUID Feld Type in ADS.
Das war jetzt auch erstmal meine Lösung. Ich habe mich aber nicht den Microsoft-Göttern gebeugt und truncate eiskalt die Klammern. Hat den Hintergrund, dass mein DBMS auch UUIDs erstellen kann, das aber ohne die Klammern arbeitet.
  Mit Zitat antworten Zitat
tumo

Registriert seit: 28. Apr 2014
49 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Lesen/Schreiben von BINARY(16) über DataSet

  Alt 27. Jun 2025, 13:22
Zitat:
Ein weiteres Problem, was ich jetzt nicht mehr nachstellen kann ist, dass er beim definieren von "CharacterSet=utf8mb4" auch den PNG-Stream "konvertiert" hat. Da kam ganz schön viel chinesisch raus.
Dazu habe ich noch was ausgefunden: Definiert man eine Spalte als "BLOB NOT NULL", so interpretiert FireDAC diese als "ftWideMemo", also als Textdaten. Folglich versucht er fleißig alles in das richtige Charset zu konvertieren. Definiert man es jedoch als "BLOB", erkennt er es korrekt als "ftBlob" und lässt die Daten in ruhe. Gemeine Eigenheit
  Mit Zitat antworten Zitat
Antwort Antwort

 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 08:56 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