AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL Cursor schließen
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Cursor schließen

Offene Frage von "smudo"
Ein Thema von smudo · begonnen am 6. Dez 2005 · letzter Beitrag vom 13. Dez 2005
Antwort Antwort
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#1

SQL Cursor schließen

  Alt 6. Dez 2005, 12:28
Datenbank: Interbase • Version: 6.1 • Zugriff über: egal
Hallo ,

ich verwende in einer SP im Interbase einen Cursor.
Von MSSQL-Server war ich es gewohnt, nach der Benutzung den Cursor wieder zu schließen und freizugeben.
Gibt es solche Befehle auch unter Interbase oder ist dieser Schritt hier nicht notwendig, da möglicherweise alle Cursor intern nur Fast-Forward deklariert und nach verlassen der Schleife freigegeben werden?

René
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: SQL Cursor schließen

  Alt 6. Dez 2005, 14:29
Hallo René,

mach immer zu mit CLOSE.

Grüße vom marabu
  Mit Zitat antworten Zitat
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#3

Re: SQL Cursor schließen

  Alt 6. Dez 2005, 15:30
Wie, CLOSE?

Einfach nur Close, und damit weiß Interbase, dass der Cursor zu schließen ist?

Hab leider meine SP schon entlastet und die Cursor-Funktionen in eine Delphi-Schleife umgesetzt, da ich sehr eigenartige Ergebnisse und letztlich auch Fehlermeldungen erhielt.

Aber fürs nächste Mal, danke
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: SQL Cursor schließen

  Alt 6. Dez 2005, 16:42
Nicht einfach nur CLOSE - den Cursor musst du natürlich benennen. Hast du keinen Zugriff auf die Kurzreferenz SQLREF.HLP?

SQL-Code:
DECLARE c CURSOR FOR SELECT * FROM tbl;
/* some code here */
CLOSE c;
marabu
  Mit Zitat antworten Zitat
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#5

Re: SQL Cursor schließen

  Alt 7. Dez 2005, 08:42
Sorry, es funzt so nicht.
Ich deklariere meinen Cursor so:

SQL-Code:
CREATE PROCEDURE CURSOR_TEST
RETURNS (SUMME INTEGER)
AS
DECLARE VARIABLE ZAHL INTEGER;
begin
  SUMME=0;
  for select t.zahl from table t
   into :ZAHL
   as CURSOR ZAHLCURSOR
   do
   begin
     SUMME=:SUMME+:ZAHL;
   end
  suspend;
end;
Zitat von marabu:
mach immer zu mit CLOSE.
close; close ZAHLCURSOR; close CURSOR ZAHLCURSOR;
funktioniert alles nicht.
Also mach ich den Beitrag wieder zu einer offenen Frage und verweise auf Punkt 1.

Gibt es in Interbase 6.1 sowas wie Cursor schließen und freigeben oder nicht?

Danke

René
  Mit Zitat antworten Zitat
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#6

Re: SQL Cursor schließen

  Alt 12. Dez 2005, 14:56
Hab leider immer noch nix dazu gefunden
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: SQL Cursor schließen

  Alt 12. Dez 2005, 16:41
Hallo René,

Zitat von smudo:
Ich deklariere meinen Cursor so:
SQL-Code:
CREATE PROCEDURE CURSOR_TEST
RETURNS (SUMME INTEGER)
AS
DECLARE VARIABLE ZAHL INTEGER;
begin
  SUMME=0;
  for select t.zahl from table t
   into :ZAHL
   as CURSOR ZAHLCURSOR
   do
   begin
     SUMME=:SUMME+:ZAHL;
   end
  suspend;
end;
das erste was mir auffällt ist, dass die Zeile AS CURSOR ZAHLCURSOR völlig überflüssig ist - lasse sie weg und alles funktioniert bestens. Nun ist das Beispiel ja vielleicht schlecht, da du für die Summierung wahrscheinlich sowieso keine stored procedure benötigen würdest, aber trotzdem: Warum machst du das so? Woher hast du diese Syntax? Kannst du mir einen Hinweis auf die Seite im Handbuch geben?

Grüße vom marabu
  Mit Zitat antworten Zitat
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#8

Re: SQL Cursor schließen

  Alt 13. Dez 2005, 09:09
Hallo marabu,

ich beziehe mich auf das Buch "Interbase Datenbankentwicklung mit Delphi" von Andreas Kosch.
Ich weiß nicht, ob ichs darf, aber ich zeige mal das (leider einzige) Beispiel zu Current Of und Cursor.

SQL-Code:
CREATE PROCEDURE CursorBsp AS
DECLARE VARIABLE temp;
BEGIN
  FOR SELECT p.CARGO
  FROM Table1 t, Table2 p
  WHERE p.MasterNumber = t.MasterNumber
  AND p.HouseNumber = t.HouseNumber
  AND p.ArrivalDate = t.ArrivalDate
  INTO :temp
  AS CURSOR TmpCursor
  DO
    UPDATE Table1 SET Origin = :temp
    WHERE CURRENT OF TmpCursor;
END
Das ist das Beispiel von Andreas Kosch. Mein Beispiel war natürlich nicht sehr sinnvoll, dafür benötige ich keinen Cursor. Ich habs nur schnell zusammengezimmert, weil ich alle Prozeduren schon auf Nicht-Cursor-Technik umgestellt hatte. Trotzdem interessiert es mich noch brennend für zukünftige Einsätze, wie ich im Interbase 6.1 besser einen Cursor definieren, verwenden und freigeben könnte.

Ist vielleicht jemand kreativer als ich und kann ein gutes Beispiel demonstrieren?

Danke

René
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: SQL Cursor schließen

  Alt 13. Dez 2005, 10:08
Hallo René,

das von dir zitierte Buch scheint mir ein leicht modifizierter reprint aus dem Jahr 1999 zu sein. Die vorgestellte Syntax funktioniert, wird aber in der Interbase 6 Language Reference nicht mehr aufgeführt - oder ich habe nicht genau genug gelesen. Ich gehe davon aus, dass ein auf diese Weise deklarierter Cursor nach Verlassen des FOR Statements nicht mehr existiert und du dich nicht um seine Freigabe kümmern musst. Welche anderen Möglichkeiten du beim Arbeiten mit einem Cursor hast, dazu würde ich vor allem die offizielle Dokumentation konsultieren: klick

Grüße vom marabu
  Mit Zitat antworten Zitat
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#10

Re: SQL Cursor schließen

  Alt 13. Dez 2005, 13:39
Vielen Dank marabu,

aber wie schon gesagt, am besten wäre mal ein kleines Beispiel für eine Prozedur mit Cursor-Funktion.
Ja, ja, ich will nicht nerven, ich habe unter dem Link nachgesehen, aber es trotzdem noch nicht auf die dort beschriebene Weise hinbekommen.
  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 08:38 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