Lassen Sie mich damit beginnen zu sagen, ich bin neu auf dieser Website sowie VBA so bitte bitte mit mir. Vielen Dank im Voraus für Ihre Hilfe.Excel VBA Ausführen von Access Query, die Links zu Oracle
Ich habe eine VBA-Funktion, die eine vorhandene Abfrage von Access ausführt. Einige der abgefragten Tabellen werden in einer Oracle-Datenbank gespeichert, die einen benutzerspezifischen Kennwortzugriff erfordert. Im Moment ruft ein Sub, das ich zum Automatisieren eines Berichts geschrieben habe, diese Funktion sieben Mal auf und fordert den Benutzer auf, jedes Mal, wenn die Funktion aufgerufen wird, sein Oracle-Passwort einzugeben (es stoppt auch das Sub und gibt eine Fehlermeldung aus, wenn sie das Passwort falsch eingeben) was ich als wahrscheinliches Ereignis sehe, wenn sie es 7 Mal tun müssen). Der Code funktioniert, aber ich würde gerne einen Weg finden, den Code einmal nach dem Passwort fragen zu lassen und damit fertig zu werden. Alle Lösungen, die ich gefunden habe, beziehen sich auf die direkte Verbindung mit und die Abfrage von Oracle, was eine sehr komplizierte SQL-Codierung erfordert, die ich auf keinen Fall schreiben kann.
Ich habe auch ein Problem, wo die Spalten in der Excel-Tabelle in einer anderen Reihenfolge als in Access für einige der Abfragen angezeigt werden. Dies scheint konsistent zu sein, so dass es kein großes Problem darstellt, aber ich würde gerne wissen, wie dies verhindert werden kann, um zukünftige Probleme zu vermeiden.
Hier ist der Code für die Funktion, die ich derzeit verwende. Jeder Einblick würde sehr geschätzt werden!
Option Explicit
'Single Argument "qryName" as string. Runs access qry and copys recordset to active sheet.
Function AccessQueryPull(qryName As String)
'Declare variables
Dim rs As ADODB.Recordset
Dim cn As ADODB.Connection
'open the connection to the access database
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=filePath.accdb;"
'format the command to run the query
Dim cmd As New ADODB.Command
cmd.CommandType = adCmdStoredProc
cmd.CommandText = qryName
cmd.ActiveConnection = cn
'execute the query
Set rs = New ADODB.Recordset
Set rs = cmd.Execute()
'copy data to excel sheet
ActiveSheet.Cells(2, 1).CopyFromRecordset rs
'Cleanup
rs.Close
Set rs = Nothing
Warum rufen Sie die Funktion sieben Mal an? Und bitte zeigen Sie das Sub, das diese Funktion aufruft. – Parfait
Ich rufe die Funktion 7-mal im Subsystem an, da für jedes unserer Werke separate historische und vorausschauende Queries bereits im Zugriff eingerichtet sind, sowie eine Abfrage, die das Cut-off-Datum für die vorausschauenden Queries auf Basis von Anlagenplänen ermittelt. Das Sub ist einfach. Es setzt nur Variablen = auf Qry-Namen, löscht vorhandene Daten, führt einige Berechnungen durch, formatiert Diagramme usw. Gibt es Möglichkeiten, eine nicht definierte Anzahl von Abfragen mit dieser Funktion auszuführen, sodass sie nur einmal aufgerufen werden kann? –