Einzelnen Beitrag anzeigen

Benutzerbild von Smiley
Smiley

Registriert seit: 9. Dez 2004
Ort: Gedern
205 Beiträge
 
Delphi 10.4 Sydney
 
#1

ADS Datenbank meldet 'im Lesemodus' bei Query.edit

  Alt 26. Jan 2006, 20:32
Datenbank: ADS • Version: 7.1 • Zugriff über: SQL
Meine Datenbank meldet mir "Eine Datenmenge die nur zum lesen ist, kann nicht geändert werden"
In anderen Programmteilen kann ich mit der gleichen Synthax meine Datenbankwerte ändern, warum hier nicht:

Delphi-Quellcode:
//-----------------------------------------------------------------------------
// Alle Belege mit .pdf exportieren und packen, die kein Exportiert-Datum haben
//-----------------------------------------------------------------------------
procedure ExportBelegeAktuell;
var
  Datei: Textfile;
  i: Integer;
  Hour, Min, Sec, MSec: Word;
  Zeit, ExportPath, Mo: string;
  LMonat,LJahr,LTag: Word;
  Jetzt: TDateTime;

begin
  i := 0;
  ExportPath := BaseDatapath + BMandant + '\Export\';
  // Datenbank Belege öffnen und leere Feld 'Exportiert' Datensätze selektieren
  DM.AdsQBelege.Active := False;
  DM.AdsQBelege.SQL.Clear;
  DM.AdsQBelege.SQL.ADD('Select * From Belege where Exportiert is null');
  DM.AdsQBelege.open;

  if not (DM.AdsQBelege.EOF and DM.AdsQBelege.BOF) then
    begin
      // ersten Datensatz mit leerem Eportiert-Feld auslesen und Monat des Belegdatums auslesen
      // Dann nur noch Datensätze anzeigen, die Exportiert leer und Monat (Belegdatum) haben
      decodedate(DM.AdsQBelege.FieldByName('BelegDatum').AsDateTime,LJahr,LMonat,LTag);
      Mo:=IntToStr(LMonat);
      DM.AdsQBelege.Active := False;
      DM.AdsQBelege.SQL.Clear;
      DM.AdsQBelege.SQL.ADD('Select * From Belege where Exportiert is null AND Month(Belegdatum)='+Mo);
      DM.AdsQBelege.Active:=True;
      // Zählgröße des Vortschrittsbalkens setzen, anhand der Anzahl der Datensätze
      FBelege.ProgressBar1.max := DM.AdsQBelege.RecordCount;
      FBelege.ProgressBar1.Visible := true;

      // Existiert unter diesem Mandanten schon das Verz. Export ?
      // dann Dateien darin löschen, sonst Verz. anlegen.
      if not DirectoryExists(BaseDatapath + BMandant + '\Export') then
        ForceDirectories(BaseDatapath + BMandant + '\Export')
      else
        DeleteAll(ExportPath, '*.*'); //Delete all files in export

      // CSV Datei anlegen ---------------------------------------------
      assignfile(Datei, ExportPath + 'Belege.csv');
      rewrite(Datei);
      Jetzt:=Now();
      // Schleife zum ausgeben der Daten ins Export Verzeichnis
      DM.AdsQBelege.First;
      while (not DM.AdsQBelege.Eof) do
        begin
          PDFKopieren; // Hier die PDF-Datei aus dem Datensatz ins Exportverz kopieren

          // Dann den Datensatz in die CSV-Datei schreiben
          WriteLn(Datei,
            DM.AdsQBelege.FieldByName('Belegdatum').AsString + ';' +
            DM.AdsQBelege.FieldByName('Waehrung').AsString + ';' +
            FormatFloat('##,###,##0.00', DM.AdsQBelege.FieldByName('Betrag').AsFloat) + ';' +
            DM.AdsQBelege.FieldByName('SH').AsString + ';' +
            DM.AdsQBelege.FieldByName('Skontobetrag').AsString + ';' +
            DM.AdsQBelege.FieldByName('Gegenkonto').AsString + ';' +
            DM.AdsQBelege.FieldByName('StGegenkonto').AsString + ';' +
            DM.AdsQBelege.FieldByName('BelegNr').AsString + ';' +
            DM.AdsQBelege.FieldByName('Konto').AsString + ';' +
            DM.AdsQBelege.FieldByName('Bemerkung').AsString + ';' +
            DM.AdsQBelege.FieldByName('Sonstiges').AsString + ';' +
            DM.AdsQBelege.FieldByName('Eingabedatum').AsString + ';' +
            DM.AdsQBelege.FieldByName('PDFData').AsString + ';' +
            DM.AdsQBelege.FieldByName('Nr').AsString + ';' +
            DM.AdsQBelege.FieldByName('Kostenstelle').AsString + ';' +
            DM.AdsQBelege.FieldByName('Exportiert').AsString);

          // Aktuelles Datum in Feld-Exportiert schreiben
          DM.AdsQBelege.Edit; // <---------------------------------------------- Hier Fehler --------------
          DM.AdsQBelege.FieldByName('Exportiert').AsDateTime:=Jetzt;
          DM.AdsQBelege.Post;

          DM.AdsQBelege.Next; //zum nächsten Datensatz
          inc(i); // Fortschrittsbalken eins weiter setzen
          FBelege.ProgressBar1.Position := i;
        end;
      Closefile(Datei); //CSV-Datei schließen
    end;
Ist bestimmt wieder was ganz einfaches, aber ich sehe es nicht !!!!
  Mit Zitat antworten Zitat