Forum: PC-Programmierung SQL-Befehl für Datenbankservertyp;


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von interrupt (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

zugegeben etwas OT, aber bei dem hier versammelten Sachverstand 
vielleicht trotzdem zu beantworten :

Gibt es einen SQL-Befehl, mit dem man den Typ einer Datenbankserver 
abfragen kann (also z.B. ob MSSQL, MySQL, Oracle etc.)
Soll in einem GNU-CPP-Programm unter Windows 64 Bit ausgeführt werden.

Danke, s.

: Verschoben durch Moderator
von Programmierer (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Wenn ich mich über das MySQL Protokoll mit einem DB-Server verbinde, 
kann ich davon ausgehen dass es sich um einen MySQL Server handelt. 
Gleiches gilt für MSSQL etc...

von interrupt (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Die Verbindung erfolgt über ODBC-Verbindungen zu zwei unterschiedlichen 
Datenbankservern, die (bisher) sowohl MSSQL als auch MySQL-Server sein 
können, und zwischen denen Daten gespiegelt werden sollen.

Da die unterschiedlichen Datenbankserver verschiedene Bezeichungen für 
die gleichen Datentypen verwenden (z.B. int / integer) müssen bei den 
Fallunterscheidungen für die notwendigen Überprüfungen die Typen der 
Datenbankserver bekannt sein.

von Markus F. (mfro)


Bewertung
0 lesenswert
nicht lesenswert
interrupt schrieb:
> Da die unterschiedlichen Datenbankserver verschiedene Bezeichungen für
> die gleichen Datentypen verwenden (z.B. int / integer) müssen bei den
> Fallunterscheidungen für die notwendigen Überprüfungen die Typen der
> Datenbankserver bekannt sein.

Eigentlich sollte ODBC genau das unnötig machen.

Falls man's trotzdem unbedingt machen will (oder muß), dann lieber per 
entsprechendem ODBC-Aufruf die Datenquelle abfragen statt per SQL:
SQLGetInfo(dbc, SQL_DBMS_NAME, (SQLPOINTER)dbms_name,
         sizeof(dbms_name), NULL);
SQLGetInfo(dbc, SQL_DBMS_VER, (SQLPOINTER)dbms_ver,
         sizeof(dbms_ver), NULL);

Den Datentyp INT sollten meiner blassen Erinnerung nach aber beide 
Datenbanksysteme kennen und exakt identisch implementieren?

von Rufus Τ. F. (rufus) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Markus F. schrieb:
> Eigentlich sollte ODBC genau das unnötig machen.

Bei Datentypen vermutlich meistens ja.
Aber bereits Banalitäten wie
select top 10 * from Tabelle order by Zeit desc

werden mitnichten von jeder SQL-Datenbank verstanden.

von Markus F. (mfro)


Bewertung
0 lesenswert
nicht lesenswert
Rufus Τ. Firefly schrieb:
> select top 10 * from Tabelle order by Zeit desc

nun, genau die Banalität versteht außer MSSQL keiner...

von Peter II (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Markus F. schrieb:
> nun, genau die Banalität versteht außer MSSQL keiner...

Limit versteht auch Oracle nicht.

Jeder SQL-Server hat Erweiterungen, sobald man sie nutzt legt man sich 
fest.

von Jens G. (jensig)


Bewertung
0 lesenswert
nicht lesenswert
Für sowas sollte man FETCH FIRST nehmen, was soweit ich weis, Standard 
SQL ist. Wenn das manche DBs nicht kennen - Pech.

>Eigentlich sollte ODBC genau das unnötig machen.

Genau ...
Andererseits hat ODBC aber auch viele interessante Funktionen, um eben 
solche Unterschiede zw. den Plattformen abzufragen (z.B. 
SQLGetTypeInfo), damit die Applikation (sofern intelligent genug) sich 
anpassen kann.

: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.