Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   ADO Strings autom. abschneiden? (https://www.delphipraxis.net/170237-ado-strings-autom-abschneiden.html)

gmc616 6. Sep 2012 15:48

Datenbank: MSSQL • Version: 2008 R2 • Zugriff über: TADOConnection

ADO Strings autom. abschneiden?
 
Hallo DP,

Gibt es im Delphi 2009 eine Option, einen Parameter o.ä. , mit dem man erreichen kann, dass zu lange Strings beim INSERT oder UPDATE in ein VARCHAR-Feld auf die maximale Länge des Feldes abschnitten werden?

z.B. "Tabelle" mit dem Feld "text" VARCHAR(2)
Delphi-Quellcode:
sSql := 'INSERT INTO Tabelle (text) VALUES (:DerString)';
AdoQuery.SQL.Text := sSql;
AdoQuery.Parameters.ParamByName('DerString').Value = 'ABC';
AdoQuery.Parameters.ParamByName('DerString').DataType := ftString;
AdoQuery.Exceute;
... soll, anstatt den Datensatz nicht zu speichern, entsprechend 'AB' in "text" speichern. Das ganze automatisch, ohne das ich per Hand die Feldlänge ermitteln und den String zurecht schneiden muß.

Bummi 6. Sep 2012 16:48

AW: ADO Strings autom. abschneiden?
 
Delphi-Quellcode:
sSql := 'INSERT INTO Tabelle (text) VALUES (Cast(:DerString as NVarchar(2)))';

DeddyH 6. Sep 2012 16:52

AW: ADO Strings autom. abschneiden?
 
Dazu brauchst Du aber auch wieder die Feldlänge.

Bummi 6. Sep 2012 17:51

AW: ADO Strings autom. abschneiden?
 
verwegen:
Delphi-Quellcode:
sSql := 'set ansi_warnings off INSERT INTO Tabelle (text) VALUES (:DerString) set ansi_warnings on';

sx2008 7. Sep 2012 03:03

AW: ADO Strings autom. abschneiden?
 
Das Wort text ist in vielen Datenbanken ein reservierter Bezeichner was man nicht als Feld- oder Tabellenname verwenden sollte.
Delphi-Quellcode:
// neuen Datensatz einfügen
// Performance ist etwas geringer als beim direkten INSERT
// aber die String-Felder werden autom. abgeschnitten
AdoQuery.SQL.Text := 'SELECT infotext FROM Tabelle WHERE 0=1';
AdoQuery.Open;
AdoQuery.Append;
AdoQuery['infotext'] := 'ABC';
AdoQuery.Post; // VCL generiert im Hintergrund einen INSERT


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:29 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 by Thomas Breitkreuz