AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

StoredProc

Ein Thema von Peeters · begonnen am 9. Aug 2005 · letzter Beitrag vom 11. Aug 2005
Antwort Antwort
Peeters

Registriert seit: 3. Dez 2002
Ort: Meerbusch
86 Beiträge
 
Delphi 2007 Enterprise
 
#1

StoredProc

  Alt 9. Aug 2005, 17:47
Datenbank: MS-SQL • Version: 2000 • Zugriff über: ADO
Hallo,
habe eine Frage zum Verständnis, habe diesen String in einer Gespeicherten Prozedure auf dem Server:
Delphi-Quellcode:
CREATE PROCEDURE SP_IMPORT_FORM
@FormNr VARCHAR(5) = NULL
AS
SELECT * FROM MPK_FORM WHERE FORMNR = @FormNr

IF @FormNr = ''
BEGIN
SELECT * FROM MPK_DEKOR
END
ELSE
BEGIN
SELECT * FROM MPK_SAMMEL
END
GO
möchte aus der Ergebnissmänge der SELECT-Anweisung eine IF-Abfrage machen die mir sagt, ob der Wert (@FormNr) auch wirklich in der Ergebnissmänge liegt! Da ich die SELECT-Anweisung nicht direkt vergleichen kann, habe ich erst einmal  @FormNr = '' dafür stehen.

Ist der Ansatz richtig oder liege ich völlig falsch?
Peeters
  Mit Zitat antworten Zitat
marabu

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

Re: StoredProc

  Alt 10. Aug 2005, 06:57
Hallo,

kannst du dein Problem etwas genauer beschreiben? Dein SP-Code macht für mich keinen Sinn.

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Marcel Gascoyne
Marcel Gascoyne

Registriert seit: 18. Nov 2003
Ort: Uetersen
271 Beiträge
 
Delphi 2005 Architect
 
#3

Re: StoredProc

  Alt 10. Aug 2005, 08:23
Vielleicht meinst Du das:

SQL-Code:
if exists(select <feldname> from <tabelle> where <feldname> = @FormNr)
begin
...
end
Gruß,
Marcel
Marcel Gascoyne
Der Fehler sitzt immer vor der Tastatur
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#4

Re: StoredProc

  Alt 10. Aug 2005, 08:27
So funktioniert es ...
Du musst prüfen ob die initiale Abfrage "SELECT * FROM MPK_FORM WHERE FORMNR = @FormNr" Datensätze zurückgibt ...

SQL-Code:
CREATE PROCEDURE SP_IMPORT_FORM
  @FormNr VARCHAR(5) = NULL
AS
-- versuche @FormNr in MPK_FORM zu finden
SELECT * FROM MPK_FORM WHERE FORMNR = @FormNr

-- wenn @@ROWCOUNT = 0 (also kein Datensatz zurückgegeben)
IF @@ROWCOUNT = 0
BEGIN
  -- Gib alle Spalten und alle Datensätze der Tabelle MPK_DEKOR zurück
  SELECT * FROM MPK_DEKOR
END
ELSE
BEGIN
  -- Gib alle Spalten und alle Datensätze der Tabelle MPK_SAMMEL zurück
  SELECT * FROM MPK_SAMMEL
END
GO
Die Variante von Marcel funktioniert auch, jedoch machst du dann einen zusätzlichen (unnötigen) Funktionsaufruf (EXISTS), den wir mit meiner Methode vermeiden können.
@@ROWCOUNT wird standardmäßig bei jedem INSERT, UPDATE, SELECT, DELETE zurückgegeben.
  Mit Zitat antworten Zitat
Peeters

Registriert seit: 3. Dez 2002
Ort: Meerbusch
86 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: StoredProc

  Alt 10. Aug 2005, 11:38
@Marcel: Wunderbar, dass ist genau was ich gesucht habe. Vielen Dank.

@jensw_2000: Bei deiner Variante bekomme ich nur die Ergebnismenge der SELECT-Abfrage raus, und nicht die in der IF-Abfrage sind.
Peeters
  Mit Zitat antworten Zitat
Peeters

Registriert seit: 3. Dez 2002
Ort: Meerbusch
86 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: StoredProc

  Alt 11. Aug 2005, 10:06
Habe jetzt ein neues Problem, wenn ich diese Prozedur

Delphi-Quellcode:
CREATE PROCEDURE SP_IMPORT_FORM
@FormNr VARCHAR(5) = NULL,
@FormBez VARCHAR(30) = NULL
AS
IF NOT EXISTS (SELECT * FROM MPK_FORM WHERE FORMNR = @FormNr)
BEGIN
  INSERT INTO MPK_FORM (FORMNR, BEZ_DEU) VALUES (@FormNr, @FormBez)
END
GO
ausführe, bekomme ich eine Fehlermeldung die lautet: "ADOStoredProc: CommandText gibt keine Ergebnismenge zurück".

Was heißt das?
Peeters
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

Re: StoredProc

  Alt 11. Aug 2005, 12:57
Zitat von Peeters:
Delphi-Quellcode:
CREATE PROCEDURE SP_IMPORT_FORM
@FormNr VARCHAR(5) = NULL,
@FormBez VARCHAR(30) = NULL
AS
IF NOT EXISTS (SELECT * FROM MPK_FORM WHERE FORMNR = @FormNr)
BEGIN
  INSERT INTO MPK_FORM (FORMNR, BEZ_DEU) VALUES (@FormNr, @FormBez)
END
GO
ausführe, bekomme ich eine Fehlermeldung die lautet: "ADOStoredProc: CommandText gibt keine Ergebnismenge zurück".
Du musst anstelle von ADOStoredProc.Open oder .Active := True die Procedure ADOStoredProc.ExecProc aufrufen!
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Marcel Gascoyne
Marcel Gascoyne

Registriert seit: 18. Nov 2003
Ort: Uetersen
271 Beiträge
 
Delphi 2005 Architect
 
#8

Re: StoredProc

  Alt 11. Aug 2005, 13:17
Zitat von Peeters:
Habe jetzt ein neues Problem, wenn ich diese Prozedur
ausführe, bekomme ich eine Fehlermeldung die lautet: "ADOStoredProc: CommandText gibt keine Ergebnismenge zurück".
Deine Procedure liefert auch keine Ergebnismenge, also entweder mit ExecSQL ausführen oder die Anzahl der Datensätze in der Procedure zurückliefern:


SQL-Code:
CREATE PROCEDURE SP_IMPORT_FORM
@FormNr VARCHAR(5) = NULL,
@FormBez VARCHAR(30) = NULL
AS
BEGIN
  IF NOT EXISTS (SELECT * FROM MPK_FORM WHERE FORMNR = @FormNr)
  BEGIN
    INSERT INTO MPK_FORM (FORMNR, BEZ_DEU) VALUES (@FormNr, @FormBez)
    SELECT ROWS = @@ROWCOUNT
  END
  ELSE
    SELECT ROWS = 0
END
GO

Gruß,
Marcel
Marcel Gascoyne
Der Fehler sitzt immer vor der Tastatur
  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 01:59 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