![]() |
Datenbank: MSSQL • Version: 2008 • Zugriff über: ADO
ADO Verlorene Verbindung wieder finden
Ich habe folgende Problemstellung:
AdoConnection -> AdoDataset alles besten. Nun bricht die Netzwerkverbindung ab (z.B. W-Lan)! Dataset bleiben offen, wenn ein Dataset z.B. eine Änderung an den Server senden will bekommt man "Fehler beim Verbinden" beim ADO Dataset, ok ist ja richtig (das DataSet wird Active False "ohne mein zutun") Nun steht die Netzwerkverbindung wieder AdoConnection ist noch Connected und alle anderen Verbunden DataSet sind auch noch Active (bis auf die Eine)! Nun will ich das DataSet wieder öffnen, dies wird weiterhin verweigert mit "Fehler beim Verbinden". Lösung z.Z. AdoConnection auf Connected=False setzen, ConnectionsString leeren, neu Befüllen und neu Verbinden, dann geht wieder alles. Das ist leider schlecht da viele DataSets offen sind und ich eigentlich dem AdoConnection sagen will, das er sich erneut verbinden soll, ohne die anderen DataSet zu schließen. Kennt jemand eine Lösung ? |
AW: ADO Verlorene Verbindung wieder finden
Die Connection kennt alle DataSets, die über diese verbunden sind.
![]() Da könntest du jetzt vor dem Schliessen der Verbindung alle aktiven DataSets merken, dann die Verbindung schliessen, wieder aufbauen und dann alle gemerkten DataSets wieder auf aktiv setzen. Generell würde ich aber die normalen ADO DataSets gegen ClientDataSets tauschen. |
AW: ADO Verlorene Verbindung wieder finden
Zitat:
|
AW: ADO Verlorene Verbindung wieder finden
Zitat:
Zitat:
Zitat:
In meinen Datenbank-Anwendungen gibt es immer eine
Delphi-Quellcode:
; und eine
Function TDatMod.Verbinden_Datenbank : Boolean
Delphi-Quellcode:
. Liefert die erste False zurück, lese ich das Property Fehlertext aus meinem Datenmodul aus und beende das Programm mit dieser Fehlermeldung. Dasselbe dann für die zweite Funktion. Zudem kann ich so erstens steuern, in welcher Reihenfolge meine Datasets oder Queries aktiviert werden sollen, und zweitens, welche Queries gleich geöffnet werden und welche erst bei Bedarf. In bestimmten Fällen benötige ich auch mal eine
Function TDatMod.Verbinden_Queries : Boolean;
Delphi-Quellcode:
oder
Procedure TDatMod.Schliessen_Queries;
Delphi-Quellcode:
All das habe ich in einem Default-Datenmodul bereits vorbereitet, und weil ich die DB-Connection immer ConMain nenne und ich immer eine Benutzer-Tabelle für benutzerdefinierte Einstellungen habe, existiert auch immer schon ein Qset_Benutzer, so daß ich beide Funktionen schon mal drin habe.
Procedure TDatMod.Disable_DataSources;
|
AW: ADO Verlorene Verbindung wieder finden
Zitat:
Zitat:
Wir reden hier nicht von emba Qualität ...... Nun scheint sich ein Hardwareproblem herauszustellen, heute wieder ein Crash nach 5 Stunden Dauereinsatz, hier haben sich meine SQL Anweisungen "von alleine" verändert, die in den Komponenten hinterlegt sind (mitten im SQL Statement sind einzelne Buchstaben verändert). Ich gehe nun von einem Hardwareproblem aus und tausche diese aus. Trotzdem währe ich an einer Lösung zum Verbindungsproblem interessiert, jeder der z.B. per WLan sonst Mobil arbeitet ist davon betroffen ....... |
AW: ADO Verlorene Verbindung wieder finden
Zitat:
Welchen Grund gibt es alle Datasets immer offen zu haben? Wir haben auch mit DBs zu tun und unsere App ist nach einem Reconnect (wenn der Anwender nicht gerade sein System so aufgesetzt hat das er auf oberster Einstiegsebene Tausende Einträge hat) nach 1-2 Sekunden wieder einsatzbereit. Zitat:
Zitat:
Evtl. wäre eine Browserlösung oder RemoteDesktop/Citrix-Lösung besser. Oder eine Überarbeitung des DB-Schnittstelle das diese Daten selbst in Klassen hält und nur noch bei bedarf (Update/Speichern/...) nur kurzzeitig Verbindung mit der DB aufnimmt. |
AW: ADO Verlorene Verbindung wieder finden
Ich möchte keine Diskussion wer wie alles viel schöner programmiert, das macht keinen Sinn .....
Ihr habe das Problem nicht verstanden: DataSet gehen auf und zu .... Wenn nun einmal in x Stunden zu einem Problem kommt (warum auch immer) dann verweigert ADO eine Abfrage obwohl diese wieder möglich ist ohne die Connection zu schließen und wieder zu öffnen. Hier fragt ich nach einer Idee um der ADO zusagen : "versuche es doch einfach nochmals und ignoriere dein gespeichertes Ergebnis"! |
AW: ADO Verlorene Verbindung wieder finden
Zitat:
Das mit dem ConnectionString kann ich hier nicht nachvollziehen. Kannst du einmal überprüfen, wie der ConnectionString aussieht, bevor du ihn neu zuweist? Ich kann mir nämlich nicht wirklich vorstellen, daß der ConnectionString plötzlich zerschossen sein soll. Ein Property-Wert ändert sich nicht einfach von alleine. Ich kann hier jede AdoDB-Connection schließen und öffnen, ohne den ConnectionString neu zuzuweisen, ob jetzt mit MS-Access oder MSSQL. Falls der ConnectionString dennoch zerstört sein sollte, wie du unter von deinen SQL-Anweisungen schreibst, dann hast du vermutlich defekte Ram-Module. Zitat:
Zitat:
Zitat:
Zitat:
Weiterhin behauptest du, ADO verweigere eine Abfrage, obwohl diese wieder möglich ist, ohne die Connection zu schließen und wieder zu öffnen. Verstehe ich das richtig, daß du damit die Ansicht vertrittst, daß nach einem Abbruch der Verbindung via WLan die Ado-Connection weiterhin aktiv wäre? Sei dir versichert: Genau so ist es nicht. Auch wenn die entsprechenden Properties deiner Komponenten weiterhin den Status True anzeigen (connected, active), ist die Verbindung inaktiv, wenn die WLan-Verbindung abreißt. Datenbanken vergeben Transaktions-Handles, z.B. beim Herstellen einer Verbindung oder beim Ausführen eines Select-Befehls. Diese Handles sind nach einem Abriß der WLan-Verbindung nicht mehr gültig, weshalb du nicht nur die Connection, sondern auch die Datasets erst schließen mußt, bevor du sie wieder öffnen kannst. So, jetzt klinke ich mich hier aus, bevor ich noch einen irreparablen Hirnschaden erleide :lol: |
AW: ADO Verlorene Verbindung wieder finden
@Perlsau: nehme nicht alles immer persönlich
Nochmals zum Verständnis, mein Problem: 1. einmal kurz Verbindung gestört, dann wird jegliche weitere Verbindung mit dem gleichen ConnectString verweigert!!!!!!! Lösung hier bei der ADO Connection: 2. Connected auf False setzen (Trennen) 3. ConnectString Leeren 4. ConnectString wieder auf ursprung setzen 5. Connected auf True setzt nun geht wieder alles. Schritte 2-5 möchte ich nicht, das ist meine Frage/ mein Problem! Im Programm nach einem Hänger muss es genau an der Stelle weitergehen wo es gehangen hat! Durch die Vielzahl der Möglichkeiten, was der user gerade treibt xxx DataSet auf (MDI-Fenstern) besteht keine Möglichkeit genau das wieder zur Ansicht zu bringen was gerade in der Bearbeitung ist. |
AW: ADO Verlorene Verbindung wieder finden
Wenn jetzt die Verbindung erst nach löschen und wieder setzen des Connectionstrings funktioniert würde das m.E. darauf hin deuten das in diesem Fehlerfall die dbGo-Implmentierung (Der VCL-Teil muss nach invervention so genannt werden) nicht mehr synchron mit den ADO/OLEDB-Status. Oder alternativ (was ich nicht glaube) ist hier noch ein ConnectionPool aktiv der dafür sorgt das eigentlich kaputte Connnections weiter verwendet werden.
Wenn du deine MDI-Formuarle wieder genau an die Stelle bringen willst musst du den Zustand sichern (Bookmark auslesen und nach Reconnect wieder setzen). Falls das nicht klappt den Primärschlüsselwert des aktuell markierten Datensatzes lesen und wieder setzen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz