ODBC MS SQL Datenbank erstellen

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
VarStr
Beiträge: 10
Registriert: Fr 3. Apr 2015, 01:10

ODBC MS SQL Datenbank erstellen

Beitrag von VarStr »

Hallo,

Mein Problem ist folgendes: Ich muss auf nem MS SQL Server ne neue Datenbank erstellen bzw löschen.
Ich verwende ne ODBC-Datenquelle. Tja und alle bisherigen Versuche von mir sind gescheitert.
Eigentlich dachte ich, dass ich nem Query einfach den Befehl 'CREATE DATABASE NamederDatenbank' zuweise und das über ExecSQL erledige.
Das macht er nicht. Ich führe den Befehl aber eigentlich über die Master-Datenbank aus und es wird eigentlich nur der CREATE DATABASE-Befehl ausgeführt, wesshalb mich die Fehlermeldung irritiert.

Fehlermeldung.png

Ja und nachdem ich ein wenig gesucht habe fand ich die procedure TODBCConnection.createDB, die aber auch nicht so funktioniert.
Das scheint für diese Art von Datenbank wohl nicht zu funktionieren.

Kann mir jemand helfen?

Gruß
VarStr

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: ODBC MS SQL Datenbank erstellen

Beitrag von hde »

Dann würde ich erst einmal die Transactions checken.
Und nebenbei, bei uns scheuen wir inzwischen die "OldDataBaseConnections" wie der Teufel das Weihwaser
Versuch mal Zeos ohne ODBC

VarStr
Beiträge: 10
Registriert: Fr 3. Apr 2015, 01:10

Re: ODBC MS SQL Datenbank erstellen

Beitrag von VarStr »

Danke für die schnelle Antwort

Kannst du mir das mit den Transactions genauer erklären? Was würdest du dir da anschauen? Ich bin da ehrlich gesagt ziemlich planlos.
Ich kann auf jeden Fall sagen, dass andere SQL-Befehle problemlos ausgeführt werden. Z.B. können diverse Tabellen erstellt und gelöscht werden.
Ich würde auch eher ungern auf Zeos umsteigen. Die Funktionalität, an der ich da arbeite ist Teil von nem größeren Projekt und das baut eigentlich komplett auf ne ODBC-Datenquelle auf.
Es müssen ja eigentlich nur noch diese 2 Funktionalitäten rein und ich wäre dann auch ziemlich froh, wenn ich das schnell und einfach abschließen kann.

Antrepolit
Beiträge: 340
Registriert: Di 12. Sep 2006, 08:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Re: ODBC MS SQL Datenbank erstellen

Beitrag von Antrepolit »

VarStr hat geschrieben:Danke für die schnelle Antwort

Kannst du mir das mit den Transactions genauer erklären? Was würdest du dir da anschauen? Ich bin da ehrlich gesagt ziemlich planlos.
Ich kann auf jeden Fall sagen, dass andere SQL-Befehle problemlos ausgeführt werden. Z.B. können diverse Tabellen erstellt und gelöscht werden.
Ich würde auch eher ungern auf Zeos umsteigen. Die Funktionalität, an der ich da arbeite ist Teil von nem größeren Projekt und das baut eigentlich komplett auf ne ODBC-Datenquelle auf.
Es müssen ja eigentlich nur noch diese 2 Funktionalitäten rein und ich wäre dann auch ziemlich froh, wenn ich das schnell und einfach abschließen kann.


Man muss bei Datenbanken zwischen DML (data Manipulation Language) und DDL (Data Definition Language) unterscheiden. Zu ersterer gehören SELECT, INSERT, UPDATE und DELETE-Statements. Zu DDL gehören CREATE TABLE, TRUNCATE TABLE etc. Während bei der DML Transaktionen von Bedeutung sind, sind Befehle der DDL nicht durch Transaktionen rückgängig zu machen. Was Transaktionen sind, sagt dir Google. Nun gibt es bei ODBC DInge, die man berücksichtigen muss. Ich bin aber sicher, dass ein wenig Suchen mit Google auch dazu Antworten liefert. Und auch wenn es "nur um zwei Funktionalitäten" geht, musst du dennoch deinen kram kennen und wissen, womit du es zu tun hast. Schließlich werden da noch mehr Fehler auftauchen und dann willst du ja nicht nochmal fragen müssen. :wink: Und ich denke, dass hde hier recht hat - ohne ODBC wäre das Problem vermumlich nicht aufgetaucht.
Grüße, Antrepolit

care only if your os is really burning

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: ODBC MS SQL Datenbank erstellen

Beitrag von hde »

Antrepolit hat geschrieben:Während bei der DML Transaktionen von Bedeutung sind, sind Befehle der DDL nicht durch Transaktionen rückgängig zu machen.

Absolut korrekt, aber wenn DML Transaktionen laufen / offen sind, kann es bei DDL Probleme geben.
z.B MODIFY TABLE während auf der gleichen Tabelle eine Transaktion nicht abgeschlossen ist.

VarStr hat geschrieben:baut eigentlich komplett auf ne ODBC-Datenquelle auf.

Du musst ja nicht die Datenbank wechslen sondern nur die Verbindung.

Versuch mal unter WIN-64 eine 32-bit-ODBC Verbindung stabil aufzubauen, je nach DB erzielst du beim Glückspiel mehr Treffer, oder du fummelst an jedem Client an den Windows-Internas

VarStr
Beiträge: 10
Registriert: Fr 3. Apr 2015, 01:10

Re: ODBC MS SQL Datenbank erstellen

Beitrag von VarStr »

Ja ich werde meine bemühungen in der Hisicht wohl aufgeben.

Ich habe folgendes gefunden, was wohl funktionieren würde.
http://wiki.freepascal.org/mssqlconn

Nur bin ich ein echter "Experte" und deswegen scheitere ich schon beim Einbinden der Bibliothek.
Ich habe dazu was gelesen, aber da meinte man nur, dass die in den Projektordner muss. Das funktioniert bei mir auf jeden Fall nicht.
Wo soll ich die denn hinmachen oder habe ich einfach nur was vergessen?

Antrepolit
Beiträge: 340
Registriert: Di 12. Sep 2006, 08:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Re: ODBC MS SQL Datenbank erstellen

Beitrag von Antrepolit »

Wo liegt denn das Problem? MSSQLConnection ist doch eine visuelle Komponente, die musst du doch nur anstelle der ODBCConnection in deinem Form platzieren und die Konfiguration setzen. Poste doch mal die genauen Fehlermeldungen statt vage Andeutungen zu machen.
Grüße, Antrepolit

care only if your os is really burning

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: ODBC MS SQL Datenbank erstellen

Beitrag von hde »

Die Meldung in seinem ersten Post meckert offenbar eine laufende Transaktion an
Gruß hde

VarStr
Beiträge: 10
Registriert: Fr 3. Apr 2015, 01:10

Re: ODBC MS SQL Datenbank erstellen

Beitrag von VarStr »

hde hat geschrieben:Die Meldung in seinem ersten Post meckert offenbar eine laufende Transaktion an

Das kann aber nicht sein. Ich habe extra ein "Testprojekt" angelegt. Da wird nur dieser eine Befehl übergeben und das wars dann auch schon.
Mir wurde da empfohlen, dass ich das Projekt einfach mit Adminrechten ausführen soll, was aber nichts gebracht hat.

Antrepolit hat geschrieben:Wo liegt denn das Problem? MSSQLConnection ist doch eine visuelle Komponente, die musst du doch nur anstelle der ODBCConnection in deinem Form platzieren und die Konfiguration setzen. Poste doch mal die genauen Fehlermeldungen statt vage Andeutungen zu machen.

also das Problem liegt darin, dass er die dblib.dll nicht finden kann. Wie gesagt habe ich bisher nur gelesen, dass ich die einfach in den Projektordner setzen sol und dann findet er die schon allein.
Das funktioniert aber nich. Hier die genaue Fehlermeldung:
Fehlermeldung.png
Fehlermeldung.png (8.31 KiB) 2680 mal betrachtet


Ich weiß noch geradeso, wie man ein Package hinzufügt, aber die .dll ist da wohl was ganz anderes.

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: ODBC MS SQL Datenbank erstellen

Beitrag von hde »

VarStr hat geschrieben:Ich kann auf jeden Fall sagen, dass andere SQL-Befehle problemlos ausgeführt werden. Z.B. können diverse Tabellen erstellt und gelöscht werden.


VarStr hat geschrieben:also das Problem liegt darin, dass er die dblib.dll nicht finden kann


Diese beiden Aussagen widersprechen sich total. Entweder .. oder ..

Hast du die Komponenten gewechselt?
Ein ODBC-Treiber wird instaliert .. die DLL braucht es bei MSSQLConnection ..

VarStr
Beiträge: 10
Registriert: Fr 3. Apr 2015, 01:10

Re: ODBC MS SQL Datenbank erstellen

Beitrag von VarStr »

hde hat geschrieben:Diese beiden Aussagen widersprechen sich total. Entweder .. oder ..

Hast du die Komponenten gewechselt?
Ein ODBC-Treiber wird instaliert .. die DLL braucht es bei MSSQLConnection ..

Ja ich habe gewehselt. Also mit der ODBC liefen alle Befehle, außer eben das CREATE / DROP DATABASE. Dazu gehört die erste fehlermeldung.
Jetzt habe ich ein Testprojekt erstellt, wo ich nur ne Datenbank erstellen will. Da versuche ich gerade die MSSQL Komponente zum laufen zu bringen. Dazu gehört dann meine letzte Fehlermeldung.
Er findet die DLL aber nicht, weil ich se nur in den Projektordner gelegt habe. Wie ich herausfinden konnte muss man die anscheinend noch in das Projekt einbinden. Dazu habe ich auch dieses ganz gute Tutorial gefunden:
http://de.wikibooks.org/wiki/Programmierkurs:_Delphi:_DLL-Programmierung

Nur werde ich daraus auch nicht so richtig schlau. Ich weiß ja nicht, welche Funktionen der DLL ich benötige bzw weiß ich nicht einmal, welche Funktionen die DLL überhaupt enthält.
Dann würde dass ja auch dafür sprechen, dass ich die Funktionen/ Proceduren ja selber aufufen muss. Das macht doch alles die Komponente, oder?
Ich bin da gerade ziemlich am verzweifeln :(

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: ODBC MS SQL Datenbank erstellen

Beitrag von hde »

VarStr hat geschrieben:Wie ich herausfinden konnte muss man die anscheinend noch in das Projekt einbinden. Dazu habe ich auch dieses ganz gute Tutorial gefunden:
http://de.wikibooks.org/wiki/Programmie ... rammierung


Auch das passt nicht zusammen. Dieses Tutorial hilft nur wenn du ohne Komponenten alles selbst coden willst.

Aber sorry, die MSSQLConnection verwenden wir nicht, da hab ich keine Erfahrung, aber sie wird funktionieren. Gib den Pfad mal bei den Projekteinstellung mit an. Da wir immer noch viel unter Delphi entwickeln verwenden wir nur die Zeos Komponenten und können so Module unter Delphi und Lazarus entwickeln bzw. supporten. Und da gibt's das Prob nicht.

Deine erste Fehlermeldung stammt vom ODBC-Treiber und der meckert eindeutig dein Transactionhandling an. Hast du die SQLTransaction eingebunden und ggf. wie?

VarStr
Beiträge: 10
Registriert: Fr 3. Apr 2015, 01:10

Re: ODBC MS SQL Datenbank erstellen

Beitrag von VarStr »

hde hat geschrieben:Auch das passt nicht zusammen. Dieses Tutorial hilft nur wenn du ohne Komponenten alles selbst coden willst.

OK das erklärt schon einmal einiges :oops:

hde hat geschrieben:Gib den Pfad mal bei den Projekteinstellung mit an.

Also das funktioniert leider nicht. Er findet es dennoch nicht.

hde hat geschrieben:Deine erste Fehlermeldung stammt vom ODBC-Treiber und der meckert eindeutig dein Transactionhandling an. Hast du die SQLTransaction eingebunden und ggf. wie?

Also das verstehe ich jetzt nicht so ganz. Also die SQLTransaction habe ich wie immer eigentlich über den Objektinspektor mit der ODBC Connection verbunden (also über die Eigenschaft Database).
Ja und dann natürlich auch das Query mit der SQLTransaction verbunden, wobei ich es auch schon über TODBCConnection.ExecuteDirect versucht habe.
Meinst du das oder habe ich da was vergessen?
Auf der anderen Seite lassen sich andere SQL-Befehle problemlos ausführen. Sogar CREATE / DROP TABLE funktioniert, was ja ebenfalls in den Bereich der DLL fällt.

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: ODBC MS SQL Datenbank erstellen

Beitrag von hde »

CREATE DATABASE ist schon etwas besonderes. Wie und wo bist du denn eingelogged?
Falls die Connection bereits in eine Datenbank führt kann man da natürlich keine weitere DB createn.
Und eine SQLTransactionkomponente nur einzubinden reicht natürlich auch nicht aus.

VarStr
Beiträge: 10
Registriert: Fr 3. Apr 2015, 01:10

Re: ODBC MS SQL Datenbank erstellen

Beitrag von VarStr »

Also ich nutze zum ausführen die master - Datenbank.
Also muss ich bei der Connection den Databasename ändern? Das habe ich schon probiert. Der bezieht sich ja aber auf die ODBC und wenn ich das ändere, dann führt er nichts aus.
Meinst du, dass ich über den befehl CreateDB eine Datenbank erstellen soll? Das habe ich schon versucht, aber das kommt mir auch komisch vor.
Immerhin bezieht sich die Eigenschaft Databasename ja auf die ODBC-Datenquelle, oder?
Und was sei bei der Transactionkomponente zu beachten? Also mehr, als das erst geschiderte habe ich mit der nicht gemacht.

Antworten