AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi MS-SQL Procedure & Resultset???

MS-SQL Procedure & Resultset???

Ein Thema von Kedariodakon · begonnen am 8. Nov 2004 · letzter Beitrag vom 11. Nov 2004
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#1

MS-SQL Procedure & Resultset???

  Alt 8. Nov 2004, 08:55
So follgendes Problem:

Ich habe eine Procedure, welche ein paar Berechnungen durchführt und mir dann eine von 2 Temp Tabellen zurückgiebt...
Diese wurden errechnet und werden nach dem select gleich wieder gelöscht...
Entweder "select * from Temp_Output" oder "select * from Temp_Error" falls ein Fehler auftratt...

So in meinem Programm arbeite ich eigendlich bis jetzt nu mit der ADOConnection, nem ADODataset und einer ADOCommand Komponente, da ich bis jetzt nur Recordsets auswerten mußte...

damit ich aber die Tabelle von der Procedure anschaun kann, bräuchte ich aber noch eine DataSource und eine ADOQuery bzw. ADOTable...

Kann ich irgendwie die Procedure so umschreiben, dass ich meine Ergebnisstabelle als Recordsets zurückbekomm?
Dann bräucht ich auch nichts mehr ändern in meinem Programm...


ich hoff es hat wer Rat

Bye
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#2

Re: MS-SQL Procedure & Resultset???

  Alt 8. Nov 2004, 09:05
mach einfach als letztes statement ein Select auf deine tmp-tabelle und Du erhältst ein Recordset zurück...
Gruß
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#3

Re: MS-SQL Procedure & Resultset???

  Alt 8. Nov 2004, 09:08
In MSSQL kannst du deine SP nach folgender Syntax aufbauen:
SQL-Code:
create procedure Text
as
Select * from Temp
GO
In Delphi rufst du die SP mittels ExecSQL auf.

Gruß
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: MS-SQL Procedure & Resultset???

  Alt 8. Nov 2004, 09:25
Zitat von Leuselator:
mach einfach als letztes statement ein Select auf deine tmp-tabelle und Du erhältst ein Recordset zurück...
Gruß
Wie als letztes?
das sieht ATM so aus (bzw. so ähnlich )

Code:
...
If @ERROR = 1
Begin
  Select * From [Temp_ERROR]
End Else Begin
  Select * From [Temp_Output]
End
DROP TABLE [Temp_ERROR]
DROP TABLE [Temp_Output]
Das in Klammern sieht ein bisle anders aus...
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#5

Re: MS-SQL Procedure & Resultset???

  Alt 8. Nov 2004, 10:15
Also nur noch so am Rande, solltest du im Grund wirklich temporäre Tabellen in deiner SP benutzen (#TempTabelle). Denk immer dran daß mehrere Benutzer gleichzeitig die SP aufrufen können, und sich somit deine Eintragungen in der Temp Tabelle überschneiden können.
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: MS-SQL Procedure & Resultset???

  Alt 8. Nov 2004, 12:08
öhm das ist wahr ^^
So hab ich das noch nicht gesehen
Bin grad neu eingestiegen in der datenbank sache...

Wie erstelle ich so eine #Temptable?
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#7

Re: MS-SQL Procedure & Resultset???

  Alt 8. Nov 2004, 13:13
Zitat von Kedariodakon:
Wie erstelle ich so eine #Temptable?
Na rate mal
create table #temp ....
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: MS-SQL Procedure & Resultset???

  Alt 8. Nov 2004, 13:40
also nur ein # vor dem Tabellennamen?
Und die wird dann auch zerstört zum schluss? Brauch ich mich nicht drum zu kümmern?

BYE
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#9

Re: MS-SQL Procedure & Resultset???

  Alt 8. Nov 2004, 13:58
Zitat von Kedariodakon:
Und die wird dann auch zerstört zum schluss?
Da bin ich mir jetzt ehrlich gesagt nicht sicher. Ich glaube die wird zerstört sobald du deine Transaction abschliesst. Rufst du aber 2 mal die SP innerhalb der gleichen TA auf, bleibt sie glaube ich erhalten.

Gruß,
Tom
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#10

Re: MS-SQL Procedure & Resultset???

  Alt 8. Nov 2004, 15:51
So, wie Du es in Deinem 2. Post gezeigt hast, sollte es Dir ein Recordset zurückliefern. Wenn Du mit temporären Tabellen in Multi-Userumgebungen arbeitest, solltest Du Dir eine Routine schreiben, die eine eindeutig benamste Tabelle erzeugt. somit ist gewährleistet, dass Du immer allein (aus Sicht der SP) auf der Tabelle rumwerkelst. Allerdings mußt Du dann auf dynamic SQL zurückgreifen. Wenn Dir das neu ist, dann auch dazu ein kleines Beispiel. Viel Spass!
Beispiel:
SQL-Code:
-- erzeugt eindeutigen Tabellennamen
CREATE FUNCTION GetTmpTableName( @Tabelle sysname)
RETURNS varchar(2000)
AS
BEGIN
  DECLARE @TmpTable varchar(2000) OUTPUT
        , @i int

  SET @i = 0
  SET @TmpTable = '##Tmp_'+@Tabelle
  WHILE object_id('tempdb..'+@TmpTable, 'U') is not null BEGIN
    SET @i = @i+1
    SET @TmpTable = '##Tmp_'+@Tabelle+convert(varchar,@i)
  END
  RETURN (@TmpTable)
END

-- DemoSP für Dynamic SQL
CREATE PROCEDURE DoSomething
AS
BEGIN
  DECLARE @SQL nvarchar(4000) -- Statements für dynSQL
        , @PARA nvarchar(4000) -- Variablen für dynSQL
        , @TMP_TABELLE varchar(255) -- Temporäre Tabelle
        , @DerCursor Cursor -- dynamischer Cursor
        , @DeineFeldEinsVariable int -- irgendwas halt

  -- Aufruf der obigen Funktion, um eindeutigen Tabellennamen zu erhalten
  SET @TMP_TABELLE = GetTmpTableName('MeineTmpTabelle')
 
  -- Statement, um diese Tabelle zu erzeugen und mit Werten zu füllen
  SET @SQL = 'INSERT INTO '+@TMP_TABELLE+' SELECT FeldEins,* FROM BlaBla'
  -- ausführen
  EXEC @SQL

  --Statement, um einen dynamischen Cursor für diese Tabelle anzulegen
  SET @SQL = 'SET @DerCursor = CURSOR FOR
SELECT FeldEins
FROM
'+ @TMP_TABELLE+ '; Open @DerCursor'
  --Parameter für aufruf von sp_executesql erzeugen
  SET @PARA = '@DerCursor CURSOR OUTPUT'

  -- dynSQL ausführen
  EXEC sp_executesql @SQL, @PARA, @DerCursor

  -- mit dem dynamischen Cursor arbeiten
  FETCH NEXT FROM @DerCursor into @DeineFeldEinsVariable
  WHILE @@FETCH_STATUS = 0 BEGIN
    -- Mach was
    FETCH NEXT FROM @DerCursor into @DeineFeldEinsVariable
  END
  CLOSE @DerCursor
  DEALLOCATE @DerCursor

  -- einfache Abfrage auf die dyn. erzeugte temp. Tabelle
  SET @SQL = 'SELECT * FROM '@TMP_TABELLE'
EXEC @SQL

-- Tabelle löschen
SET @SQL =
'DROP TABLE '+@TMP_TABELLE
EXEC @SQL
END
Gruß
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 10:52 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