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 Temporäre SQL-Tabelle in Access nutzen

Mitglied: PCFJKG

PCFJKG (Level 1) - Jetzt verbinden

17.02.2008, aktualisiert 22.02.2008, 15554 Aufrufe, 7 Kommentare

Eine lokale temporäre Tabelle wird mit docmd.runsql (#table_name) erstellt. Wenn z.B. ein Kombinationsfeld mit me.Kombinationsfeld.rowsource = "SELECT ...... FROM #table_name" diese Tabelle nutzen soll wird gemeldet, dass die Abfrage die Datenquelle nicht finden kann. ...

Status: MS-Access 2000 (adp) ist hier mit MSSQL-SERVER 2000 verbunden.

Why ?

Vielen Dank


PCFJKG
Mitglied: misterdemeanor
19.02.2008 um 15:45 Uhr
Hallo,

docmd.runsql (#table_name)

Angenommen #table_name ist eine String Variable(so aber nicht in Deinem eigtl. Code) die das CREATE TABLE-Statement enthält, poste diesen einmal.

Ansonsten mal eine Anmerkung zum optionalen TEMPORARY in einem CREATE TABLE Statement:

Wenn eine TEMPORARY-Tabelle erstellt wird, ist sie nur in der Sitzung sichtbar, in der sie erstellt wurde. Sie wird automatisch gelöscht, wenn die Sitzung beendet wird. Der Zugriff auf temporäre Tabellen kann durch mehrere Benutzer erfolgen.

Quelle: MSDN

BG; Felix -misterdemeanor-
Bitte warten ..
Mitglied: PCFJKG
21.02.2008 um 05:40 Uhr
Danke für die Antwort. Hier ausführlicher:

DoCmd.RunSQL "IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '#T_Abs') DROP TABLE #T_Abs"

DoCmd.RunSQL "CREATE TABLE #T_Abs (Gruppe tinyint, Betrag decimal(7,2), Grund nvarchar(100),Vorzeichen char(1)) "

DoCmd.RunSQL "INSERT INTO #T_Abs (Gruppe,Betrag,Grund,Vorzeichen) SELECT " & _
"(1),([Betrag]),([Grund]),('-') " & _
"FROM T_Abset WHERE WeiterberechnetDatum = " & WeiterberechnetDatum & ""

- Beim 2. Aufruf von Create in einer Sitzung wird ein allgemeiner ERROR gemeldet (vermutlich weil #T_Abs nicht gelöscht wurde ?)

- Das Kombinationsfeld hat die Anweisung <Kombinationsfeldbezeichner>.RowSource = "SELECT * FROM #T_Abs"
und meldet ... Die auf diesem Formular oder Bericht angegebene Datensatzherkunft "SELECT * FROM #T_Abs" ist nicht vorhanden.

Für einen nochmaligen Hinweis wäre ich dankbar,

Mit freundlichen Grüßen

PCFJKG
Bitte warten ..
Mitglied: misterdemeanor
22.02.2008 um 05:54 Uhr
Hallo PCFJKG,

also Microsoft schreibt folgendes zu Deinem Problem: KB243532


Beim 2. Aufruf von Create in einer Sitzung wird ein allgemeiner ERROR gemeldet (vermutlich weil #T_Abs nicht gelöscht wurde ?)

Was Microsoft dazu sagt:

Wenn eine lokale temporäre Tabelle in einer gespeicherten Prozedur oder einer Anwendung erstellt wird, die von mehreren Benutzern gleichzeitig ausgeführt werden kann, muss SQL Server in der Lage sein, die von den verschiedenen Benutzern erstellten Tabellen zu unterscheiden. Zu diesem Zweck hängt SQL Server intern ein numerisches Suffix an alle Namen von lokalen temporären Tabellen an. Der vollständige, in der sysobjects-Tabelle in tempdb gespeicherte Name einer temporären Tabelle besteht aus dem in der CREATE TABLE-Anweisung angegebenen Tabellennamen und dem vom System generierten numerischen Suffix.

Hoffe das bringt Dich weiter.

BG, Felix -misterdemeanor-
Bitte warten ..
Mitglied: misterdemeanor
22.02.2008 um 09:37 Uhr
Konnte das ganze jetzt mal unter Access 2K testen. Allerdings nur gegen ein SQL Server 2005 Backend. Mit einer lokalen Temp Tabelle trat der gleiche Fehler auf.

Wenn Du eine globale Temp Tabelle (##T_Abs) verwendest sollte es funktionieren.

BG, Felix -misterdemeanor
Bitte warten ..
Mitglied: PCFJKG
22.02.2008 um 11:37 Uhr
Zunächst einmal Danke für die Hilfe.
##T_Abs als globale temporäre Tabelle funktioniert insoweit, dass das Kombinationsfeld die Tabelle als Rowsource nun erkennt.

Was ich nicht verstehe ist:
a) wieso funktioniert es mit globaler temporärer Tabelle und mit lokaler temporärer Tabelle nicht ?
b) In der SQL-SERVER Hilfe ist für CREATE TABLE auch beschrieben,

... Wenn eine lokale temporäre Tabelle in einer gespeicherten Prozedur oder einer Anwendung erstellt wird, die von mehreren Benutzern gleichzeitig ausgeführt werden kann, muss SQL Server in der Lage sein, die von den verschiedenen Benutzern erstellten Tabellen zu unterscheiden. Zu diesem Zweck hängt SQL Server intern ein numerisches Suffix an alle Namen von lokalen temporären Tabellen an. Der vollständige, in der sysobjects-Tabelle in tempdb gespeicherte Name einer temporären Tabelle besteht aus dem in der CREATE TABLE-Anweisung angegebenen Tabellennamen und dem vom System generierten numerischen Suffix. Damit das Suffix angefügt werden kann, darf table_name für eine lokale temporäre Tabelle nicht länger als 116 Zeichen sein. ...

Nur: wenn intern ein numerisches Suffix angehängt wird, wozu brauche ich bei Create dann einen Verweis auf den dbo ? Ausserdem sollen ja mehrere Nutzer diese ##Tabelle (oder auch die #Tabelle) nutzen und die sind in der Serverrolle bei dbo zugeordnet und bei VIEW's, SELECT - Anweisungen etc. wird im Quelltext auch nicht mit dbo.xxx gearbeitet, sondern die Tabellennamen werden ohne dbo angegeben. Im übrigen wird die ##Tabelle mit DROP TABLE ##Tabelle auch nicht gelöscht, obwohl es in der SQL-SERVER Hilfe heißt:

... Temporäre Tabellen werden automatisch gelöscht, wenn sie nicht mehr benötigt werden, es sei denn, sie wurden bereits explizit unter Verwendung von DROP TABLE gelöscht...

Vermutlich habe ich hier ein Verständnisproblem, aber mit ##Tabelle kann ich erst einmal weiterarbeiten. Vielleicht kann ich zunächst DROP durch DELETE ersetzen.

Nochmals Danke und - soweit Zeit und Lust vorhanden - die Bitte um einen Hinweise zum "Restproblem" im obigen Text.

Herzliche Grüße

PCFJKG
Bitte warten ..
Mitglied: misterdemeanor
22.02.2008 um 12:03 Uhr
Zunächst einmal Danke für die
Hilfe.

Gern geschehen. Hab ja auch selbst wieder was gelernt

a) wieso funktioniert es mit globaler
temporärer Tabelle und mit lokaler
temporärer Tabelle nicht ?

Das ist eine gute Frage. Es wird sicherlich eine Einscränkung von Jet oder wahrscheinlicher von Acces selbst sein. Eine klare Begründung habe ich auch nicht finden können.


Nur: wenn intern ein numerisches Suffix
angehängt wird, wozu brauche ich bei
Create dann einen Verweis auf den dbo ?

Den brauchst Du ja gar nicht. Das galt nur für die RowSource Eigenschaften eines Formulares/Berichtes in Access 2000. Das war mir auch erst beim testen aufgefallen. Insofern war der KB-Artikel Link für das Problem unrelevant.


Vielleicht kann ich zunächst DROP durch
DELETE ersetzen.

Versuche mal folgendes Statement:

01.
IF OBJECT_ID('tempdb..##T_Abs') IS NOT NULL DROP TABLE ##T_Abs
BG, Felix -misterdemeanor-
Bitte warten ..
Mitglied: PCFJKG
22.02.2008 um 14:54 Uhr
Wieso weiß ich das nicht von allein ?, denn

DoCmd.RunSQL "IF OBJECT_ID('tempdb..##T_Abs') IS NOT NULL DROP TABLE ##T_Abs"

funktioniert einwandfrei.

Danke und ein schönes Wochenende,

PCFJKG
Bitte warten ..
Ähnliche Inhalte
Datenbanken

Access 2010 SQL Tabellen Datensätze einfügen

gelöst Frage von Dr.CornwallisDatenbanken6 Kommentare

Liebe Gemeinde, ich habe 3 Formulare(Access 2010), die ersten beiden greifen direkt auf einen SQL Table zu(der Table liegt ...

Microsoft Office

ACCESS Tabellen vergleichen

gelöst Frage von abuelitoMicrosoft Office4 Kommentare

Hallo, ich habe eine ACCESS 2003 Datenbank mit 2 Tabellen. Jede Tabelle hat nur eine Spalte. Tabelle1 hat ca. ...

Datenbanken

Excel Tabelle in Access Datenbank

gelöst Frage von Dr.CornwallisDatenbanken9 Kommentare

Liebe Gemeinde, ich muss aus einer Excel Tabelle Daten in einen Access Table importieren, nun möchte ich die Excel ...

Datenbanken

Foto aktualisieren in SQL Tabelle

gelöst Frage von Dr.CornwallisDatenbanken2 Kommentare

Liebe Gemeinde, ich habe eine Access Datenbank auf einen SQL Server hochgeladen. In dieser Datenbank gibt es eine Tabelle ...

Neue Wissensbeiträge
Backup

2016 - Restore mit WBAdmin - iSCSI Device als Sicherungsziel

Erfahrungsbericht von Henere vor 1 TagBackup1 Kommentar

Servus zusammen, was mich eben einige graue Haare gekostet hat Server 2016. Ich habe meinem Server eine weitere M2 ...

Humor (lol)
(Part num your Hacked phone. +XX XXXXXX5200)
Erfahrungsbericht von Henere vor 3 TagenHumor (lol)8 Kommentare

Mein Handy hat aber ne ganz andere Endnummer. Muss ich mir jetzt Sorgen machen ? :-) Vielleicht betrifft es ...

Exchange Server

Letztes Update für Exchange 2016 CU9 war in gewisser Weise destruktiv

Erfahrungsbericht von DerWoWusste vor 4 TagenExchange Server9 Kommentare

Kurzer Erfahrungsbericht zu Exchange2016-KB4340731-x64 Der Exchangeserver hat wie gewöhnlich versucht, es in der Nacht automatisch zu installieren - abgesehen ...

Erkennung und -Abwehr

Neue Sicherheitslücke Foreshadow (L1TF) gefährdet fast alle Intel-Prozessoren

Information von Frank vor 4 TagenErkennung und -Abwehr3 Kommentare

Eine neue Sicherheitslücke, genannt Foreshadow (alias L1TF) wurde auf der Usenix Security 18 von einem Team internationaler Experten veröffentlicht. ...

Heiß diskutierte Inhalte
E-Mail
Deutsche e-Mail Adresse auf iPhone in Katar. Nur Probleme
gelöst Frage von vanTastE-Mail32 Kommentare

Moin, ich habe hier in Deutschland auf einem Exchange 2013 eine e-Mail Adresse (name@domain.de) für einen Kollegen in Katar ...

Windows Server
Domäne beitreten nicht möglich, unter VMWare windows Server 2016 Core
Frage von AmanuelWindows Server12 Kommentare

Ich habe auf meinem Mac unter VMWare Windows Server 2016 Core und Windows Server 2016 Desktopversion installiert. Beide Systeme ...

RedHat, CentOS, Fedora
OTRS 5 kann keine Mails mehr abrufen
gelöst Frage von opc123RedHat, CentOS, Fedora11 Kommentare

Hallo, OTRS kann keine Mails mehr abrufen. Verschicken ja. Dadurch kommen keine Tickets mehr rein. Gibt es Anlaufpunkte was ...

Windows Server
Server 2016 Autotiering Storage Space
Frage von HenereWindows Server11 Kommentare

Servus, ich habe jetzt ein StorageSpace auf einem Server 2016 in Betrieb zum Testen. 1x M2 mit 512GB (970pro) ...