AGB  ·  Datenschutz  ·  Impressum  







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

No Such Table

Ein Thema von Delbor · begonnen am 28. Sep 2017 · letzter Beitrag vom 29. Sep 2017
Antwort Antwort
nahpets
(Gast)

n/a Beiträge
 
#1

AW: No Such Table

  Alt 29. Sep 2017, 09:05
Ausgehend von http://docwiki.embarcadero.com/Libra....GetTableNames waren in der Ursprungsversion die Parameter falsch gesetzt.

Wenn Du die Tabellennamen aus dem Schema ContentmasterData abfragen möchtest, dann musst Du ContentmasterData auch als Schemaname angeben, dies ist der zweite Parameter.
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.192 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: No Such Table

  Alt 29. Sep 2017, 12:28
Hi zusammen

Vielen Dank für eure Antworten!
Zitat:
Schemaname und Dateiname sind 2 unterschiedliche Dinge. Die Datei kann heißen wie sie will. Der Schemaname lautet dann als default "main" und kann sowieso weggelassen werden.
Wenn Du ihn bei der Abfrage verwendest, dann musst Du ihn zuvor mit attach definieren.
Ich hab, trotz Wikipedia, so meine Probleme mit der Unterscheidung <Schemaname-Catalogname>. Bei meinen ersten Versuchen mit Firedac gings darum, mittels GetSchemaName, bzw. GetCatalogName (damals noch unter MySQL) den Schema- oder Catalognamen abzurufen. Erhalten habe ich einen mit dem Datenbanknamen identischen String.

Zitat:
Wenn Du die Tabellennamen aus dem Schema ContentmasterData abfragen möchtest, dann musst Du ContentmasterData auch als Schemaname angeben, dies ist der zweite Parameter.
Ohne jetzt Wikipedia zu konsultieren, um zu prüfen, ob ich das jetzt wenigstens halbwegs intus habe:
Der Schemaname bezeichnet den Datenbanknamen inklusive des zugrundeliegenden Tabellen- und Felder - Aufbau-Schemas.
Der Catalogname hingegen nur den blossen Datenbanknamen. Richtig?

Zitat:
Wenn Du ihn bei der Abfrage verwendest, dann musst Du ihn zuvor mit attach definieren.
Mein bisheriges Verständnis von SQLite:
SQLite ist eine 'Anwendungsorientierte' (meine Definition), eben eingebettete Datenbank. Von daher ist von vornherein klar, welche Datenbank, welches Datenbankschema gemeint ist. Per Default eben 'main'. Wobei 'main' auch dann das aktuelle Schema ist, wenn ich der Verbindung mit 'ATTACH' eine weitere DB hinzugefügt habe - eine explizite Adressierung der hinzugefügten DB á la "Contentmasterdat.Bildtabelle" ist deshalb nicht zulässig.

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#3

AW: No Such Table

  Alt 29. Sep 2017, 13:06
Ich glaube, du verwechselst da was. Datenbankname und Datenbankschema sind was vollkommen unterschiedliches. Eine Datenbank kann mehrere Schemas enthalten (zumindest bei einigen Datenbanken wie MSSQL), bzw. sind die Schemas an Datenbank-Benutzer gebunden.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#4

AW: No Such Table

  Alt 29. Sep 2017, 15:59
Eine Datanbank kann n Schemas enthalten, ein Schema kann n Tabellen enthalten.

In der Regel meldet man sich an der Datenbank an und "landet" dann in dem der Anmeldung zugeordneten Schema. Dort kann man dann per select * from tabelle auf Tabellen zugreifen. Es wird dann die implizite Annahme gemacht, dass man eine Tabelle aus dem Anmeldeschema meint.

Möchte man auf eine Tabelle in einem anderen Schema zugreifen, wird der Schemaname mit im SQL angegeben:select * from schema.tabelle .

Manche Datenbanken unterstützen auch datenbankübergreifende Abfragen:select * from datenbank.schema.tabelle In diesem Zusammenhang wird zuweilen dann auch von Katalog gesprochen.

Wenn Du bei Deinem Programm eine Anmeldung hast, die Dich sofort in das Schema Contentmasterdata "bringt", kannst Du diese Angabe auch weglassen. Dies macht die Statements dann auch übersichtlicher.

Verwirrend wird es oft, wenn man in einer Datenbank ein Schema hat, das dem Datenbanknamen entspricht. Also ungefähr sowas: select * from Contentmasterdata.Contentmasterdata.tabelle Hier ist die Verwirrung fast immer vorprogrammiert.

Allerdings ist das zuweilen von Datenbank zu Datenbank auch schonmal individuell unterschiedlich.

Welche spezifischen Besonderheiten für sqlite gelten, weiß ich nicht.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

AW: No Such Table

  Alt 29. Sep 2017, 20:49
@Nahpets
In diesem Falle liegt das Problem wohl darin, daß Firedac eine Funktion zur Verfügung stellt (GetTableNames) die u.U. mißverständliche Parameternamen besitzt.
Deine Beispiele beziehen sich ja leider nur auf pures SQL, da weiß man natürlich was man hat.
ADO stellt etwas ähnliches zur Verfügung und leider ist die Ausgabe auch in diesem Falle nicht das was man auf den ersten Blick erwartet.
Daher ist das Vermeiden solcher Funktionen meiner Meinung nach unbedingt notwendig, will man zuverlässige Daten erhalten.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#6

AW: No Such Table

  Alt 29. Sep 2017, 21:32
Den Aufruf bzw. die Parameter der Prozedur GetTableNames
Delphi-Quellcode:
 FDConnection1.GetTableNames('NORTHWIND', 'DBO', 'ADQA%', '', ListBox1.Items,
   [osMy, osSystem, osOther], [tkTable, tkView]);
würd' ich mal so interpretieren: Zuerst der Name der Datenbank, dann das Schema und dann ggfls. ein Muster für die auszulesenden Tabellen.

Und wenn man nix angibt, bekommt man alle Tabellen aus dem aktuellen Schema der aktuellen Datenbank.

Eigentlich scheint das Verhalten im großen und ganzen meiner obigen Beschreibung zu entsprechend.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#7

AW: No Such Table

  Alt 29. Sep 2017, 21:56
Bei meinen ersten Versuchen mit Firedac gings darum, mittels GetSchemaName, bzw. GetCatalogName (damals noch unter MySQL) den Schema- oder Catalognamen abzurufen. Erhalten habe ich einen mit dem Datenbanknamen identischen String.
Catalog Name ist glaub ich für sqlite nicht bekannt. Nur Schemaname.

Ohne jetzt Wikipedia zu konsultieren, um zu prüfen, ob ich das jetzt wenigstens halbwegs intus habe:
Der Schemaname bezeichnet den Datenbanknamen inklusive des zugrundeliegenden Tabellen- und Felder - Aufbau-Schemas.
Der Catalogname hingegen nur den blossen Datenbanknamen. Richtig?
Hab nicht verstanden, was Du meinst.
Wikipedia ist da auch nicht empfehlenswert, wenn dann sqlite doku.


Mein bisheriges Verständnis von SQLite:
Von daher ist von vornherein klar, welche Datenbank, welches Datenbankschema gemeint ist. Per Default eben 'main'. Wobei 'main' auch dann das aktuelle Schema ist, wenn ich der Verbindung mit 'ATTACH' eine weitere DB hinzugefügt habe - eine explizite Adressierung der hinzugefügten DB á la "Contentmasterdat.Bildtabelle" ist deshalb nicht zulässig.
Naja wenn es klar wäre, gäb es kein Problem oder?
Main ist Default und kann weggelassen werden.
Alles andere kann attached werden und muss dann mit <schemaname>.<tabelename> angegeben werden.
Ich weiß nicht, ob es noch andere Verfahren gibt, einen Schemanamen zu definieren, ich kenne nur attach. Zulässig ist das bestimmt, denn dafür ist es ja da, bspw. auch zur Unterscheidung mehrere Schemata (nach mehrfachem attach Aufruf)
Gruß, Jo
  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 20:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz