bergesel 10 Geschrieben 13. Mai 2008 Melden Teilen Geschrieben 13. Mai 2008 Hallo zusammen ich wieder mal, ich möchte gerne eine tabelle erstellen wen sie nicht vorhanden ist. dass heisst er soll mit dem PC name die Tabelle erstellen und die spalten sind dann gegeben. jetzt hab ich hier mal was gefunden und zusammen gestellt. nur der syntax ist hier bei if not exist nicht ganz klar und falsch! strComputer = "." set db = CreateObject("ADODB.Connection") db.Open("Provider=SQLOLEDB.1;Data Source=Server;UID=sa;PWD=xxx") sql = "use MeineDB;" db.Execute(sql) dim computername computername = strComputer IF NOT EXISTS (SELECT * FROM sysobjects WHERE id = object_id(N’[dbo].[Computername]‘) AND OBJECTPROPERTY(id, N’IsUserTable’) = 1) CREATE TABLE [dbo].[Computername] ( columns specification ); sql="CREATE TABLE Computername (Category int NOT NULL , ComputerNameEV varchar (30) NULL , Eventcode varchar (30) NULL , Message varchar (30) NULL ," sql=sql & "Recordnumber int NULL , Sourcename int NULL ," sql=sql & "timewritten int NULL , ntype int NULL , nuser int NULL );" db.execute sql danke um hilfe gruss bergesel Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 13. Mai 2008 Melden Teilen Geschrieben 13. Mai 2008 Zunächst: An der Stelle funktioniert das "IF NOT EXIST.." natürlich nicht! Ist ja SQL-Syntax, d.h. müsste entspr. "verpackt" werden. Weiterhin muss der Teil [dbo].[Computername] bzw. "Computername" auch durch die entspr. Variable ersetzt werden. Und diese ist in deinem Script momentan ein Punkt! Das geht natürlich nicht! Hier zur Anregung (ungetestet ;) ... sql= "IF NOT EXISTS (SELECT * FROM sysobjects WHERE id = object_id(N’" & strComputer & "‘) " sql=sql & "AND OBJECTPROPERTY(id, N’IsUserTable’) = 1) " sql=sql & "CREATE TABLE " & strComputer & " (Category int NOT NULL , ComputerNameEV varchar (30) NULL , Eventcode varchar (30) NULL , Message varchar (30) NULL ," sql=sql & "Recordnumber int NULL , Sourcename int NULL ," sql=sql & "timewritten int NULL , ntype int NULL , nuser int NULL );" Zitieren Link zu diesem Kommentar
bergesel 10 Geschrieben 13. Mai 2008 Autor Melden Teilen Geschrieben 13. Mai 2008 ...dachte ich doch das du mir eine antwort gibst! ;-) -danke aber die variable Computername versteht er so nicht *.* , dass er dies einfügen muss und als tabelle daraus erstellen soll? wie müsste ich sonst den computername als variable einfügen damit das script arbeiten kann? muss ich zuerst noch eine DNS Host abfrage machen und das resultat als variable weitergeben? danke Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 14. Mai 2008 Melden Teilen Geschrieben 14. Mai 2008 Computername bekommst Du z.B. mit: Set WshNetwork = WScript.CreateObject("WScript.Network") strComputer = WshNetwork.ComputerName Zitieren Link zu diesem Kommentar
bergesel 10 Geschrieben 14. Mai 2008 Autor Melden Teilen Geschrieben 14. Mai 2008 vielen dank habe ich getestet und dann mit WMI abfrage auch versucht. bekomme aber eine komische meldung zurück. "incorrect syntax near "€" " ob ich es mit deiner computer abfrage oder mit meiner mache. mein script nun so aus. strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") Set colItems = objWMIService.ExecQuery( _ "SELECT * FROM Win32_ComputerSystem",,48) For Each objItem in colItems strComputer = objItem.DNSHostName 'Set WshNetwork = WScript.CreateObject("WScript.Network") 'strComputer = WshNetwork.ComputerName set db = CreateObject("ADODB.Connection") db.Open("Provider=SQLOLEDB.1;Data Source=server;UID=sa;PWD=xxxx") sql = "use wartung;" db.Execute(sql) sql= "IF NOT EXISTS (SELECT * FROM sysobjects WHERE id = object_id(N’" & strComputer & "‘) " sql=sql & "AND OBJECTPROPERTY(id, N’IsUserTable’) = 1) " sql=sql & "CREATE TABLE " & strComputer & " (Category int NOT NULL , ComputerNameEV varchar (30) NULL , Eventcode varchar (30) NULL , Message varchar (30) NULL ," sql=sql & "Recordnumber int NULL , Sourcename int NULL ," sql=sql & "timewritten int NULL , ntype int NULL , nuser int NULL );" db.Execute (sql) next ...übrigens kannst du mir ein gutes buch empfehlen was solche sachen anbelangt? hab eins windows scripting aber mit sehr wenig SQL dazu! gruss – vielen dank habe ich getestet und dann mit WMI abfrage auch versucht. bekomme aber eine komische meldung zurück. "incorrect syntax near "€" " ob ich es mit deiner computer abfrage oder mit meiner mache. mein script nun so aus. strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") Set colItems = objWMIService.ExecQuery( _ "SELECT * FROM Win32_ComputerSystem",,48) For Each objItem in colItems strComputer = objItem.DNSHostName 'Set WshNetwork = WScript.CreateObject("WScript.Network") 'strComputer = WshNetwork.ComputerName set db = CreateObject("ADODB.Connection") db.Open("Provider=SQLOLEDB.1;Data Source=Server;UID=sa;PWD=xxxxxx") sql = "use wartung;" db.Execute(sql) sql= "IF NOT EXISTS (SELECT * FROM sysobjects WHERE id = object_id(N’" & strComputer & "‘) " sql=sql & "AND OBJECTPROPERTY(id, N’IsUserTable’) = 1) " sql=sql & "CREATE TABLE " & strComputer & " (Category int NOT NULL , ComputerNameEV varchar (30) NULL , Eventcode varchar (30) NULL , Message varchar (30) NULL ," sql=sql & "Recordnumber int NULL , Sourcename int NULL ," sql=sql & "timewritten int NULL , ntype int NULL , nuser int NULL );" db.Execute (sql) "hier soll der syntax fehler sein!" next ...übrigens kannst du mir ein gutes buch empfehlen was solche sachen anbelangt? hab eins windows scripting aber mit sehr wenig SQL dazu! gruss sry für doppelpost....netz ist ein wenig lahm und ich ungeduldig! Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 14. Mai 2008 Melden Teilen Geschrieben 14. Mai 2008 Kannst mal vor den db.execute ne Zeile "Msgbox sql" einfügen und nachschauen, wo das Euro-Zeichen sitzt? EDIT: Meine SQL-Kenntnisse hab ich eher aus dem Access/MSSQL/Oracle-Bereich. Wie wir Schwaben sagen: "Des isch so no gworrä" ;) Im Buch "Scripting für Administratoren" von Microsoft Press gibt's allerdings auch einiges zum Thema Datenbanken! Zitieren Link zu diesem Kommentar
bergesel 10 Geschrieben 14. Mai 2008 Autor Melden Teilen Geschrieben 14. Mai 2008 wen ich das mach so wie du sagst: Msgbox sql db.Execute (sql) bekomm ich die meldung expected end of statement Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 14. Mai 2008 Melden Teilen Geschrieben 14. Mai 2008 Ich sagte: ZEILE einfügen ;) Msgbox sql db.Execute (sql) ...da der db.excecute ja eh noch nicht funktioniert, kannst auch vorerst auskommentieren Msgbox sql ' db.Execute (sql) Zitieren Link zu diesem Kommentar
bergesel 10 Geschrieben 14. Mai 2008 Autor Melden Teilen Geschrieben 14. Mai 2008 so habe dies glaube ich richtig gemacht! :) so sieht meine Fehlermeldung aus: http://wowthunderstorm.wo.funpic.de/userfiles/printscreen.pdf hat das was mit uncode oder so was zu tun, kein plan für diese meldung Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 14. Mai 2008 Melden Teilen Geschrieben 14. Mai 2008 Ändere die ersten 2 Zeilen des sql-Codes mal folgendermassen: sql= "IF NOT EXISTS (SELECT * FROM sysobjects WHERE id = object_id('" & strComputer & "') " sql=sql & "AND OBJECTPROPERTY(id, 'IsUserTable') = 1) " Ich glaube, da waren die falschen Hochkommas drin! Zitieren Link zu diesem Kommentar
bergesel 10 Geschrieben 14. Mai 2008 Autor Melden Teilen Geschrieben 14. Mai 2008 ....habs gefunden! :) das problem war das, dass hochkomma das falsche war bei dem " N' bla bla" Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.