Entwickler-Ecke

Datenbanken - Probleme mit ADO und MySQL


lkz633 - Di 16.11.04 00:34
Titel: Probleme mit ADO und MySQL
Hallo,

habe eine bestehende Anwendung, diie auf MySQL mit ADO und MySQLProv zugreifen soll, die zu 100% früher funktioniert hat.

Dabei wurden SQL-select statements so ausgeführt: select * from datenbankname.tabellenname

Das klappt plötzlich nicht mehr, mit dem Vorsatz des Datenbanknamen
anscheinend schon gar nicht. Nach langem ausprobieren habe ich jetzt
herausgefunden, dass es mit select * from `tabellenname` klappt, also weder
mit einfachen noch doppelten Anführungszeichen.
Komischerweise klappt es zur Designzeit auch mit select * from tabellenname, zur Laufzeit aber nur mit dem Häcken.

Kann sich das jemand erklären? Hat MySQL komplett das Format geändert?
Wie komm ich auf den Vorbau mit dem Datenbanknamen, ging es früher nur so und jetzt nicht mehr?
Was übersehe ich?

Dank und Gruss
lkz633


highhatcompy - Di 16.11.04 12:15

Hallo, ich hatte mal ein ähnliches Problem. Das hing aber mit dem Tabellennamen zusammen und zwar hieß die Tabelle Order und hatte somit den gleichen Namen wie ein SQL Befehl, vieleicht hat dein Tabellenname auch eine Bedeutung in MySQL.

Viele Grüße Highhatcompy


neojones - Di 16.11.04 14:09
Titel: Re: Probleme mit ADO und MySQL
lkz633 hat folgendes geschrieben:
Kann sich das jemand erklären? Hat MySQL komplett das Format geändert?
Wie komm ich auf den Vorbau mit dem Datenbanknamen, ging es früher nur so und jetzt nicht mehr?


Nein, das Format ist seit 3.23 nicht geändert worden. Das mit der Klammerung in Akzenten ist bei mySQL schon immer üblich. Wahrscheinlich liegt es, wie highhatcompy schon sagte, an Datenbank- oder Tabellennamen. Immer, wenn Du geschützte Begriffe als Namen verwendest, muss die Klammerung erfolgen.

Wie funktioniert das mit dem Datenbank-Vorsatz? Genau wie immer, nur mit Akzenten:

`datenbankname`.`tabellenname`

Viele Grüße,

Matthias


lkz633 - Di 16.11.04 16:49

Habe im Namen einen Unterstrich bzw im Datenbanknamen einen Gedankenstrich, daran liegt es wohl.

Anscheined klappt es immer ohne Datenbankname, wiso hab ich dies damals hinzugefügt?

Wann braucht man ihn, wann nicht?

Danke und Gruss
lkz633

Edit1:
Datenbank1 hat einen Bindestrich im Namen, da klappt es auch ohne den Vorsatz, bei einer anderen Datenbank klappt es nur mit dem Datenbanknamen als Vorsatz,ansonsten kommt Tabelle nicht vorhanden.

In phpmyadmin klappt es immer ohne Datenbankname.

Ich bin verwirrt :shock:

Edit2:
Hab gerade in einer alten Anwendung nachgeschaut, die einwandfrei funktioniert, auch da wird das select stament ohne Datenbanknamen abgesetzt


lkz633 - Di 16.11.04 17:48

Ok, hier mal ne Auflistung:

(1) select * from bugs,components klappt
(2) select * from bugs klappt aber nicht
(3) select * from `bugs` klappt

(4) select * from bugs.bugs Klappt

Wiso klappt (1), (2) aber nicht?
In einer anderen Datenbank klappt auch (2), wiso?

Wann brauch ich den Datenbanknamen, wann nicht?

Gruss
lkz633


neojones - Di 16.11.04 18:45

Du solltest ihn immer dazu setzen, weil Du es Dir später leichter machst, wenn Du distributierte Systeme benutzt...


lkz633 - Di 16.11.04 21:08

Was heisst das? Datenbank auf entferntem Host? Das ist unabhänig.

Gruss
lkz633


neojones - Mi 17.11.04 10:12

Anwendungen, die auf einem Host mehrere Datenbanken benutzen. Das macht unter diversen Umständen durchaus Sinn, besonders bei sehr großen Projekten. Wir haben zum Beispiel so ein distributiertes System mit 4 Datenbanken zu je etwa 120 Tabellen laufen. Das ganze läuft seit neuestem auf einem mySQL-Cluster auf NDB-Basis auf 10 CPU's.


lkz633 - Mi 17.11.04 12:40

Auf besagten Servern sind bereits mehrere Datenbanken vorhanden.

Die Frage besteht also weiterhin, wann braucht man Datenbanknamen, wann nicht, wann Apostroph, wann nicht.

Gruss
lkz633