Jump to content

SQL Tabellen


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

@Alle

 

gut dann entschuldige ich mich bei nils hoch-offiziell, für mein überreagiertes verhalten.

..habe mal die msgbox eingebaut. so wie es aussieht bleibt er bei nuser mit diesem fehler hängen: invalid use of null

 

strComputer = "[%ComputerName%]"

Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colRetrievedEvents = objWMIService.ExecQuery _
("Select * from Win32_NTLogEvent")

For Each objEvent in colRetrievedEvents

dim Category
dim ComputerNameEV
dim EventCode
dim Message
dim RecordNumber
dim SourceName
dim TimeWritten
dim nType
dim nUser

Category = objEvent.Category
ComputerNameEV = objEvent.ComputerName
EventCode = objEvent.EventCode
Message = objEvent.Message
RecordNumber = objEvent.RecordNumber
SourceName = objEvent.SourceName
TimeWritten = objEvent.TimeWritten
nType = objEvent.Type
nUser = objEvent.User     hier bricht er ab mit schreiben und bringt die meldung invalid use of null

Set db = CreateObject("ADODB.Connection")
db.Open("Provider=SQLOLEDB.1;Data Source=server; Trusted_Connection=Yes;User ID=sa;Password=xxxx;")
sql = "use wartung;"
db.Execute(sql)

 sql = "INSERT INTO " & strcomputer & "(Category,ComputerNameEV,Eventcode,Message,RecordNumber,SourceName,TimeWritten,nType,nUser)"
 sql = sql & "values ('" & Category & "','" & ComputerNameEV & "','" & EventCode & "','" & Message & "','" & RecordNumber & "','" & SourceName & "','" & TimeWritten & "','" & nType & "','" & nUser & "');"
 db.Execute(sql)
 db.close
next

Link zu diesem Kommentar

Moin,

 

gut dann entschuldige ich mich bei nils hoch-offiziell, für mein überreagiertes verhalten.

 

okay, angenommen. Kann ja mal vorkommen.

 

nUser = objEvent.User hier bricht er ab mit schreiben und bringt die meldung invalid use of null

 

Kann ich nicht bestätigen. Hier läuft das problemlos durch. (Allerdings habe ich "[%ComputerName%]" ersetzt durch ".", um eine gültige WMI-Ansprache zu erzeugen. Und ich habe alle Zeilen zur Datenbankansprache auskommentiert, mangels Datenbank - die WMI-Ansprache funktioniert jedenfalls.)

 

Du hast in deinem Originalskript nicht zufällig die Fehlerbehandlung abgeschaltet und dadurch evtl. versehentlich den Fehler der falschen Stelle zugeordnet?

 

Darüber hinaus sieht mir aber das SQL-Statement falsch aus:

 

sql = "INSERT INTO " & strcomputer & "(Category,ComputerNameEV,Eventcode,Message,RecordNumber,SourceName,TimeWritten,nType,nUser)"

 

Hinter INSERT INTO muss m.E. noch VALUES stehen:

 

sql = "INSERT INTO " & strcomputer & " VALUES(Category,ComputerNameEV,Eventcode,Message,RecordNumber,SourceName,TimeWritten,nType,nUser)"

 

Ich habe es jedenfalls noch nie ohne verwendet, und wenn ich die Syntaxbeschreibung richtig interpretiere, ist das Schlüsselwort nicht optional (da kann ich mich aber irren):

 

INSERT (Transact-SQL)

 

Ganz nebenbei: Vermutlich geht es dir darum, die Events besser auswerten zu können. Vielleicht kannst du dir den SQL-Server-Import sparen und mit dem Log Parser arbeiten, der dir eine mächtige SQL-Engine für das native Eventlogformat (sowie zahlreiche andere Formate) bietet:

 

.: www.kaczenski.de :.

 

Download details: Log Parser 2.2

 

Gruß, Nils

Link zu diesem Kommentar

...

Darüber hinaus sieht mir aber das SQL-Statement falsch aus:

 

Hinter INSERT INTO muss m.E. noch VALUES stehen:

...

 

Der INSERT ist so schon ok. "VALUES" steht in der nächsten Zeile ;)

Wenn man nur bestimmte Spalten ansprechen will, muss man die vorher angeben.

Allerdings fehlt in dem INSERT-String ein Leerzeichen vor der Klammer!

...strcomputer & "(Category...

Richtig wäre:

...strcomputer & " (Category...

Link zu diesem Kommentar

@nils

 

habe nun auch auf "." gewechselt um den gleichen stand zu haben.

nun bekomme ich den fehler incorrect syntax near '('. line 40

 

und wen ich nun noch logparser dazu nehme hab ich gar kein plan mehr und kann sicherlich dann die domäne wechseln :)

 

@cybquest dies habe ich angepasst oder stimmte schon :)

 

ist es möglich das im eventlog(massage) eine datei so gekennzeichnet ist z.B 'xxx.dll' das diese hochkomas den fehler zum schreiben in sql den fehler verursachen?

 

das script schreibt halt nur teilweise und die spalte nUser bleibt leer sollte auch nicht sein.

 

gruss

Link zu diesem Kommentar

Nu ja... der Hinweis "incorrect syntax near (..." würde ja schon auf ein fehlendes Leerzeichen hinweisen.

Vor "values" fehlt übrigens auch noch ein Leerzeichen!

Hier der kpl. korrigierte String:

Ggf. mal unterhalb nen Msgbox sql... ;)

sql = "INSERT INTO " & strcomputer & " (Category,ComputerNameEV,Eventcode,Message,RecordNumber,SourceName,TimeWritten,nType,nUser)"
sql = sql & " values ('" & Category & "','" & ComputerNameEV & "','" & EventCode & "','" & Message & "','" & RecordNumber & "','" & SourceName & "','" & TimeWritten & "','" & nType & "','" & nUser & "');"

Msgbox sql

Link zu diesem Kommentar

Moin,

 

Der INSERT ist so schon ok. "VALUES" steht in der nächsten Zeile ;)

 

... hust ... ja, manchmal sollte man die Augen öffnen.

 

wen ich nun noch logparser dazu nehme hab ich gar kein plan mehr

 

Nicht dazu, sondern stattdessen. Damit könntest du dir sehr viel von dem Ärger ersparen, den du beim SQL-Import hast. Denn es geht dir ja vermutlich eigentlich um die Auswertung, oder?

 

ist es möglich das im eventlog(massage) eine datei so gekennzeichnet ist z.B 'xxx.dll' das diese hochkomas den fehler zum schreiben in sql den fehler verursachen?

 

Nicht nur eine Datei, das kann überall im Text stehen. Das müsstest du also in deinem Skript noch maskieren.

 

die spalte nUser bleibt leer

 

Events müssen keine User-Angabe haben, also solltest du das abfangen (wie auch bei anderen Feldern). Gut möglich, dass da die "invalid use of NULL"-Meldung herkam.

 

Gruß, Nils

Link zu diesem Kommentar

Moin,

 

meldung:

INSERT TO . (Category, usw,nuser) values ('0',alle werte,'information',");

 

danach fehlermeldung incorrect syntax near (

 

also, nimm's mir bitte nicht übel, aber ich habe trotzdem den Eindruck, dass dir etwas der Hintergrund fehlt, um deine anspruchsvolle Aufgabe anzugehen. Vielleicht wäre Log Parser doch etwas für dich?

 

Du hast jetzt den Computernamen im Skript auf "." gesetzt. Damit funktioniert die WMI-Abfrage, weil WMI den Punkt als Platzhalter für den lokalen Rechner akzeptiert. Nun geht aber dein SQL-Statement nicht mehr - kann es auch nicht. Guck es dir mal an: Du versuchst, Daten in eine Tabelle namens "." zu schreiben. Die gibt es natürlich nicht (kann es auch nicht, ist kein gültiger Name).

 

Du musst deinem Skript also einen gültigen Computernamen übergeben. Und damit sind wir irgendwie wieder am Anfang.

 

Als kleines Goodie: So liest man in VBS den lokalen Computernamen aus:

 

set objNetwork = CreateObject("WScript.Network")
strComputer = objNetwork.ComputerName
WScript.echo strComputer

 

Gruß, Nils

Link zu diesem Kommentar

@bergesel

Also weisst Du, ein wenig erschüttert bin ich jetzt schon!

Das Thema "Computername" haben wir eigetlich zur Genüge durchgenudelt, dass du da jetzt hättest selber draufkommen müssen, oder?

Lies doch bitte die Hinweise, die wir dir geben, aufmerksam durch.

 

Genau DAS, was Nils da beschreibt, ist das Problem. Du braucht einen korrekten Computernamen für die SQL-Strings. Keinen Punkt oder sonst einen Platzhalter.

Link zu diesem Kommentar
  • 2 Wochen später...

Hallo zusammen

 

wollte euch nur noch meine lösung presentieren ;-)

 

On Error Resume Next
strComputer = "[%ComputerName%]"

'strComputer = "."


 Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
 Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem",,48)
 For Each objItem in colItems
   'Variablen setzen
   dim ComputerName

   'Domäne: DNSHostname, sonst Name
   on error resume next
   ComputerName = objItem.DNSHostName
   if err > 0 then ComputerName = objItem.Name
   on error goto 0
   'Ende der Hostabfrage
   'msgbox computername
next

Set objWMIService = GetObject("winmgmts:" _
   & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colRetrievedEvents = objWMIService.ExecQuery _
   ("Select * from Win32_NTLogEvent")

For Each objEvent in colRetrievedEvents

dim Category
dim ComputerNameEV
dim EventCode
dim Message
dim RecordNumber
dim SourceName
dim TimeWritten
dim nType
dim nUser

Category = objEvent.Category
ComputerNameEV = objEvent.ComputerName
EventCode = objEvent.EventCode
Message = objEvent.Message
RecordNumber = objEvent.RecordNumber
SourceName = objEvent.SourceName
TimeWritten = objEvent.TimeWritten
nType = objEvent.Type
nUser = objEvent.User


Dim MessageFull
Dim MessageCut

MessageFull = Message
'MessageCut = Replace(MessageFull,"'","""")
'Message = MessageCut

if len(MessageFull) > 0 then 
 MessageCut = Replace(MessageFull,"'","!")
else
 MessageCut = ""
end if


Set db = CreateObject("ADODB.Connection")
db.Open("Provider=SQLOLEDB.1;Data Source=meinserver;Trusted_Connection=Yes;Initial Catalog=wartung;User ID=sa;Password=xxxx;")
sql = "use wartung;"
db.Execute(sql)         


sql = "INSERT INTO " & ComputerName & "  (Category,ComputerNameEV,Eventcode,MessageCut,RecordNumber,SourceName,TimeWritten,nType,nUser)"
 sql = sql & "values ('" & Category & "','" & ComputerNameEV & "','" & EventCode & "','" & MessageCut & "','" & RecordNumber & "','" & SourceName & "','" & TimeWritten & "','" & nType & "','" & nUser & "');"
 db.Execute(sql)
 db.close

Next         hier!!!!!????

 

nun bekomm ich aber immer noch ne meldung und die ist am schluss bei next trotz befehl im script on error resume next wie das?:

 

error:0x80041001

code:80041001

 

google suche bringt mir nicht wirklich erklärende hilfe für den code.

 

aber ansonsten funktionierts ja, stört mich einfach! :)

Link zu diesem Kommentar

@cybquest

 

danke habe ich schon versucht und musste feststellen es liegt nicht an dem script.

ich habe mich mit dem softwarehersteller kurz geschlossen. nun habe ich ihm meine sql tabellen wie ich sie mir erstellt habe mit den scripts usw. zu gestellt. er hat dies auf seinem system getestet und musste "leider" :) feststellen, dass es bei ihm problemlos funktioniert. nun weis ich das es an meinem system liegt. jemand eine idee was an meinem system faul sein kann? was kann ich prüfen, testen. eventlogs habe ich mir auch schon durchgesehen. auch im ordner C:\WINDOWS\system32\wbem\logs habe ich nach den fehler gegooglet. bin ratlos was ich auf dem server konfig muss damit dies funzt!

 

danke für tipps und anregungen

 

gruss bergesel

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...