Warum bekomme ich Warnungen über das Schließen nicht verwendeter RODBC-Handles?

8

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?

    
mac 04.09.2013, 15:35
quelle

2 Antworten

3

Ich würde es mit on.exit vermeiden:

%Vor%

Auf diese Weise wird die Verbindung auch bei einem Fehler geschlossen. Siehe auch ?on.exit .

[BEARBEITEN]

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.

[EDIT2]

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.

%Vor%

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.

%Vor%

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:)

    
lebatsnok 06.02.2014 21:12
quelle
1

Die Funktion odbcClose() schlägt fehl, wenn auf einer Verbindung offene Transaktionen vorhanden sind. Diese Verbindung bleibt in diesem Fall geöffnet.

    
Mayou 04.09.2013 19:00
quelle

Tags und Links