Ich verwende RODBC mit R und knitr, um einige Berichte mit verschiedenen Produktionsdatenbanken zu erstellen. In einigen dieser Berichte führe ich Multilie-Abfragen für mehrere Datenbanken aus.
Jede meiner Abfragen wird in Abhängigkeit von der Form ausgeführt:
%Vor%Beachten Sie, dass der ODBC-Kanal in dieser Funktion geöffnet und geschlossen wird und dass nur eine einfache Abfrage zwischen dem Öffnen und Schließen des Kanals ausgeführt wird.
Wenn ich den Bericht jedoch mehrfach (z. B. bei der Entwicklung des Berichts) ausführe, erhalte ich Warnungen wie die folgenden:
%Vor%Je öfter der Bericht ausgeführt wird, desto höher wird die Nummer des im Fehler angegebenen Handles.
Warum, wenn ich den Kanal in der Abfragefunktion öffne und schließe, werde ich mit offenen, 'unbenutzten' RODBC-Handles belassen?
Noch wichtiger: Wie kann ich dieses Problem vermeiden?
Ich würde es mit on.exit
vermeiden:
Auf diese Weise wird die Verbindung auch bei einem Fehler geschlossen. Siehe auch ?on.exit
.
Das oben genannte setzt voraus, dass das Handle nicht geschlossen wurde, weil beim Ausführen der Abfrage ein Fehler aufgetreten ist. Wenn die Abfrage in Ordnung war, aber der Handle gerade nicht geschlossen war, habe ich keine Ahnung. odbcClose
gibt 0 zurück, wenn es erfolgreich war, also könnten Sie das überprüfen.
Wie andere darauf hingewiesen haben, ist dies wahrscheinlich kein Grund zur Sorge - andererseits wäre es trotzdem interessant herauszufinden, warum die Verbindung nicht geschlossen ist, wenn Sie es ausdrücklich zum Schließen sagen. Vielleicht ist es nur eine Frage von Millisekunden und die Abfrage ist noch nicht beendet, wenn das Ergebnis zugewiesen wird. Das ergibt für mich nicht viel Sinn, als ob das Ergebnis orders
zugewiesen wird, was gibt es sonst noch über die Datenbank? Aber vielleicht ist da was. In diesem Fall könnte man versuchen, etwas mehr Zeit zu geben, zB.
Das klingt wirklich blöd, aber ich wäre nicht überrascht, wenn es tatsächlich funktionieren würde.
Eine andere Idee ist, dass Sie, wenn Sie Rstudio verwenden, einige Phantom-Fehlermeldungen erhalten, wenn Sie zum Beispiel plot
zum ersten Mal mit einem nicht vorhandenen grafischen Parameter verwenden und dann keine Fehler auf dem zweites Mal.
Vielleicht passiert etwas Ähnliches mit db-Handlern - wenn das der Fall ist, wäre es lehrreich zu sehen, ob Sie die gleichen Warnungen sowohl in RStudio als auch in der Konsole (Rgui oder Rterm in Windows oder R in einem Terminal in Linux) erhalten . Das gilt natürlich, wenn Sie Rstudio verwenden.
Und schließlich könntest du versuchen, dies auf r-help zu posten, da Brian Ripley (einer der Autoren von RODBC) dort ist, aber nicht hier.
Wie Sie sehen, habe ich keine wirkliche Antwort und wenn es zu viel Mühe braucht, um es herauszufinden, würde ich empfehlen, sich keine Sorgen zu machen:)