![]() |
Wie funktioniert SQL.LoadFromFile
Hallöchen zusammen,
ich weiß, dass dieses Thema schon einmal hier angesprochen wurde, nur die Antworten passen nicht so ganz zu meinem Problem. Ich möchte eigentlich gern generell mal wissen, was bei der Funktion SQL.LoadFromFile genau im Hintergrund läuft. Warum? Ich versuche auf diese Weise eine .sql-Datei auszuführen (per PL/SQL geschrieben mit declare, begin, end u.s.w.). Doch leider läuft das nicht so, wie ich gern hätte. Statt dessen wird wohl alles gelesen und interpretiert (auch Kommentare) und nach der Bedeutung von "Parametern" gefragt, bspw. wenn im SQL-Kommentar die Anweisung
SQL-Code:
steht.
spool C:\meinordner\meinlog.log
Werden beim Aufruf SQL.LoadFromFile grundsätzlich nur SQL-Anweisungen in der Form abgearbeitet, wie man sie auch bei SQL.ADD() reinschreibt?? Gibt es wenn ja einen anderen Weg aus Delphi heraus PL/SQL-Files ans Laufen zu bringen?? Bin echt ratlos... Gruß i_need_help |
Re: Wie funktioniert SQL.LoadFromFile
Zitat:
Gruß, |
Re: Wie funktioniert SQL.LoadFromFile
TQueryDescendant.SQL ist ja vom Typ TStrings. Also wird ein LoadFromFile nichts weiter machen, als den inhalt der Datei in die StringList zu laden. ;)
Zitat:
wenn du ähnliches bewerkstelligen willst, schaue dir mal die Packages DBMS_OutPut oder UTL_File an. |
Re: Wie funktioniert SQL.LoadFromFile
oh man, das habe ich fast befürchtet.
das heißt also, jedes einzelne Statement aus meinem sql-script packe ich in eine add()-Anweisung?? |
Re: Wie funktioniert SQL.LoadFromFile
Zitat:
Sonst wärst du wieder bei SQL.LoadFromFile angelangt. Nehmen wir an du hast das da:
SQL-Code:
Was hält dich davon ab, es in einen anonymen Block zu packen?
INSERT INTO X (Y, Z) VALUES (1, 2);
INSERT INTO X (Y, Z) VALUES (3, 4); INSERT INTO X (Y, Z) VALUES (5, 6);
SQL-Code:
begin
INSERT INTO X (Y, Z) VALUES (1, 2); INSERT INTO X (Y, Z) VALUES (3, 4); INSERT INTO X (Y, Z) VALUES (5, 6); end; |
Re: Wie funktioniert SQL.LoadFromFile
okay danke erst mal. ich probier mal ein bisschen rum.
eine weitere idee wär ja, aus delphi das sql-worksheet zu starten, die datei da reinzuladen und ausführen zu lassen... :) |
Re: Wie funktioniert SQL.LoadFromFile
Hallöchen nochmal,
nach langem Hin- und Herprobieren hab ich nun eine etwas andere Lösung gefunden. Dank des gut bestückten Forums hier, starte ich aus Delphi heraus einen Batch, der dann mein SQL auf der Windows-Shell ausführt. Verwendet hab ich dafür TCustomFileRun für das Starten der *.bat und in der *.bat starte ich mit sqlplus USER/passwort@Datenbank meinedatei.sql die SQL-Abfrage. Alles was nun noch fehlt ist, wie das geöffnete Shellfenster wieder geschlossen werden kann, da der "quit" oder "exit" Befehl im *.bat ignoriert wird (befinde mich ja nach sqlplus-Aufruf in der Kommandozeile von SQL Plus). Aber schon mal vielen Dank, stöbere immer wieder gern hier. :-D |
Re: Wie funktioniert SQL.LoadFromFile
Nachdem Du offenbar mit Oracle arbeitest: Hast Du schon mal die ohnehin empfehlenswerten ODAC-Komponenten von
![]() :coder: |
Re: Wie funktioniert SQL.LoadFromFile
Zitat:
![]() Mit einem Unterschied, die DOA Klassen sind sehr eng mit der OCI und dadurch mit dem OracleClient verschmolzen -> _wesentlich_ effizienteres Caching als bei CoreLabs. ;) |
Re: Wie funktioniert SQL.LoadFromFile
Ich verwende ODAC üblicherweise mit aktiver NET-Option, da unsere Kunden oft keinen Oracle-Client auf ihren Systemen installiert haben wollen.
:coder: |
Re: Wie funktioniert SQL.LoadFromFile
Hi zusammen,
danke erst einmal für die Tipps, ich werd mir das mal genauer ansehen. Meine gebastelte Konstruktion, einen Batch aufzurufen, der das Script ausführt, klappt schon recht gut, nur schließt sich danach leider das Dos-Fenster nicht (obwohl im BAT ein exit ganz am Ende steht). Das steht im Batch:
Delphi-Quellcode:
Liegts vielleicht daran, dass, wenn ich erst einmal mit "sqlplus"-Befehl im "SQL-Modus" bin, die Anweisungen aus dem Batch nicht mehr gelesen und ausgeführt werden?? Kann man eventuell im SQL-Script am Ende eine Anweisung schreiben, die die ausführende Applikation schließt oder sowas...
sqlplus USER/password@DB @beispiel.sql
exit Ich weiß, ist vielleicht etwas umständlich, aber dieser Weg muss doch auch gehen... Oder?! grüße von i_need_help :-D |
Re: Wie funktioniert SQL.LoadFromFile
Zitat:
Batch file:
Code:
SQL script:
c:\OraHomeSB\bin\SQLPLUS.EXE RobertG@SandBox @c:\SelSomeJunk
SQL-Code:
Ich habe gerade ein Delphi zu Hand, aber ich habe das ein oder andere Mal TFileRun benutzt.
SELECT RowNum
,Owner ,Table_Name FROM All_Tables WHERE RowNum <= 100; EXIT Die Kommandozeile fragt mich nach meinem Password, fragt die Daten ab und verschwindet, sollte per TFileRun genauso funktionieren. ;)
Delphi-Quellcode:
FileRun.FileName := 'C:\Miep.bat';
FileRun.Execute(); |
Re: Wie funktioniert SQL.LoadFromFile
@Rober_G: Ja, so funzt es!! :-D
Da Delphi allerdings die Batche (in denen meine SQL-Scripte aufgerufen werden) startet und dann sofort weiterläuft, ohne auf das Ende des Batches zu warten, gehe ich jetzt den Weg mit CreateProcess und WaitForSingleObject (das Forum sei Dank!). Und das läuft auch hervorragend!! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:34 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