Zum Inhalt springen

SQL - Syntax (Access "DB") & VBS


Eratum

Empfohlene Beiträge

Tach allerseits.

Ich habe seit Ewigkeiten nichts mehr mit SQL gemacht und stehe nun etwas auf dem Schlauch. Sicher hat da draussen irgendjemand die total simple Antwort parat. Folgendes:

Ich bin gerade dabei die installierte Software auf unseren Clients auf etwas abenteuerliche Weise zu erfassen. Dabei legt jeder Client mittels Skript einmal eine CSV mit seiner installierten Software und Version auf einem Share ab. Soweit so gut. Nun muss das Ganze auch zusammen geführt werden und da ich gerade "mal wieder was mit Access machen wollte", dachte ich mir, ich bastel da mal eine kleine "DB".

Nun habe ich eine Datenbank mit 3 Tabellen, die ich automatisiert füllen möchte:

  • Client (*ID, Name)
  • Software (*ID, Name, Version)
  • Client_SW (*Host_ID, *SW_ID)

Die ersten Tabelle lassen sich Problemlos befüllen. Probleme bereitet es mir gerade die entsprechende Abfrage, den Insert, für die dritte Tabelle zu bauen.

Mein Skript liefert mir bei Ausführung von:

str_db_command = "INSERT INTO Client_SW ( [Host_ID], [SW_ID] ) VALUES (" _
	& " ( SELECT ID FROM Clients WHERE [Hostname] = '" & str_hostname & "' )," _
	& " ( SELECT ID FROM Software WHERE [Software] = '" & str_software & "' AND [Version] = '" & str_version & "'));"

obj_ADOCon.Execute (str_db_command)

diese Fehlermeldung:

Zitat

Microsoft JET Database Engine: Unbekannter Fehler

Wenn ich das ganze "aufstrippe" und als SQL Query in Access laufen lassen:

INSERT INTO Client_SW ( [Host_ID], [SW_ID] ) VALUES ( ( SELECT ID FROM Clients WHERE [Hostname] = 'xxx' ), ( SELECT ID FROM Software WHERE [Software] = 'xxx' AND [Version] = '123'));

So bekomme ich die Meldung:

Zitat

Die Abfrage muss auf mindestens einer Tabelle oder Abfrage basieren.

...

Wer kann mir hier einen Hinweis geben, wo ich 'nen Klemmer habe (oder vlt. hab' ich auch einen völlig sinnbefreiten Ansatz)?

Schonmal danke für's durchlesen (die Antwort ist garantiert kürzer als meine Ausführung, aber ich merke gerade, dass ich mit "dem Kram" sowas von raus bin) :)

Gruß Eratum

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du hast einen Tippfehler im Tabellennamen: Clientstatt Client

Die Fehlermeldung möchte dir das wohl etwas umständlich mitteilen. Dürfte wohl dem "ORA-00942: table or view does not exist" entsprechen, nur eben in nicht sprechender Schreibweise von Access ;)

Bearbeitet von Kelsier
Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich hab lange kein Access SQL mehr gemacht (sieht gern mal anders aus als üblich ;) ):

https://support.office.com/de-de/article/INSERT-INTO-Anweisung-e12fd58b-33b1-479c-8221-e9f245ab8d24

Die ganzen "[]" sehen irgendwie seltsam aus. Die gehören mMn nicht da rein, wenn ich mir die Spezifikation durchlese.

Und ich erinnere mich, dass unnötige Leerzeichen empfindliche Fehlermeldungen hervorrufen können.

Bearbeitet von Ganymed
Link zu diesem Kommentar
Auf anderen Seiten teilen

Eckige Klammern habe ich entfernt und (wahrscheinlich) unnötige Leerzeichen wegrationalisiert:

INSERT INTO Client_SW (Host_ID,SW_ID) VALUES ((SELECT ID FROM Clients WHERE Hostname='xxx'),(SELECT ID FROM Software WHERE Software='yyy' AND Version='123'));

Ebenso habe ich probiert mit Clients.ID, Software.ID, ... zu arbeiten. Die Meldung blieb die Gleiche.

Ich hätte es doch einfach nach einer Exceltabelle exportieren sollen :D Aber nun will ich wissen woran es liegt :D

Danke soweit! Dennoch: Weitere Vorschläge anyone?

Bearbeitet von Eratum
Link zu diesem Kommentar
Auf anderen Seiten teilen

Muss eigentlich an der Syntax liegen...
In einem schnellen Oracle-Nachbau kann ich das ohne Probleme ausführen (mit Access kenn ich mich blöderweise gar nicht aus)

Mag Access vielleicht kein einfaches Hochkomma und erwartet Double-Quotes?
Kann Access überhaupt mit Subqueries umgehen?

Bearbeitet von Kelsier
Link zu diesem Kommentar
Auf anderen Seiten teilen

Also die Hochkommas passen so. Die funktionieren bei den anderen Abfragen und Inserts auch.

Bei den Subqueries bin ich mir aktuell nicht 100% sicher (auch wenn ich das aus anderen Foren/Dokus so übernommen habe) und recherchiere nochmal. Hinzu kommt halt auch immer, dass ich hier mit nem Office 2007 arbeite :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ahoihoi,

ich bin nun doch mal wieder dazu gekommen mich mit dem Thema zu befassen und hab's nun hinbekommen. Letztendlich ging es mir auf den Senkel, mich mit der SQL Syntax von MS mehr als nötig zu befassen. Also hab' ich mir das Access vorgenommen und mir nach einigem durchlesen und recherchieren in der Hilfe die benötigte Abfrage/ den Insert "zusammengeklickt". Ich kenn mich nicht gut genug mit SQL/Programmierung/DB aus um zu sagen, ob dieser Stil nun schön ist, aber er geht.

Und hier nun der funktionierende Snippet:

		str_db_command = "INSERT INTO Client_SW ( Host_ID, SW_ID ) " _
			& "SELECT Clients.ID, Software.ID " _
			& "FROM Clients, Software " _
			& "GROUP BY Software.Software, Clients.Hostname, Software.Version, Clients.ID, Software.ID " _
			& "HAVING (((Software.Software)=""" & str_software & """) AND ((Clients.Hostname)=""" & str_hostname & """) AND ((Software.Version)=""" & str_version & """));"

Und nochmal als "SQL":

INSERT INTO Client_SW ( Host_ID, SW_ID ) 
	SELECT Clients.ID, Software.ID 
	FROM Clients, Software 
	GROUP BY Software.Software, Clients.Hostname, Software.Version, Clients.ID, Software.ID 
	HAVING (((Software.Software)="xxx") AND ((Clients.Hostname)="yyy") AND ((Software.Version)="123"));

 

Nochmal danke an alle Beteiligten :)

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

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

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

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

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...