Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Neues Feld läßt sich nicht beschreiben (https://www.delphipraxis.net/194276-neues-feld-laesst-sich-nicht-beschreiben.html)

BlueStarHH 5. Nov 2017 18:47

Datenbank: MsSQL • Version: 2008 • Zugriff über: ADO

Neues Feld läßt sich nicht beschreiben
 
Hallo,

mit dem folgendem Code frage ich eine Tabelle ab und erweitere das Ergebnis um das Feld b. Dieses möchte ich anschließend beschreiben. Dabei erscheinen die unten angegebenen Fehler:

Code:
Query := TAdoDataset.Create(Self);
Query.Name := 'xyz';
Query.Connection := MyCon;
Query.CursorType := ctStatic;
Query.CursorLocation := clUseClient;
Query.LockType := ltBatchoptimistic;
Query.Close;
Query.CommandText := 'select a, cast(null as integer) as b from aTable where a = ...';
Query.Open;
 
//Erster Versuch
Query.Append;
Query.FieldbyName('b').Value := 4711;
Query.Post; // <-- Exception: EDatabaseError: Feld 'b' kann nicht verändert werden

//Nächster Versuch
Query.Append;
Query.FieldbyName('b').ReadOnly := false;
Query.FieldbyName('b').Value := 4711;
Query.Post; // <-- Feld b wird nach dem Post auf null gesetzt
Wie kann ich ein Wert in b schreiben?

nahpets 5. Nov 2017 19:05

AW: Neues Feld läßt sich nicht beschreiben
 
Ein berechnetes Feld oder ein wie auch immer über Funktionen "zusammengestelltes" Feld kann man nicht ändern.
Die Datenbank müsste beim Beschreiben ja quasi, das, was die Funktion macht, "rückwärts" machen, um dann den Wert in die Datenbank zu schreiben, der bei der Ausgabe über die Funktion zu dem übergebenen Ergebnis führt.

Und wenn dann null als Integer gecastet geliefert wird und dahinter noch nicht mal ein reales Datenbankfeld liegt, wo soll die Datenbank denn dann den zugewiesenen Wert hinschreiben?

Was Du da machst wäre ja ungefähr sowas:
SQL-Code:
update tabelle set null = 4711 where spalte = 'Wert'


Versuch das mal direkt auf der Datenbank, geht das?

BlueStarHH 5. Nov 2017 19:08

AW: Neues Feld läßt sich nicht beschreiben
 
Wie bekomme ich dann zusätzliche Daten in jeden Record? Es muss nicht in die DB geschrieben werden. Es reicht wenn das nur so lange existiert, wie die Datenmenge offen ist.

BlueStarHH 5. Nov 2017 19:12

AW: Neues Feld läßt sich nicht beschreiben
 
Zitat:

Zitat von nahpets (Beitrag 1385261)
Was Du da machst wäre ja ungefähr sowas:
SQL-Code:
update tabelle set null = 4711 where spalte = 'Wert'

Wäre das nicht ehr so:
SQL-Code:
update tabelle set b = 4711 where spalte = 'Wert'
Das Feld heißt b und ist mit null initialisiert. Statt null hätte ich auch eine Zahl nehmen können...

nahpets 5. Nov 2017 19:18

AW: Neues Feld läßt sich nicht beschreiben
 
Zitat:

Zitat von BlueStarHH (Beitrag 1385264)
Zitat:

Zitat von nahpets (Beitrag 1385261)
Was Du da machst wäre ja ungefähr sowas:
SQL-Code:
update tabelle set null = 4711 where spalte = 'Wert'

Nö, das wäre sowas
SQL-Code:
update tabelle set b = 4711 where spalte = 'Wert'
Das Feld heiß b und ist mit null initialisiert. Statt null hätte ich auch eine Zahl nehmen können...

Nein, b ist kein Feld in der Datenbank und damit kannst Du dem auch keinen Wert zuweisen. B ist lediglich ein Alias auf ein Funktionsergebnis, das kann man nicht in 'nem Update aktuallisieren.

Ansonsten ausprobieren und hier den Nachweis posten, dass das mit Deiner Datenbank funktioniert ;-)

Ansonsten zur vorherigen Frage:

ClientDataSet?

Aus der DB befüllen und dann damit machen, was erforderlich ist?

mkinzler 5. Nov 2017 19:26

AW: Neues Feld läßt sich nicht beschreiben
 
Oder eine temporäre Tabelle für die Abfrage anlegen.

BlueStarHH 5. Nov 2017 20:01

AW: Neues Feld läßt sich nicht beschreiben
 
Zitat:

Zitat von nahpets (Beitrag 1385266)
ClientDataSet?

Aus der DB befüllen und dann damit machen, was erforderlich ist?

So habe ich es nun gemacht und es klappt. Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz