MSSQL Datenbank: Tabellenname aus Zahlen
-
Ich bastele an einer Datenbank herum in die ich nicht hinein sehen kann. Ich kann jedoch in einer Anwendung auf jeder Form sehen auf welche Datenquelle zugegriffen wird. Manche Datenquellen vom Typ A heißen zB: Kunde {Name, Vorname, ...} oder Auto {Typ, Baujahr, Kennzeichen, ...}
Über eine Schnittstelle kann ich SQL Stmnts abgeben. Datenquellen vom Typ A sind Tabellen mit Spalten auf die man normal mit SELECT zugreifen kann.Nun sind da Datenquellen vom Typ B wie: #0000000345 {Farbe, Geschwindigkeit, ...}
Auf diese Datenquellen kann ich nicht zugreifen:SELECT * FROM [#0000000345]; Oder: SELECT * FROM [0000000345];
Die Schnittstelle sagt '0000000345' sei ein ungültiger Objektname.
In der Anwendung werden Typ A und B gleichwertig als Datenquellen für Forms benutzt. Wenn ich die Anwendung neu starte, dann ändern sich die Zahlen, ich vermute das sind temporäre Objekte. Hat jemand eine Idee was für welche das sind?
-
Dem SQL Server ist das grundsätzlich egal wie seine Tabellen heissen. Mal abgesehen davon dass Namen die mit "#" anfangen temporäre Objekte bezeichnen. Wüsste nicht dass es da Probleme mit Tabellennamen gibt die mit Ziffern anfangen.
Wenn du Probleme hast solltest du uns vielleicht verraten welche "Schnittstelle" das denn ist mit der du da arbeitest.
-
Das klingt logisch, weil die Tabellennamen mit den Zahlen bei jedem Neustart eine andere Zahl haben. Als temporärer Krempel der irgendwie generiert wird.
Den Namen der Applikation möchte ich nicht verraten. Ist ein Lösung von einem kleinen Systemhaus.
-
Ah, ok.
Naja, wenn es wirklich temporäre Tabellen sind, dann gibt es zwei Arten: welche die mit einem "#" anfangen und welche die mit "##" anfangen.
Die mit "##" sind global und die mit einem "#" sind Connection-spezifisch.D.h. auf die mit einem "#" kannst du auch nur von der Connection aus zugreifen die sie erstellt hat.
Das wird vermutlich der Grund sein warum es nicht funktioniert: du verwendest eine andere Connection.BTW: Falls du ADODB verwendest kann es sein dass du eine andere Connection verwendest ohne es zu wollen/mitzubekommen.
Und zwar wenn die "MARS" Option (Multiple Active Record Sets) nicht aktiv ist.
Wenn man ohne MARS ein Kommando rausstartet während man noch ein RecordSet offen hat, dann erzeugt ADODB im Hintergrund automatisch eine neue Connection mit der dann das neue Kommando ausgeführt wird. Weil ja ohne MARS eben nur ein aktives RecordSet pro Connection erlaubt ist.
Und von dieser neuen Connection aus kann man die temporären Objekte der ursprünglichen Connection natürlich nicht verwenden.Falls das der Grund ist kannst du entweder versuchen MARS zu aktivieren (was aber Nebeneffekte haben kann), oder sicherstellen dass kein RecordSet der Connection mehr offen ist bevor du das neue Kommando absetzt.
-
Es ist noch immer diese VM die ich zu reparieren versuche und in der Zwischenzeit muß ich Daten für Kollegen dort aus der MSSQL DB herausfischen. Die Lösung des Systemhauses bietet eine Degbug Schnittstelle an über die ich die SQL Stmnts absetzen kann, ich komme nicht auf Source Code Ebene heran um dort die Eigenschaften der DB Connection manipulieren zu können.