AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Anweisung vor "FOR SELECT" Block
Thema durchsuchen
Ansicht
Themen-Optionen

Anweisung vor "FOR SELECT" Block

Ein Thema von Jochen · begonnen am 14. Mär 2005 · letzter Beitrag vom 16. Mär 2005
Antwort Antwort
Jochen

Registriert seit: 14. Mär 2005
4 Beiträge
 
#1

Anweisung vor "FOR SELECT" Block

  Alt 14. Mär 2005, 14:19
Datenbank: Interbase • Version: 5 • Zugriff über: TIB_Cursor
Hallo zusammen,

ich habe folgendes Problem:

ich möchte per SQL Befehl über die IB_Cursor-Komponente eine Prozedur in der Datenbank verändern. Dazu verwende ich das folgende Code-Konstrukt:

SQL-Code:
ALTER PROCEDURE Test (Index CHAR(10))
RETURNS
(
  Wert1 FLOAT, WERT2 FLOAT, Diff FLOAT
)
AS
BEGIN
  IF (:Index = "") THEN SELECT anderenWert FROM Tabelle INTO :Index; (*)
  FOR SELECT A, B FROM Tabelle2
    WHERE (Tabelle2.Index = :Index)
    INTO :Wert1, :Wert2
  DO
  BEGIN
    Diff=- :Wert1 - :Wert2;
  END
END
Das merkwürdige ist nun, dass genau dieses Statement beim Ausführen im Interbase-Client ohne Fehlermeldung funktioniert. In Delphi hingegen wird nach dem Aufruf von
Delphi-Quellcode:
IB_Query.SQL.Text := ...;
IB_Query.prepare();
eine Exception geworfen.

Die Ursache hierfür muss in der Codezeile (*) liegen, da der Fehler ohne diese Abfrage nicht auftritt.
Allerdings weiß ich nicht, wie ich dieses Problem umgehen kann.
Meine Vermutung ist, dass es sich um ein Problem mit dem Trennzeichen ";" handelt.

Im Voraus bereits vielen Dank

Schöne Grüße
Jochen
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

Re: Anweisung vor "FOR SELECT" Block

  Alt 14. Mär 2005, 15:28
Hi Jochen,

du musst das folgendermaßen machen:
SQL-Code:
SET TERM ^ ;

ALTER PROCEDURE Test (Index CHAR(10))
RETURNS
(
  Wert1 FLOAT, WERT2 FLOAT, Diff FLOAT
)
AS
BEGIN
  IF (:Index = "") THEN SELECT anderenWert FROM Tabelle INTO :Index;
  FOR SELECT A, B FROM Tabelle2
    WHERE (Tabelle2.Index = :Index)
    INTO :Wert1, :Wert2
  DO
  BEGIN
    Diff=- :Wert1 - :Wert2;
  END
END

^

SET TERM ; ^
MfG
Stevie

P.S.: Willkommen in der DP!
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Jochen

Registriert seit: 14. Mär 2005
4 Beiträge
 
#3

Re: Anweisung vor "FOR SELECT" Block

  Alt 14. Mär 2005, 15:50
Hallo Stevie,

danke für die schnelle Antwort, aber es funktioniert bei mir leider nicht.

Der Befehl "Set term ^ ;" löst bei mir auch wieder eine Exception aus.

Ich forsche weiter.

Schöne Grüße
Jochen
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

Re: Anweisung vor "FOR SELECT" Block

  Alt 14. Mär 2005, 15:55
Zitat von Jochen:
Der Befehl "Set term ^ ;" löst bei mir auch wieder eine Exception aus.
Das ganze muss natürlich als Script laufen, bzw als Einzelbefehle...
Aber wie genau deine Komponente das abhandelt weiß ich leider nicht.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Lord_Stifterl

Registriert seit: 13. Dez 2002
Ort: Wien
175 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Anweisung vor "FOR SELECT" Block

  Alt 14. Mär 2005, 17:41
Hi,

probiers einfach mal mit

Delphi-Quellcode:
 IB_QUERY.Close;
 IB_QUERY.Unprepare;
 IB_QUERY.SQL[0] := 'ALTER PROCEDURE ....';
 IB_QUERY.Prepare;
 IB_QUERY.ExecSQL;
So mach ichs und das funzt einwandfrei. OK, nicht ganz so. Ich starte noch eine Transaction vor dem ExecSQL und danach schick ich noch ein Commit bzw. CommitRetaining je nach dem was danach passiert.

LG
Alex
  Mit Zitat antworten Zitat
Jochen

Registriert seit: 14. Mär 2005
4 Beiträge
 
#6

Re: Anweisung vor "FOR SELECT" Block

  Alt 16. Mär 2005, 15:53
Hallo zusammen,

leider funktionieren eure Vorschläge bei meiner Interbase-Variante nicht.

Habe es mittlerweile allerdings über Batch-Dateien geregelt, die ich von Delphi aus erstelle und aufrufe.
Ich zwar nicht so elegant, klappt aber.

Schönen Dank für eure Mithilfe

Gruß
Jochen
  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 00:36 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