Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

GP, Tabelle als Variable zurückgeben

Frage Microsoft Microsoft Office

Mitglied: PCFJKG

PCFJKG (Level 1) - Jetzt verbinden

04.11.2008, aktualisiert 05.11.2008, 5588 Aufrufe, 4 Kommentare

Aus einer Tabelle sollen Zeilen mittels einer gespeicherten Prozedur ausgewählt und in einer Tabellenvariablen von dieser Prozedur zurückgegeben werden.

MS-Access-2000 Projekt, verbunden mit MS-SQL 2000 SERVER. In einem Formular des Access-Projektes sollen die Ergebnisse einer Abfrage in einem Listenfeld zur Verfügung stehen. Um ein hohes Tempo zu erzielen, wird diese Abfrage in einer gespeicherten Prozedur ausgeführt, dort werden auch die Selectionsparameter aus bestimmten anderen Tabellen ermittelt.. Zunächst hatte ich das Ergebnis der Abfrage in einer globalen temporären Tabelle ##Table gespeichert. Dabei nicht bedacht, daß diese bei allen angemeldeten Benutzern (meist 4 User gleichzeitig) im Netz sichtbar ist und somit ungewollt z.B. das Ergebnis der Abfrage des Users A in der Tabelle ##Table des Users B gespeichert wird und dort die Source des Listenfeldes ist. Versuche, mit lokalen Tabellen #Table zu arbeiten (das würde wohl das Problam auch lösen) sind daran gescheitert, daß #Table nicht vom Listenfeld gefunden wird. Nun hoffe ich, eine Variable - die als Tabelle definiert ist - zur Quelle des Listenfeldes zu machen und das diese dann nur vom jeweilig die gespeicherte Prozedur aufrufenden User "gesehen" wird.

Frage, wie definiere ich den Rückgabeparameter .... CreateParameter("TableName", ad (Table??) , adParamOutput ... ?? vor dem --> Execute der Prozedur und wie wird diese Tabelle in der gespeicherten Prozedur so deklariert, daß sie ein Rückgabewert als Tabelle wird ?

Falls jemand weiß, wie man die Aufgabe doch noch mit lokalen Tabellen #Table lösen kann, wäre das natürlich fast noch besser (?).

Vielen Dank im Voraus,

PCFJKG
Mitglied: Biber
04.11.2008 um 21:59 Uhr
Moin PCFJKG,

...daran gescheitert, daß #Table nicht vom Listenfeld gefunden wird.
Okay, das kann aber daran liegen, dass besagte 4 Benutzer denselben Namen "#Table" benutzen und MSSQL schlau wie Sau natürlich immer bei Bedarf eine Ziffer an den Tabellennamen "#Table" hängt. Blöd nur, wenn jemand auf genau diese Tabelle außerhalb der Stored Procedure zugreifen können soll.

--> #Tables haben nicht immer einen Namen, eher eine Namens-Pattern, einen Namensrumpf. Den exakten außerhalb der SP weisst Du nicht, Innerhalb der SP wird IMMER der richtig interpretiert, den Du angibst.
--> ##Tables gehen erst recht nicht ->hast Du ja selbst erläutert.

Bleiben CURSOR oder @variablen vom typ table.

Ich würde (wenn der Resultset nicht zu gross ist) über eine table-Variable gehen.

Also sinngemäß
01.
 CREATE PROCEDURE dbo.WTFduTust ( 
02.
@EinInPara NVARCHAR(50)) 
03.
, @NochnInpara int 
04.
, @deinOutput table OUTPUT 
05.
AS 
06.
......
In der SP selbst kanst Du dann nochmal ein
DECLARE @JezzInRuhe as (Column1, .....ColumnN) Primary key ...
machen und Deinen Resultset dort zwischenparken - Die Column-Angaben mit der gleichen syntax wi bei einem CREATE TABLE.

Da die @jezzInRuhe angelegte und befüllte lokale Variable ebenso vom Datentyp "table" ist wie auch@DeinOutput kannst Du gegen Ende der SP ein "SET @DeinOutput = @JezzInRuhe" abfeuern und bekommst den Resultset zurück.

Das war schon alles.

Grüße
Biber
Bitte warten ..
Mitglied: PCFJKG
05.11.2008 um 05:57 Uhr
Hallo Biber,

zunächst Dank für die Hilfe. Die Lösung mit der Table-Variablen scheint mir auch die "vernünftigste", scheitert momentan aber an der Deklaration. Mein Versuch in der SP lautet:
CREATE PROCEDURE "Test"
(
@EinInPara NVARCHAR(50),
@NochnInpara int,
@MeinOutput TABLE OUTPUT
)
AS
DECLARE @MyTableVar TABLE (Var1 int) /*usw*/
bringt ==> ADO-Fehler: Falsche Syntax in der Nähe des TABLE-Schlüsselwortes. Irgendetwas mache ich hier noch falsch (?). Noch eine Frage:
Mein Problem bei CreateParameter("TableName", ad (Table??) , adParamOutput ... ?? konnte ich auch noch nicht lösen, weil MS-ACCESS den adTable -Typ nicht kennt (adChar, adInt etc. schon), aber wie gebe ich beim Aufruf der GP den output-Parameter TABLE an ?

Ich verwende momentan z.B.:
Com.Parameters.Append Com.CreateParameter("BdsLand", adChar, adParamOutput, 2)
Com.Parameters.Append Com.CreateParameter("GeleseneZeile", adVarChar, adParamOutput, 90)

Com.CommandText = "P_Test"
Com.CommandType = adCmdStoredProc
Com.ActiveConnection = CurrentProject.Connection
Com.Execute

Aber der Versuch
Com.Parameters.Append TD.Com.CreateParameter("ÜbungsTabelle", ad ....) funktioniert nicht, da adTable nicht bekannt ist. Ich denke jedoch, daß ich diesen Ouotput-Parameter brauche, um die Table-Variable aus der SP außerhalb dieser verwenden zu können.
Ich würde mich freuen, wenn noch einmal Hilfe möglich wäre.

Danke und herzliche Grüße


PCFJKG
Bitte warten ..
Mitglied: Biber
05.11.2008 um 10:30 Uhr
Moin PCFJKG,

hmm, das ist für mich jetzt nicht erkennbar, welches der beiden TABLE-Schlüsselworte angemosert wird.
Am wahrscheinlichsten erscheint es mit, wenn bei der Deklaration der OUTPUT-Variablen auch noch die Feldbeschreibung erwartet werden würde.

Aber abgesehen davon - vielleicht denke ich hier auch zu sehr um die Ecke.
Eventuell wäre es ja doch einfacher, doch noch mal den Gedanken mit EINER ##Table aufzuwärmen.
Angenommen, es gäbe in der Tat nur eine ##Table namens ##FuerAlle mit den ermittelten Listbox-Werten, die sich je User aber unterscheiden.
Könnten die nicht auseinandergehalten werden durch eine zusätzliche Spalte "Userid" in dieser tabelle und einer entsprechenden WHERE-Clause beim Auslesen.
Würde eine Menge Gewürge ersparen...

Grüße
Biber
Bitte warten ..
Mitglied: PCFJKG
05.11.2008 um 11:39 Uhr
Hallo Biber,

Dank für die Anwort. Die Lösung mit der ##Tabelle funktioniert (ich habe als zunächst einfachste Lösung unsere Usernamen an den Tabellennamen "angehängt".)

Da ich noch nicht mit einer Tabellenvariablen gearbeitet habe, würde mich die Lösung – auch für andere Situationen – prinzipiell interessieren, nichts desto trotz geht es erst einmal weiter.

Momentan versuche ich noch (man gibt ja ncht so schnell auf) mit einer #Table eine Lösung zu finden, z.B.
Alter PROCEDURE "P_Test"
(
@MeinOutput nvarchar(255) OUTPUT
)
AS
IF OBJECT_ID('tempdb..#T_Test') IS NOT NULL DROP TABLE #T_Test
SELECT * INTO #T_Test FROM T_irgendeine

DECLARE Test_cursor CURSOR FOR SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = OBJECT_NAME(OBJECT_ID('tempdb..#T_Test'))

Dann vielleicht mit FETCH den Name lesen und mit @MeinOutput zurückgeben... ?

Funktioniert noch nicht, Rückgabe ist derzeit NULL, mal sehen ob ich es hinbekomme.

Nocheinmal danke für die schnelle Antwort und herzliche Grüße nach Bremen,

PCFJKG
Bitte warten ..
Ähnliche Inhalte
Microsoft Office
Bereich mit variablen Bereich in einer anderen Tabelle
gelöst Frage von mreskeMicrosoft Office7 Kommentare

Hallo ich stehe gerade mit folgendem Problem auf dem Schlauch und hoffe, jemand hat eine Idee: Ich möchte die ...

JavaScript
Javascript Cookie ablaufdatum zurückgeben
Frage von 94451JavaScript1 Kommentar

Hallo ihr pros :) ein Cookie mit Javascript erstellen ist nicht schwer. aber gibt es denn eine Möglichkeit mein ...

VB for Applications
Variable Tabelle kopieren und in neue Excel-Datei verschieben
gelöst Frage von Gimli3311VB for Applications5 Kommentare

Guten Zusammen, ich bin grad Praktikant bei einem Unternehmen und muss aus verschiedenen Excel Dateien die jeweils eine Tabelle ...

Windows Server
GP auf OU Computers
gelöst Frage von krodonWindows Server7 Kommentare

Hallo, ich kabe meine GP nach Anleitung von erstellt. Nun möchte ich aber eine Richtlinie auf die OU Computers ...

Neue Wissensbeiträge
Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 10 StundenInternet2 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 14 StundenDSL, VDSL1 Kommentar

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Windows 10

Microsoft bestätigt DMA-Policy-Problem in Win10 v1709

Information von DerWoWusste vor 14 StundenWindows 10

Wer sein Gerät mit der DMA-Policy absichert, bekommt evtl. Hardwareprobleme in v1709 von Win10. Warum? Weil v1709 endlich "richtig" ...

Verschlüsselung & Zertifikate

Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows

Information von ticuta1 vor 17 StundenVerschlüsselung & Zertifikate

Interessant Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows SSH-Kommando in CMD.exe und PowerShell

Heiß diskutierte Inhalte
Netzwerkmanagement
Mehrere Netzwerkadapter in einem PC zu einem Switch zusammenfügen
Frage von prodriveNetzwerkmanagement21 Kommentare

Hallo zusammen Vorweg, ich konnte schon einige IT-Probleme mit Hilfe dieses Forums lösen. Wirklich klasse hier! Doch für das ...

Windows Server
Anmeldung direkt am DC nicht möglich
Frage von ThomasGrWindows Server16 Kommentare

Hallo, ich habe bei unserem Server 2016 Standard ein Problem. Keine Ahnung wie das auf einmal passiert ist. Ich ...

Hardware
Links klick bei Maus funktioniert nicht
gelöst Frage von Pablu23Hardware16 Kommentare

Hallo erstmal. Ich habe ein Problem mit meiner relativ alten maus jedoch denke ich nicht das es an der ...

TK-Netze & Geräte
VPN-fähige IP-Telefone
Frage von the-buccaneerTK-Netze & Geräte14 Kommentare

Hi! Weiss noch jemand ein VPN-fähiges IP-Telefon mit dem man z.B. einen Heimarbeitsplatz gesichert anbinden könnte? Habe nur einen ...