AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Devart, DevExpress und böse VARCHAR ?
Thema durchsuchen
Ansicht
Themen-Optionen

Devart, DevExpress und böse VARCHAR ?

Ein Thema von himitsu · begonnen am 4. Apr 2023 · letzter Beitrag vom 26. Apr 2023
 
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.340 Beiträge
 
Delphi 12 Athens
 
#1

Devart, DevExpress und böse VARCHAR ?

  Alt 4. Apr 2023, 09:42
Datenbank: PostgreSQL • Version: 9-15 • Zugriff über: PgDAC
Moin Moin,

kennt jemand das/ein Problem mit zu langen unbegrenzten VARCHARs?

bzw. eine Lösung dafür (Fehlerbehebung, bzw. Prüfung mit passender Fehlermeldung) ... wir sind schon paar mal in diese Falle getappst.
[add] Ja, Cast auf TEXT ist hier eine Lösung, bzw. rausfiltern zu der langen Daten, da deren Anzeige hier eh unnötig ist,
aber es wäre schon schön, wenn so ein Fehler garnicht auftreten würde, oder er sich zumindestens verständlicher äußert.



gegeben:
  • Postgres
  • PgDAC von Devart
  • QuantumGrid von DevExpress, bzw. dessen DataController
  • und VARCHAR ohne Längenangabe (mit Inhalt von z.B. bis oder auch mal mehr als 15000 Chars)
    es geht vor allem um Rückgaben von eigenen und fremden DBFunktionen.

    Heute mal JSON-Strings in Form von Differenzdaten von geänderten Datensätzen, aber egal ... einfach alles was VARCHAR ist oder was PgDAC nicht kennt und dann als VARCHAR ansieht.

Vermutung:
Postgress kann zwar mit nahezu unbegrenzt langen VARCHARs hantieren,
aber die API raus zu und auch PgDAC bzw. TDataSet/TStringField's nutzen oft statische Buffers mit dynamischen Maximallängen.

Postgres/API etwas mehr (32kb oder 64kb ... stand, glaub ich, mal irgendwo was in der Doku)
DevArt mit 16kb (TField.DataSize), bzw. halb so viele UnicodeChars (TField.Size).

Postgres oder PgDAC gibt für VARCHARS ohne Länge eine generische Maximallänge raus, aber drinnen kann dann doch mehr sein.

Und dann kommt es vermutlich zu einem Bufferoverrun und sehr eigenartig/wechselnden Fehlern.
Entweder schreibt was einen längeren String ohne Prüfung in/über den Buffer
oder etwas versucht die Originallänge aus einem abgeschnittenen Buffer (drüber hinaus) zu lesen.
-> spätestens irgendwo im TColumn.GetValue
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 4. Apr 2023 um 10:21 Uhr)
  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 20:08 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