[SQL] Skript senden

sisela

Erfahrenes Mitglied
Hallo Leute,

Kann man mit der Funktion CDatabase::ExecuteSQL komplette Skripte senden.
Ich habe bisher immer nur einzelne SQL Befehle gesendet, das geht wunderbar. Aber kann ich auch beispielsweise ein 300 Zeilen langen SQL-Skript in dem allerhand Sachen gemacht werden mit dieser Funktion senden.

Für Anregungen bin ich bereit...
 
Laut Funktionsbeschreibung kann man damit nur einzelne SQL-Kommandos senden.
Es sein denn, es gibt ein entsprechendes SQL-Kommando, dem man eine Datei übergeben kann.
Vermutlich wird Dir nicht s anderes übrigbleiben, als Dein SQL-Skript auszulesen und die Kommandos einzeln zu verschicken.
Allerdings bin ich kein SQL-Experte.
 
Hi,
das mache ich ja schon aber Probleme gibts, wenn z.B. in diesem Skript auf andere DB zugegriffen wird. ExecuteSQL ist ja immer an eine DB gebunden.
Noch Ideen?
 
Vielleicht die andere DB öffnen, darauf arbeiten und dann wieder schließen? Dazu müßtest du natürlich das SQL-Kommando parsen vor dem Execute.
Hast Du es denn schonmal ausprobiert, ob es nicht doch auf die richtige DB zugreift? Wenn das ein SQL-Kommando ist und ExecuteSQL alle SQL-Kommandos ausführen kann, sollte es ja gehen. Wenn nur eine Teilmenge der SQL-Kommandos erlaubt ist (die Kommandos, die auf eine vorgegebene DB zugreifen), dann geht es nicht. Die Doku schreibt nichts darüber. Wie gesagt, ich bin kein Experte für SQL mit MFC, daher kann ich auch nur raten.
 
Hi,
das Problem ist, dass es beliebige Skripte sein sollen. Sprich, ich weiß nicht was der Inhalt dieser Skripte ist. Von daher ist das mit dem auseinandernehmen so eine Sache. Ich probiere gerade, das isql Tool zu integrieren. Vielleicht geht das einfacher. Aber ist natürlich nicht so schön ein Kommandozeilen-Tool zu benutzen.
 
Ich weiß nicht, was die CDatabase an Funktionen anbietet, daher nur ein Vorschlag, wie man sowas prinzipiell machen kann: das Skript als SP (stored procedure) in der Datenbank ablegen (sollte auch über die API möglich sein) und dann aufrufen. Hinterher kann man die SP ggf. wieder entfernen.
 
Kann ich ja mal probieren, allerdings muss ich erst sehen wie das gehen soll mit der stored procedure laden. Hast zufällig Code zur Hand? :)
 
Zurück