Einzelnen Beitrag anzeigen

Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
831 Beiträge
 
Delphi 10.4 Sydney
 
#1

Manipulation eines Records in einer FDQuery

  Alt 15. Jun 2023, 09:24
Datenbank: MsSQL • Version: 14 • Zugriff über: FireDac
Guten Morgen Zusammen,

seit einigen Tagen verzweifle ich an dem Versuch, einen Wert in einem Feld in einer FDQuery zu ändern. Der Hintergrund besteht darin, dass ich die Information von einem anderen Datenbank-Server abrufen muss und deshalb nicht alles in der gleichen Query durch führen kann...

Delphi-Quellcode:
MsQuery.SQL.Add('SELECT TOP 1 '+
                                'CASE WHEN ( '+
                                  'concat(rj.JOB_ID, ' + QuotedStr(' ') + ', JOB_NAME) is NULL) then '+
                                  'LAG(Concat(rj.JOB_ID, ' + QuotedStr(' ') + ', rj.JOB_NAME)) OVER (ORDER BY re.TIME_LOCAL DESC) ELSE '+
                                  'concat(rj.JOB_ID, ' + QuotedStr(' ') + ',rj.JOB_NAME) end AS JOB_NAME, '+
                                'CONVERT( varchar( 10 ), re.Time_Local, 104 ) AS Datum, '+
                                'convert(char(5), re.Time_Local, 108) AS Startzeit, '+
                                'rd.device_id, '+
                                'rd.device_name, '+
                                'ro.OPERATION_NAME, '+
                                'concat(ry.FIRST_NAME,' +QuotedStr(' ') + ', ry.FAMILY_NAME) AS Operator, '+
                                
...

                         'ORDER BY re.TIME_LOCAL desc ');
         MsQuery.ParamByName('Device_ID').AsString := Machine_ID;
         MsQuery.Open;
         DB_Modul.Write_LM_Protokoll('Refresh Daten Maschine ' + Machine_ID);


         CDMQuery.SQL.Clear;
         CDMQuery.sql.Add('select * from CDM_SM_DEVICE_OP_STATUS '+
                          'where deviceID = :Device '+
                          'and roleID = ' + QuotedStr('ID_Operator'));
         CDMQuery.ParamByName('Device').AsString := MsQuery.FieldByName('device_id').AsString;
         CDMQuery.Open;

         CDMQuery.First;
         MsQuery.First;
         MsQuery.Edit;
         MsQuery.FieldByName('Operator').AsString := CDMQuery.FieldByName('userID').AsString;
         MsQuery.Post;
Ich bekomme erst die Meldung: "Feld Operator kann nicht geändert werden." Das wird wahrscheinlich daran liegen, dass es sich um ein virtuellen Feld, das aus zwei Feldern zusammengesetzt wird.
Wenn ich es dann mit einem anderen Feld teste, bekomme ich die Meldung: "Invalid Field Columnname 'JOB_NAME'.

Das verstehe ich nicht, denn mit diesem Feld mache ich nichts. Es ist aber das erste Feld der MsQuery, sodass ich davon ausgehe, dass er das bei den anderen Feldern auch sagen würde.

Ich habe aber abgeprüft, und vor dem Post ist das Feld vorhanden und hat einen korrekten Wert.

Sieht jemand, was ich falsch mache?

Vielen Dank Patrick
Patrick
  Mit Zitat antworten Zitat