Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Update ausführen (https://www.delphipraxis.net/156267-update-ausfuehren.html)

Metallicwar 25. Nov 2010 15:55

Datenbank: ADS • Version: 9 • Zugriff über: Delphi

Update ausführen
 
Hallo, kurz vor Feierabend häng ich aufm Schlauch...
erstmal Code: .......
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  iDatensätze: Integer;
  sNeueDatei: String;
  sAlteDatei: String;
begin
  qAkteAnhänge.SQL.Text := 'SELECT ID_PersonalAkte, Dateiname, DateinameSave FROM PersonalAkte_Anhaenge';

  qAkteAnhänge.Open;

  qAkteanhänge.First;
  for iDatensätze := 0 to qAkteanhänge.RecordCount - 1 do
    begin
      sNeueDatei := qAkteanhänge.FieldByName('ID_PersonalAkte').AsString + '_' + qAkteanhänge.FieldByName('Dateiname').AsString;
      sAlteDatei := qAkteanhänge.FieldByName('DateinameSave').AsString;
      //RenameFile(sAlteDatei, sNeueDatei);
      qAkteanhänge.ExecSQL := 'UPDATE Personalakte_Anhaenge SET DateinameSave=' + QuotedStr(sNeueDatei) + ' WHERE DateinameSave= ' + QuotedStr(sAlteDatei); // in dieser Line hab ich Probleme
      qAkteanhänge.Open;
      qAkteanhänge.Close;
      qAkteAnhänge.Next;
    end;
end;
.. habe das ganze zuvor mit qAkteanhänge.SQL.Text := 'Update .... probiert, da meinte er ich soll bei solchen Statements execSQL verwenden. Soweit so gut, also verwende ich nun execSQL aber so meint er, dass der linken seite nichts zugewiesen werden kann wenn ich den : weglasse meint er := erwartet aber = gefunden?!?
Bin ausgepowert :pale:
würde mich über Hilfe freuen, damit ich dass heute Abend noch fertig bekomme.

DeddyH 25. Nov 2010 16:00

AW: Update ausführen
 
Du brauchst eine 2. Query, sonst kannst Du ja nicht durch die Datensätze iterieren. Dieser weist Du dann ein parametrisiertes Statement zu (Query.SQL.Text := ), belegst die Parameter anhand der gefundenen Daten und führst es aus (Query.ExecSQL).

shmia 25. Nov 2010 16:00

AW: Update ausführen
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  iDatensätze: Integer;
  sNeueDatei: String;
  sAlteDatei: String;
begin
  qAkteAnhänge.SQL.Text := 'SELECT ID_PersonalAkte, Dateiname, DateinameSave FROM PersonalAkte_Anhaenge';

  qAkteAnhänge.Open;

  while not qAkteanhänge.Eof do
    begin
      sNeueDatei := qAkteanhänge.FieldByName('ID_PersonalAkte').AsString + '_' + qAkteanhänge.FieldByName('Dateiname').AsString;
      //sAlteDatei := qAkteanhänge.FieldByName('DateinameSave').AsString;
      //RenameFile(sAlteDatei, sNeueDatei);

      qAkteanhänge.Edit;
      qAkteanhänge['DateinameSave'] := sNeueDatei;
      qAkteanhänge.Post;
      qAkteAnhänge.Next;
    end;
end;

DeddyH 25. Nov 2010 16:01

AW: Update ausführen
 
Jo, stimmt, ist in diesem Fall ja viel einfacher :oops:

[edit] Oder noch einfacher: die Abfrage ganz weglassen und alles im Update-Statement erledigen. Das dürfte auch der performanteste Weg sein. [/edit]

Metallicwar 25. Nov 2010 19:56

AW: Update ausführen
 
[edit] Oder noch einfacher: die Abfrage ganz weglassen und alles im Update-Statement erledigen. Das dürfte auch der performanteste Weg sein. [/edit]
dazu muss ich ja eine neue Query hinzufügen und die bau ich dann einfach in meine Schleife ein. So sollte es gehn, werd ich gleich mal ausprobieren, vorrausgesetzt die VM startet mal :)

Metallicwar 25. Nov 2010 20:31

AW: Update ausführen
 
hmn, irgendwas mach ich falsch....
Delphi-Quellcode:
      begin
        qAkteAnhänge.First;
        for iDatensätze := 0 to qAkteanhänge.RecordCount - 1 do
          begin
            sNeueDatei := qAkteAnhänge.FieldByName('ID_PersonalAkte').AsString + '_' + qAkteanhänge.FieldByName('Dateiname').AsString;
            sAlteDatei := qAkteAnhänge.FieldByName('DateinameSave').AsString;
            RenameFile(sPfadPersonal+sAlteDatei, sPfadPersonal+sNeueDatei);
            qNewAuftrag.SQL.Text := 'UPDATE Auftragakte_Anhaenge SET DateinameSave=' + QuotedStr(sNeueDatei) + 'WHERE DateinameSave=' +QuotedStr(sAlteDatei);
            qNewAuftrag.ExecSQL;
            qAkteAnhänge.Next;
          end;
      end;
der SQL stimmt doch, er soll für jeden Datensatz den alten Dateinamen durch den neuen ersetzen, aber das tut er nicht, in der DB stehn immer noch die selben werte....

Metallicwar 25. Nov 2010 20:38

AW: Update ausführen
 
kommando zurück!!!!
hab im SQL.Text die falsche Tabelle angegeben. ^^ :)
mal schaun, ich teste jetzte mal und wenns noch irgendwo Probleme geben sollte, melde ich mich.

DeddyH 26. Nov 2010 08:14

AW: Update ausführen
 
Was ich meinte:
SQL-Code:
UPDATE
  PersonalAkte_Anhaenge
SET
  DateinameSave = CONCAT(ID_PersonalAkte, '_', Dateiname)
Wieso clientseitig erledigen, was auch gleich auf dem Server geschehen könnte?


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:43 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