AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Datenbanken und Statusmeldungen

Datenbanken und Statusmeldungen

Offene Frage von "frankg"
Ein Thema von frankg · begonnen am 8. Jan 2004 · letzter Beitrag vom 13. Jan 2004
 
frankg

Registriert seit: 20. Mai 2003
Ort: Wetter
72 Beiträge
 
Delphi 7 Architect
 
#7

Re: Datenbanken und Statusmeldungen

  Alt 13. Jan 2004, 11:53
Zitat von Garby:
Wie George schon schrieb, werden diese Meldungen meist vom Verwendeten Programm generiert.
Werden Datensätze mittels DELETE gelöscht wird manchmal die Anzahl der betroffenen Zeilen zurückgegeben.

...

Wie du siehst muss man sich i.d.r. um diese Statusmeldungen selber kümmern.
Von einer Automatisierung, wie z.B. ADOConnection1.GetLastMessage ist mir nichts bekannt.
Hallo Garby!

Vielen Dank für Dein Posting. Das mit der Anzahl der Datensätze ist aber recht kompliziert. Das kann man auch anders machen:

<Klugscheiss=ON >

Delphi-Quellcode:

uses
  AdoInt;

....

// Ich verwende hier eine TADOConnection, weil die einfacher in Delphi
// (besonders in der IDE) zu handhaben ist als ein _Connection-Objekt
procedure DoSomething (myConnection : TADOConnection);
var
  RowsAff : OleVariant;
  myADOCmd : ADOInt.Command;
begin
  if myConnection = nil then exit;
  try
    myADOCmd := CoCommand.Create;
    try
      if myConnection.Connected = FALSE then myConnection.Open;
      with myADOCmd do
        begin
          CommandType := adCmdStoredProc;
          CommandText := 'DELETE FROM BeispielTab WHERE Feld = 12';
          // Ich greife hier auf das unterliegende ADO-Objekt _Connection über
          // das TADOConnection Objekt zu.
          Set_ActiveConnection(myConnection.ConnectionObject);
          Execute (RowsAff, EmptyParam, adExecuteNoRecords);
          // In RowsAff steht ab hier dann die Anzahl der Zeilen, auf die sich der Befehl
          // ausgewirkt hat.
        end;
    except
      // Irgendwas hat da nicht geklappt!
    end;
  finally
     // Aufräumen
     myADOCmd := nil;
  end;
end;
<Klugscheiss=OFF >

Diese Weg hat mehrere Vorteile (siehe auch "ADO und Delphi" von Andreas Kosch). Da die dbGO-Implementation von Borland wohl nicht so doll ist, sind die wichtigsten Vorteile, dass diese Methode weniger Fehler verursacht und (wichtiger) das hier läuft viel schneller als über die dbGO-Komponenten. Da lohnt sich der zusätzliche Schreibaufwand dann wieder. Ausserdem muss man hier (im Gegensatz zu Deiner Lösung) nichts in der Datenbank selbst implementieren.

Aber nun zurück zur Ausgangsfrage:

Wenn ich also einen beliebigen SQL-String an eine Datenbank senden möchte und eine Ausgabe wie folgt erzielen möchte:

SQL-Code:
SQL> DELETE FROM Tabelle Where Feld = 1;

12 Datensätze gelöscht

SQL> ALTER TABLE Tabelle add NeuesFeld numeric;

Tabelle geändert
Muss ich also im Prinzip den SQL-Befehl vor-parsen (damit ich weiss, was gemacht werden soll) um dann die richtige Meldung ausgeben zu können? Sollte ein Fehler auftreten, ist es wieder einfacher, weil ich dann einfach das Errors-Objekt loopen kann und alles was da drin steht ausgeben kann. Ausserdem muss ich ja auch gucken, ob es sich um einen SELECT Befehl handelt, weil dieser dann ja eine Ergebnisdatenmenge zurückliefern kann.

Vielen Dank und viele Grüsse

Frank
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 15:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz