Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Wo, wie wann wird die SQL-Anweisung erzeugt? (https://www.delphipraxis.net/9664-wo-wie-wann-wird-die-sql-anweisung-erzeugt.html)

Tyrael Y. 1. Okt 2003 11:35


Wo, wie wann wird die SQL-Anweisung erzeugt?
 
Hallo erst einmal,

wenn man Anweisungen an die Datenbank in der Art

Code:
LTable.FieldByName('ID').AsString := myID;
schickt, müssen diese doch vorher durch Delphi(oder dem Datenbanktreiber) in eine SQL-Anweisung verwandelt werden
damit sie auf der Datenbank ausgeführt werden können. Oder seh ich das falsch?

Wenn es so ist,...

... wo, wie und wann wird diese SQL-Anweisung erzeugt?


Gruß Tyrael

ffomoon 1. Okt 2003 11:41

Re: Wo, wie wann wird die SQL-Anweisung erzeugt?
 
versteh ich nicht was hat der feldname mit ner sql abfrage zutun????

moon

Tyrael Y. 1. Okt 2003 11:49

Re: Wo, wie wann wird die SQL-Anweisung erzeugt?
 
Zitat:

versteh ich nicht was hat der feldname mit ner sql abfrage zutun
das ist der Feldname der verändert wird, für diesen Fall würde die SQL-Anweisung lauten

Code:
UPDATE myTable SET ID = myID

... wenn ich mich nicht irre

Hansa 1. Okt 2003 11:54

Re: Wo, wie wann wird die SQL-Anweisung erzeugt?
 
Üblicherweise brauchst Du mindestens folgende Komponenten:

- Database
- Transaction
- Dataset

Und das Dataset muß Kenntnis von den Feldern haben. Sind diese drei Komponenten richtig eingestellt, dann kann man so eine Zuweisung machen. Denn das ist dann die Verbindung zu Delphi.

Tyrael Y. 1. Okt 2003 12:12

Re: Wo, wie wann wird die SQL-Anweisung erzeugt?
 
ähm

Zitat:

Üblicherweise brauchst Du mindestens folgende Komponenten:

- Database
- Transaction
- Dataset

Und das Dataset muß Kenntnis von den Feldern haben. Sind diese drei Komponenten richtig eingestellt, dann kann man so eine Zuweisung machen. Denn das ist dann die Verbindung zu Delphi.
versteh ich nicht ... also nochmal zum Verständnis wie ich die Verbindung aubaue....

ich benutze eine MSSQL - Datenbank...
Die Verbindung zur DB wird so aufgebaut ...
Code:
 
  ...
  fDBConnector := TADOConnection.Create(nil);
  try
    fDBConnector.LoginPrompt := False;
    fDBConnector.ConnectionString := 'Provider=SQLOLEDB.1;Password=Test;Persist Security Info=True;User ID=sa;Initial      Catalog=ACMP;Data Source=myComputer';
    fDBConnector.Connected := True;
  ...
z.B lese ich ich Daten folgendermassen aus der DB
Code:
   ...
   lTable := TADOTable.Create(nil);
   try
    lTable.Connection := fDBConnector;
    lTable.TableName := 'TestTable';
    lTable.Open;
    while not lTable.Eof do
    begin
       myMemo.Lines.Add(lTable.fieldbyname('NAME').AsString);
       lTable.Next;
    end;
   finally
     lTable.Free;
   end;
   ...
also in dem Schritt
Code:
myMemo.Lines.Add(lTable.fieldbyname('NAME').AsString);
wird ja die Anweisung lTable.fieldbyname('NAME').AsString auf der DB ausgeführt
was der SQL-Anweisung SELECT NAME FROM TestTable entspricht


Die DB kann ja halt nur SQL-Anwesiungen ausführen, ...

... wann, wo, wie wird lTable.fieldbyname('NAME').AsString in
SELECT NAME FROM TestTable gewandelt?

Ich hoffe jetzt wird meine Frage klarer.

Hansa 1. Okt 2003 12:20

Re: Wo, wie wann wird die SQL-Anweisung erzeugt?
 
Bei ADO und dem Access Krempel muß ich passen. Allerdings wirst Du wohl auch eine Datenmenge brauchen, die mit SELECT zusammengesucht wurde. Und hierauf kann man dann mit FieldByName zugreifen.

Tyrael Y. 1. Okt 2003 12:24

Re: Wo, wie wann wird die SQL-Anweisung erzeugt?
 
ok trotzdem thx.

ich bin mir ja auch nicht sicher, ob das überhaupt geht,
da ich ganz gerne die SQL-Anweisung die zum Ausführen auf die DB geschickt wird
auslesen möchte, das ist das Ziel...

.. alles andere war nur eine Überlegung meinerseits


Gruß Tyrael

danielA 1. Okt 2003 14:27

Re: Wo, wie wann wird die SQL-Anweisung erzeugt?
 
Hallo Tyrael Y. ,

Es ist sehr wahrscheinlich, daß hier überhauptnicht mit SQL gearbeitet wird.
Du greifst sicherlich über einen ODBC- Treiber auf deine Datenbank zu. Die Übergabe an den ODBC-Treiber erfolgt über eine standardisierte Schnittstelle und dementsprechenden Befehlen (nicht SQL).
Der ODBC- Treiber greift dann auf die Datenbank über Datenbankspezifische Befehle zu (ebenfalls nicht SQL). Wenn du aber eine SQL-Anweisung abschickst, wird diese über den ODBC-Treiber an den DB-Server geroutet und dort ausgeführt.
Sieh also SQL bitte nur als eine Möglichkeit auf Datenbanken zuzugreifen.

Grüße Daniel

Tyrael Y. 1. Okt 2003 14:39

Re: Wo, wie wann wird die SQL-Anweisung erzeugt?
 
@daniel
ok danke, habe ich auch vermutet, aber habe trotzdem in der TADOTable und
verwandten Klassen nach dem setzen und schicken des SQL-Strings gesucht und leider
nicht fündig geworden

Schade eigentlich, daß kein SQL-String aufgebaut wird, da ich diesen in einem
Log-File speichern wollte

.. da kann man wohl erst einmal nix machen... :?

.. muss also nach ner anderen Möglichkeit zum loggen gucken

danke dir

Gruß Tyrael

Tanadirian 1. Okt 2003 18:07

Re: Wo, wie wann wird die SQL-Anweisung erzeugt?
 
Hast du schon mal versucht mit dem Profiler (SQL-Servertool) den Verkehr zwischen Delphi und dem SQL-Server abzuhören? Ich schau mir so immer an, was genau passiert wenn ich ne SQL-Fehlermeldung bekomme mit der ich nichts anfangen kann.
Nen Versuch wärs auf jeden Fall wert!

Leuselator 2. Okt 2003 00:51

Re: Wo, wie wann wird die SQL-Anweisung erzeugt?
 
Verstehe nicht, wieso man überhaupt mit TTable arbeiten muß, wenn 'ne "echte" Datenbank im Hintergrund ist.
Mache immer alles über TQuery bzw. TAdoQuery.
Sind beide abgeleitet von TDataSet.
TDataSet kennt und hat TFields.
Eine Zuweisung der Form
Delphi-Quellcode:
TDataSet.FieldByName('FeldName').AsTyp := Wert
weist dem TField (Variant) einen AsTyp-Wert zu. TDataset (bzw. TField über TDataSet) sendet dann an die DB:
SQL-Code:
update TabellenName set FeldName = Wert
.

Grüße Tim

r_kerber 2. Okt 2003 07:16

Re: Wo, wie wann wird die SQL-Anweisung erzeugt?
 
Hallo Daniel,

Zitat:

Zitat von danielA
Es ist sehr wahrscheinlich, daß hier überhauptnicht mit SQL gearbeitet wird.
Du greifst sicherlich über einen ODBC- Treiber auf deine Datenbank zu.

Auch wenn Du über ODBC auf eine SQL-DB zugreifst werden letztendlich SQL-Statements an die Datenbank abgesetzt.

Tyrael Y. 2. Okt 2003 08:12

Re: Wo, wie wann wird die SQL-Anweisung erzeugt?
 
Zitat:

Hast du schon mal versucht mit dem Profiler (SQL-Servertool) den Verkehr zwischen Delphi und dem SQL-Server abzuhören? Ich schau mir so immer an, was genau passiert wenn ich ne SQL-Fehlermeldung bekomme mit der ich nichts anfangen kann.
Nen Versuch wärs auf jeden Fall wert!
Wo gibst dieses Tool?


Zitat:

Verstehe nicht, wieso man überhaupt mit TTable arbeiten muß, wenn 'ne "echte" Datenbank im Hintergrund ist.
Mache immer alles über TQuery bzw. TAdoQuery.
Sind beide abgeleitet von TDataSet.
TDataSet kennt und hat TFields.
Tja nun, es sind halt innerhalb des Sourcecodes ettliche stellen vorhanden an denen TADOTable benutzt wurde,
das umschreiben wäre sehr aufwendig. Meistens wurde TADOTable genutzt um Blob Felder in die Datenbank zu schreiben.
Ich muss halt mit den Gegegebenheiten jetzt klarkommen.
Wie kann ich den an die TFields von TADOTable rankommen ?


Zitat:

Auch wenn Du über ODBC auf eine SQL-DB zugreifst werden letztendlich SQL-Statements an die Datenbank abgesetzt.
Kann man diese irgendwie lesen?

r_kerber 2. Okt 2003 12:04

Re: Wo, wie wann wird die SQL-Anweisung erzeugt?
 
Hallo Tyrael Y.,

bei der Enterprise-Version gibt's für die BDE einen SQL-Monitor. Ob's so etwas für ADO gibt, kann ich Dir nicht sagen.

Tyrael Y. 2. Okt 2003 16:02

Re: Wo, wie wann wird die SQL-Anweisung erzeugt?
 
ok macht nix.

ich danke dir für deine mühe.

Gruß Tyrael

danielA 2. Okt 2003 17:50

Re: Wo, wie wann wird die SQL-Anweisung erzeugt?
 
Hallo r_kerber

Ja du hast Recht, ich habe eben einmal Zugriffe auf eine InterbaseDB über ODBC in der ODBC Verwaltung mitgeloggt. Der ODBC setzt die Sachen tatsächlich in SQL um, auch wenn die Abfrage nicht in SQL kommt. Ich habe das wohl mit den Interbasekomponenten verwechselt, welche über die Interbase-API dem Server direkte Anweisungen geben.

Grüße Daniel

Leuselator 3. Okt 2003 20:32

Re: Wo, wie wann wird die SQL-Anweisung erzeugt?
 
Hi Tyrael

Statt des BDE-SQL-Monitors hat MS-SQL den SQL-Profiler mit an Bord - mit dem solltest Du den SQL-Command-Verkehr zu Deinem MS-SQL-Server mitloggen können - such mal nach "MSSQL-Verzeichnis...\Tools\Binn\profiler.exe"

Tyrael Y. 6. Okt 2003 10:33

Re: Wo, wie wann wird die SQL-Anweisung erzeugt?
 
hallo zusammen,

bin grad bei einem anderem plugin beschäftigt,
aber das was ihr schreibt hört sich vielversprechend an.

ich danke euch und werde es sobald es geht testen


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