Hallo zusammen,
ich bekam die Aufgabe, Daten aus nem SQL-Server nach Excel zu bringen. Leider ist das nicht alles:
Es sollen alle zusammmengehörigen Daten (resnr) in 1 Exceldatei gebracht werden, die dann auch resnr.xls heißt. Danach soll eine neue XLS-Datei geschrieben werden mit der neuen resnr als Titel und dem entsprechenden Inhalt.
die Abfrage und die Schleife ist mir klar, aber am Export scheiterts.
ich poste mal das script mit dr Bitte um Hilfe:
DECLARE @hr int -- Returncode der sp_OA... Aufrufe
declare @pfad varchar(255)
set @pfad = 'c:\'
DECLARE @katalog int -- Objektvariable für ADOX.Catalog
DECLARE @verbindung int -- Objektvariable für ADO.Connection
DECLARE @dbname varchar(255) -- Name der temporären Access-Datenbank
DECLARE @conString varchar(512) -- Verbindungszeichenfolge für Access-Datenbank
DECLARE @quelle varchar(255) -- Hilfsfeld für Fehlerbehandlung
DECLARE @beschreibung varchar(255) -- Hilfsfeld für Fehlerbehandlung
DECLARE @dummy int -- Dummy Output Parameter
DECLARE @Excel_Mappe varchar(255) -- Vollständiger Name der Ziel Excelmappe
DECLARE @tabelle varchar(255) -- Name der zu exportierenden Tabelle
DECLARE @besitzer varchar(255) -- Besitzer der zu exportierenden Tabelle
DECLARE @exec varchar(4000) -- Hilfsvariable für dynamische Ausführungen
declare @sqltext varchar(200)
declare @werkzeugauswahl varchar(255) -- Variable, die das aktuelle werkzeug aus dem cursor liest
declare werkzeugcur cursor fast_forward for
select res_nr from hydra.dbo.Werkzeuge_PLM
order by res_nr
-- Erzeugen eines ADOX-Katalog Objekts
EXEC @hr = master.dbo.sp_OACreate 'ADOX.Catalog', @katalog OUTPUT
IF @hr <> 0 -- Fehlerbehandlung
BEGIN
EXEC sp_OAGetErrorInfo @katalog, @quelle OUTPUT, @beschreibung OUTPUT
RAISERROR ( 'Fehler beim Erstellen des ADOX.Catalog Objekts: %s', 10 , -1, @beschreibung)
END
-- Zufälliges Erzeugen eines Datenbank-Namens
SET @dbname = @pfad + CAST(newid() AS varchar(100)) + '.MDB'
-- Erstellen der Verbindungszeichenfolge
SET @conString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + @dbname
-- Erstellen einer neuen (leeren) Access-Datenbank
-- Dieser Schritt ist notwendig, da nur über eine Verbindung zu einer Access-Datenbank
-- die benötigte Jet-Funktionalität zur Verfügung steht
EXEC @hr = master.dbo.sp_OAMethod @katalog, 'Create',
@dummy output,
@conString
print @conString
print @dummy
print @hr
IF @hr <> 0 -- Fehlerbehandlung
BEGIN
EXEC sp_OAGetErrorInfo @katalog, @quelle OUTPUT, @beschreibung OUTPUT
RAISERROR ( 'Fehler beim Erstellen der Access-Datenbank %s: %s', 10 , -1, @dbname, @beschreibung)
END
-- Variable @verbindung auf die Eigenschaft "ActiveConnection" des Katalog-Objekts setzen
EXEC @hr = master.dbo.sp_OAGetProperty @katalog, 'ActiveConnection', @verbindung OUTPUT
IF @hr <> 0 -- Fehlerbehandlung
BEGIN
EXEC sp_OAGetErrorInfo @verbindung, @quelle OUTPUT, @beschreibung OUTPUT
RAISERROR ( 'Fehler beim Zugriff auf Access-Datenbank %s: %s', 10 , -1, @dbname, @beschreibung)
END
open werkzeugcur
fetch next from werkzeugcur into @werkzeugauswahl
WHILE @@FETCH_STATUS = 0
BEGIN
set @sqltext = select * from dbo.GW_Werkzeugview_pro_Res_nr where dbo.GW_Werkzeugview_pro_Res_nr.res_nr = @werkzeugauswahl
select res_nr from dbo.GW_Werkzeugview_pro_Res_nr
where dbo.GW_Werkzeugview_pro_Res_nr.res_nr = @werkzeugauswahl
SET @exec = @sqltext + ' INTO [Excel 8.0;Database=' + @pfad + @werkzeugauswahl + '.xls].[' + @werkzeugauswahl+ '] FROM [ODBC;Driver=SQL Server;Database=blabla;Server=blabla;Trusted_Conne ction=Yes;].[' + @werkzeugauswahl + '.xls]'
EXEC @hr = master.dbo.sp_OAMethod @verbindung, 'Execute', @dummy output, @exec
IF @hr <> 0 -- Fehlerbehandlung
BEGIN
EXEC sp_OAGetErrorInfo @verbindung, @quelle OUTPUT, @beschreibung OUTPUT
RAISERROR ( 'Fehler beim Export: (%s): %s', 10 , -1, @exec, @beschreibung)
END
FETCH NEXT FROM werkzeugcur INTO @werkzeugauswahl
end
Hab das meiste aus nem Forum rauskopiert.. und kapier die Syntax beim execute nicht :-(
Also dieser teil:
SET @exec = @sqltext + ' INTO [Excel 8.0;Database=' + @pfad + @werkzeugauswahl + '.xls].[' + @werkzeugauswahl+ '] FROM [ODBC;Driver=SQL Server;Database=blabla;Server=blabla;Trusted_Conne ction=Yes;].[' + @werkzeugauswahl + '.xls]'
Bitte klärt mich mal auf :-/
dankeschön
ich bekam die Aufgabe, Daten aus nem SQL-Server nach Excel zu bringen. Leider ist das nicht alles:
Es sollen alle zusammmengehörigen Daten (resnr) in 1 Exceldatei gebracht werden, die dann auch resnr.xls heißt. Danach soll eine neue XLS-Datei geschrieben werden mit der neuen resnr als Titel und dem entsprechenden Inhalt.
die Abfrage und die Schleife ist mir klar, aber am Export scheiterts.
ich poste mal das script mit dr Bitte um Hilfe:
DECLARE @hr int -- Returncode der sp_OA... Aufrufe
declare @pfad varchar(255)
set @pfad = 'c:\'
DECLARE @katalog int -- Objektvariable für ADOX.Catalog
DECLARE @verbindung int -- Objektvariable für ADO.Connection
DECLARE @dbname varchar(255) -- Name der temporären Access-Datenbank
DECLARE @conString varchar(512) -- Verbindungszeichenfolge für Access-Datenbank
DECLARE @quelle varchar(255) -- Hilfsfeld für Fehlerbehandlung
DECLARE @beschreibung varchar(255) -- Hilfsfeld für Fehlerbehandlung
DECLARE @dummy int -- Dummy Output Parameter
DECLARE @Excel_Mappe varchar(255) -- Vollständiger Name der Ziel Excelmappe
DECLARE @tabelle varchar(255) -- Name der zu exportierenden Tabelle
DECLARE @besitzer varchar(255) -- Besitzer der zu exportierenden Tabelle
DECLARE @exec varchar(4000) -- Hilfsvariable für dynamische Ausführungen
declare @sqltext varchar(200)
declare @werkzeugauswahl varchar(255) -- Variable, die das aktuelle werkzeug aus dem cursor liest
declare werkzeugcur cursor fast_forward for
select res_nr from hydra.dbo.Werkzeuge_PLM
order by res_nr
-- Erzeugen eines ADOX-Katalog Objekts
EXEC @hr = master.dbo.sp_OACreate 'ADOX.Catalog', @katalog OUTPUT
IF @hr <> 0 -- Fehlerbehandlung
BEGIN
EXEC sp_OAGetErrorInfo @katalog, @quelle OUTPUT, @beschreibung OUTPUT
RAISERROR ( 'Fehler beim Erstellen des ADOX.Catalog Objekts: %s', 10 , -1, @beschreibung)
END
-- Zufälliges Erzeugen eines Datenbank-Namens
SET @dbname = @pfad + CAST(newid() AS varchar(100)) + '.MDB'
-- Erstellen der Verbindungszeichenfolge
SET @conString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + @dbname
-- Erstellen einer neuen (leeren) Access-Datenbank
-- Dieser Schritt ist notwendig, da nur über eine Verbindung zu einer Access-Datenbank
-- die benötigte Jet-Funktionalität zur Verfügung steht
EXEC @hr = master.dbo.sp_OAMethod @katalog, 'Create',
@dummy output,
@conString
print @conString
print @dummy
print @hr
IF @hr <> 0 -- Fehlerbehandlung
BEGIN
EXEC sp_OAGetErrorInfo @katalog, @quelle OUTPUT, @beschreibung OUTPUT
RAISERROR ( 'Fehler beim Erstellen der Access-Datenbank %s: %s', 10 , -1, @dbname, @beschreibung)
END
-- Variable @verbindung auf die Eigenschaft "ActiveConnection" des Katalog-Objekts setzen
EXEC @hr = master.dbo.sp_OAGetProperty @katalog, 'ActiveConnection', @verbindung OUTPUT
IF @hr <> 0 -- Fehlerbehandlung
BEGIN
EXEC sp_OAGetErrorInfo @verbindung, @quelle OUTPUT, @beschreibung OUTPUT
RAISERROR ( 'Fehler beim Zugriff auf Access-Datenbank %s: %s', 10 , -1, @dbname, @beschreibung)
END
open werkzeugcur
fetch next from werkzeugcur into @werkzeugauswahl
WHILE @@FETCH_STATUS = 0
BEGIN
set @sqltext = select * from dbo.GW_Werkzeugview_pro_Res_nr where dbo.GW_Werkzeugview_pro_Res_nr.res_nr = @werkzeugauswahl
select res_nr from dbo.GW_Werkzeugview_pro_Res_nr
where dbo.GW_Werkzeugview_pro_Res_nr.res_nr = @werkzeugauswahl
SET @exec = @sqltext + ' INTO [Excel 8.0;Database=' + @pfad + @werkzeugauswahl + '.xls].[' + @werkzeugauswahl+ '] FROM [ODBC;Driver=SQL Server;Database=blabla;Server=blabla;Trusted_Conne ction=Yes;].[' + @werkzeugauswahl + '.xls]'
EXEC @hr = master.dbo.sp_OAMethod @verbindung, 'Execute', @dummy output, @exec
IF @hr <> 0 -- Fehlerbehandlung
BEGIN
EXEC sp_OAGetErrorInfo @verbindung, @quelle OUTPUT, @beschreibung OUTPUT
RAISERROR ( 'Fehler beim Export: (%s): %s', 10 , -1, @exec, @beschreibung)
END
FETCH NEXT FROM werkzeugcur INTO @werkzeugauswahl
end
Hab das meiste aus nem Forum rauskopiert.. und kapier die Syntax beim execute nicht :-(
Also dieser teil:
SET @exec = @sqltext + ' INTO [Excel 8.0;Database=' + @pfad + @werkzeugauswahl + '.xls].[' + @werkzeugauswahl+ '] FROM [ODBC;Driver=SQL Server;Database=blabla;Server=blabla;Trusted_Conne ction=Yes;].[' + @werkzeugauswahl + '.xls]'
Bitte klärt mich mal auf :-/
dankeschön
Comment