AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Delphi-Oracle8-tquery.Delete
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi-Oracle8-tquery.Delete

Ein Thema von IlseB · begonnen am 24. Sep 2003 · letzter Beitrag vom 25. Sep 2003
Antwort Antwort
IlseB

Registriert seit: 24. Sep 2003
15 Beiträge
 
Delphi 5 Professional
 
#1

Delphi-Oracle8-tquery.Delete

  Alt 24. Sep 2003, 13:50
Ich bin Neueinsteiger in das DB-System Oracle. Bisher wurde alles mit Paradox-Dbs realisiert, was auch wunderbar funktionierte, die gleiche Funktionalität ist in Oracle aber trotz vieler Variationen nicht realisierbar. So zum Beispiel:

Erstellen einer Sicht mit TQuery (funktioniert)
Abfrage ob Sätze vorhanden (funktioniert)
Löschen aller Datensätze mit
a) einfachem DELETE im PGM-Code (tut so als ob, nach
wiederholtem Aufruf des Pgms alle Sätze aber wieder vorhanden)

b) UPDATESQL : 1.Löschversuch => Fehlermeldung (Tabelle
schreibgeschützt)
ignorieren und 2.Versuch => Löschen funktioniert in
Zeitlupe
c) execSQL : wie a).


Ist einer von oben aufgeführten Lösungswegen möglich??? Wenn ja, welcher und wie?
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.610 Beiträge
 
#2

Re: Delphi-Oracle8-tquery.Delete

  Alt 24. Sep 2003, 13:52
Jupp. Oracle braucht bei Deletes wie auch bei updates immer ein COMMIT; nach dem Statement.

Ohne Commit nimmt Oracle die Änderung nicht an. Ist ein wenig blöd, da stolpern die meisten drüber am Anfang. Ora ist da leider generell ein wenig gewöhnungsbedürftig.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
IlseB

Registriert seit: 24. Sep 2003
15 Beiträge
 
Delphi 5 Professional
 
#3

Re: Delphi-Oracle8-tquery.Delete

  Alt 24. Sep 2003, 14:05
Danke für die schnelle Antwort, nur LEIDER klappt es trotzdem nicht!

Jetzt tut er wieder nur so, als ob er löscht - Sätze sind aber immer
noch da.

Und nun?
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#4

Re: Delphi-Oracle8-tquery.Delete

  Alt 24. Sep 2003, 14:10
Hallo Ilse,

kannst Du mal ein kurzes Prog-Beispiel bereitstellen?
  Mit Zitat antworten Zitat
IlseB

Registriert seit: 24. Sep 2003
15 Beiträge
 
Delphi 5 Professional
 
#5

Re: Delphi-Oracle8-tquery.Delete

  Alt 24. Sep 2003, 14:16
Import-Routine in im Anhang
Angehängte Dateien
Dateityp: doc procedure_tfrmimportallg.doc (27,0 KB, 9x aufgerufen)
  Mit Zitat antworten Zitat
IlseB

Registriert seit: 24. Sep 2003
15 Beiträge
 
Delphi 5 Professional
 
#6

Re: Delphi-Oracle8-tquery.Delete

  Alt 24. Sep 2003, 14:55
hier nochmal die Procedure :

Delphi-Quellcode:
procedure TfrmImportAllg.sbtnImportClick(Sender: TObject);
begin
  // prüfen ob Datei und Jahr ausgewählt wurden
  if (cbxJahr.ItemIndex > -1) and (cbxDateiAusw.ItemIndex > -1) then begin
    //Prüfen ob Datensätze schon in TableGde vorhanden
    if quAllg.Active then begin
      quAllg.Close;
    end;
    quAllg.ParamByName('PJahr').AsInteger:= StrToInt(cbxJahr.Text);
    quAllg.Prepared := False;
    if not quAllg.Active then begin
      quAllg.Open;
    end;
    with cbxDateiAusw do begin
      if quAllg.IsEmpty then begin
        quAllg.Close;
        // importieren der ausgewählten Datei
        case ItemIndex of
          0 : begin
            ImportCopyGde;
          end;
          1 : begin
            ImportCopyBank;
          end;
          2 : begin
            ImportCopyGdeBank;
          end;
          3 : begin
// ImportCopyAdr;
              ExcelTabOeffnen;
              DBAdrfuellen;
          end;
        end; //Case-end
      end else begin // quAllg not empty
        // Meldung dass Datensätze bereits vorhanden und
        // Abfrage ob überschrieben werden soll
        if MessageDlg('Datensätze mit Jahr ' + cbxJahr.Text + ' bereits vorhanden! Überschreiben ?',
             mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin
          //Löschen und importieren => Überschreiben der Sätze
          quAllg.First;
          case ItemIndex of
            0 : begin
              try
               quAllg.CachedUpdates := true;
               quAllg.UpdateObject := frmDataModul.UpdateGde;
                while not quAllg.Eof do begin
                  quAllg.Delete;
                end;
              finally
                quAllg.ApplyUpdates;
                quAllg.CachedUpdates := false;
              end;
            end;
            1 : begin
              try
               quAllg.CachedUpdates := true;
               quAllg.UpdateObject := frmDataModul.UpdateGdeBank;
                while not quAllg.Eof do begin
                  quAllg.Delete;
                end;
              finally
                quAllg.ApplyUpdates;
                quAllg.CachedUpdates := false;
              end;
            end;
            2 : begin
              try
               quAllg.CachedUpdates := true;
               quAllg.UpdateObject := frmDataModul.UpdateBank;
                while not quAllg.Eof do begin
                  quAllg.Delete;
                end;
              finally
                quAllg.ApplyUpdates;
                quAllg.CachedUpdates := false;
              end;
            end;
            3 : begin
                while not (quAllg.Eof) do begin
                  frmHaupt.dbFinalDi.StartTransaction;
                  quAllg.Delete;
                  frmHaupt.dbFinalDi.Commit;
                end;
            end;
          end;
          case ItemIndex of
            0 : begin
             //*ImportCopyGde;
            end;
            1 : begin
             //* ImportCopyBank;
            end;
            2 : begin
             //* ImportCopyGdeBank;
            end;
            3 : begin
             //* ImportCopyAdr;
            end;
          end; //Case-end
          showmessage('hier sollten die Sätze überschrieben werden');
        end else begin //Datensätze nicht überschreiben
          // routine beenden => normal keine Handlung mehr nötig,
          // dient momentan nur zur Kontrolle
          showmessage('hier sollten wir auf anständige Art und Weise das ganze beenden');
        end; //if msgDialog-end
      end; //quAllg.empty-end
    end; // with cbxDateiAusw-end
  end else begin // Jahr oder Dateiname nicht ausgewählt
    showmessage('Sie müssen vor dem Import sowohl eine Datei als auch das Jahr auswählen!');
  end; // Jahr+Dateiname ausgewählt-end
end;
[edit=MrSpock]Code-Tags hinzugefügt. Mfg, MrSpock[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.610 Beiträge
 
#7

Re: Delphi-Oracle8-tquery.Delete

  Alt 24. Sep 2003, 15:06
IEEKS. Für sowas haben wir doch die CODE - und auch die Delphi Tags...

Nagut. Was für Komponenten sind das die da verwendet werden? Ich dachte ich sagte, der DELETE - Befehl müsste mit einem Commit bestätigt werden. Ich sagte nicht, das man den Delete-Befehl in eine Transaction setzen muss.

Also entweder:
1.) DELETE
2.) COMMIT

oder
1.) BEGIN TRANSACTION
2.) DELETE
3.) COMMIT
4.) CONFIRM TRANSACTION

Auf jeden Fall muss der einzelne Delete-Befehl von einem Commitz gefolgt werden, sonst nimmt Oracle den Befehl nicht an.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#8

Re: Delphi-Oracle8-tquery.Delete

  Alt 24. Sep 2003, 18:06
Hallo Ilse,

ich gehe mal davon aus, dass quAllg eine TQuery ist. Dann kannst Du die Methode Delete nur verwenden, wenn RequestedLive gleich true (aktualisierbare Datenmenge) ist. Und dann ist das natürlich gähnend langsam.
Schneller wäre es, wenn Du ein UPDATE-Statement unter Verwendung von TQuery oder TUpdateSQL an die Datenbank schickst. Du kannst ja die WHERE-Klausel, die jetzt im SELECT steht in's DELETE übernehmen.
  Mit Zitat antworten Zitat
Alfons_G

Registriert seit: 7. Jun 2002
Ort: München
296 Beiträge
 
Delphi 2007 Architect
 
#9

Re: Delphi-Oracle8-tquery.Delete

  Alt 25. Sep 2003, 10:25
Für den Zugriff auf Oracle gibt es auch verschiedene Komponenten zum Direktzugriff. Dabei hast Du die Wahl zwischen kostenlos und etwas einfacher gestrickt und Shareware mit mehr Komfort, bzw. Möglichkeiten. Schau mal bei Torry, dort findest Du die meisten erhältlichen Oracle-Kompos.
Bei einigen der Komponenten (z.B. ODAC) gibt es da die Eigenschaft AutoCommit, welche das Verhalten von Paradox & Co nachbildet. Aber Achtung - bei voneinander abhängigen Operationen sollte man wirklich auf ein explizites Commit setzen. Es ist einfach sicherer.

Alfons Grünewald



Alfons Grünewald
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:12 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