![]() |
Datenbank: MS-SQL Express • Version: 2005 SP2 • Zugriff über: ADO
Fehler beim Scrollen in einer ADO-Table unter VISTA
Heute muss ich mich an Euch Wissende wenden, da ich nicht so recht weiterkomme.
Programmiert habe ich ein Programm, welches 5 SQL-Tabellen verarbeitet, auf die mit ADO-Dataset über ADO-Connection zugegriffen wird. Es funktioniert auch alles, wie es soll - oder doch nicht? Entwicklungsrechner ist ein Core 2 Duo mit XP-Prof, Turbo Express 2006. Dort läuft alles prima! Nehme ich nun das Programm auf einen Vierkerner mit Vista und scrolle rasch mit der Maus durch die Haupttabelle, erhalte ich den (Betriebssystem)-Fehler: "Die angeforderte Ressource wird bereits verwendet." Scrollt man langsam, kommt der Fehler nicht. Bewegt man sich mit den Pfeiltasten seitenweise funktioniert alles prima. Es werden beim Wechsel des aktuellen Satzes allerhand Daten analysiert, es werden Verzeichinisse gelesen und (lokale) Websites geladen. Woher kommt der Fehler? Muss ich nun die Programmiersprache erst noch auf einen Vista-Rechner bringen, um der Ursache auf die Schliche zu kommen? Oder wisst Ihr Rat? Woran könnte es liegen, welche Ressource könnte nicht bereit sein? :?: Bernd. |
Re: Fehler beim Scrollen in einer ADO-Table unter VISTA
Welche Curserlocation verwendest du für deine Datasets?
Binde mal Testhalber die Anwendung an einen Prozessorkern. |
Re: Fehler beim Scrollen in einer ADO-Table unter VISTA
Sorry, komme erst jetzt dazu, zu antworten....
Verwendet wird "clUseServer". Habe probehalber mal einen try except block um all die nach dem Datensatzwechsel durchzuführenden Aktionen gemacht. Die Fehlermeldung taucht nunmehr nicht mehr auf, aber so richtig bin ich nicht zufrieden, nicht zu wissen, was... Wie binde ich an einen Kern? Bernd. |
Re: Fehler beim Scrollen in einer ADO-Table unter VISTA
Der Funktionsname müsste irgendwas mit SetThreadAffinity sein.
Und probier mal clUseClient. |
Re: Fehler beim Scrollen in einer ADO-Table unter VISTA
Ich teste mal und melde mich morgen wieder. Danke erst mal.
Bernd. |
Re: Fehler beim Scrollen in einer ADO-Table unter VISTA
...probiert, gleiches Ergebnis.
Wer hat noch einen Tipp? Bernd. |
Re: Fehler beim Scrollen in einer ADO-Table unter VISTA
Wenn Du alle Aktionen beim Datensatzwechsel auskommentierst, tritt der Fehler nicht auf?
Ich mache Folgendes: 1. Ein Timer auf die Form. Enabled := False, Interval: 50ms 2. Das OnTimer-Ereignis führt Folgendes aus:
Delphi-Quellcode:
3. Beim Datensatzwechsel wird nur der MyTimer angeschaltet.
Procedure TForm1.MyTimerTimer (Sender : TObject);
Begin If MyTimer.Tag = 1 Then Exit; MyTimer.Enabled := False; Try <Hier alle Aktionen beim Datensatzwechsel Finally MyTimer.Tag := 0; End End; Das hat den Vorteil, das man schneller scrollen kann. Erst wenn man loslässt, werden für den einen Datensatz (den gerade aktuellen), die Aktionen ausgeführt. |
Re: Fehler beim Scrollen in einer ADO-Table unter VISTA
Danke erst mal für die Tipps.
Die Lösung würde auch gehen, man müsste dann die 'Tag'-Variable jedoch auch schalten, wenn ein Satz zur Bearbeitung ansteht bzw. der Satz lange genug aktuell ist. Noch etwas ist mir aufgefallen unter VISTA, was ich unter XP noch nicht hatte. Nach dem Zufügen von x-Datensätzen (vielleicht 30, ich muss mal zählen und auf Wiederholung testen), ist es irgendwann nicht mehr möglich, einen neuen Satz zuzufügen. Es passiert einfach nichts mehr. Auch ein Beenden der Verbindung hilft nicht weiter, erst nach dem Neustart des Programmes kann man wieder Sätze zufügen. Dieses Problem ist bei allen Tabellen da, sollte also nichts mit den inzwischen durchgeführten Aktionen zu tun haben... Blöde Sache, denn sonst läuft die Datenbankanwendung sehr gut. Bernd. |
Re: Fehler beim Scrollen in einer ADO-Table unter VISTA
Zitat:
Zitat:
|
Re: Fehler beim Scrollen in einer ADO-Table unter VISTA
Ja, Du hast Recht. Der Timer wird abgeschaltet.
Wie ich ein Beispielprojekt in der Größe hier posten soll...??? Bernd. |
Re: Fehler beim Scrollen in einer ADO-Table unter VISTA
Zitat:
|
Re: Fehler beim Scrollen in einer ADO-Table unter VISTA
Da ich aber die Ursache nicht kenne, habe ich ein Problem. Ich habe geschildert, wie ich auf welche DB zugreife und dann nach x Datensätzen zufügen die DB nicht mehr auf Append reagiert und das das bislang nur unter VISTA auftrat...
Was soll ich noch posten? Das ganze Projekt, was aber nur mit der zugehörigen DB laufen würde? Bernd. |
Re: Fehler beim Scrollen in einer ADO-Table unter VISTA
Wie wäre es mit : 1x TADOConnection, 1xTADOTable, 1x Button
Im OnClick vom Button 31 Datensätze eintragen und den Fehler somit provozieren? Wenn das dann unter Vista funktioniert, liegt es nicht am 30x Einfügen (wovon ich ausgehe), sondern an einem der Effekte, die bei Dir sonst noch passieren. Dann ist es aber nicht notwendigerweise ein ADO (was verwendest Du) Problem, sondern vielleicht etwas von Deinem Code (das ist eher anzunehmen). Vista ist mit eingeschaltetem UAC übrigens sehr zickig. Das solltest Du testweise mal ausschalten und dann prüfen, ob der Fehler noch auftritt. Ich plädiere immer dafür, Fehler einzugrenzen, um Ursachen (wirklich 30+x mal Einfügen?) auszuschließen bzw. einzugrenzen. |
Re: Fehler beim Scrollen in einer ADO-Table unter VISTA
Ach so meinst Du das. (Auf dem Schlauch stehend....)
Ich geb' ehrlich zu, dass ich die zugefügten Sätze nicht gezählt sondern geschätzt habe, weil ich mit dem Inhalt der Sätze beschäftigt war. Man sieht, dass Programm arbeitet bereits produktiv. Während der Arbeit wurde z.B. auch eine Abwesentheitspause eingelegt, in der das System in den Energiesparmodus ging (Rechner ist brandneu, frage bitte jetzt nicht, wie ich das eingestellt hatte - ich müsste nachschauen). Igendwann an diesem Tage trat dann der Fehler auf und an einem weiteren Tage nochmal, seitdem nicht wieder, habe aber auch nicht mehr soviel Sätze zufügen müssen. Ich glaube auch nicht, dass es nur am System liegt, es werden sicher mehrere Einflüsse sein. Da ich jetzt laufend unterwegs war, und wie weiter oben geschildert, der Rechner nicht hier bei mir steht, werde ich weiter beobachten und dann berichten. Vielleicht kann ich dann wenigstens jemanden mit gleichem Problem helfen. Bernd. |
Re: Fehler beim Scrollen in einer ADO-Table unter VISTA
So, wie angekündigt habe ich getestet (mit überraschendem Ergebnis):
Die Unmöglichkeit, einen Datensatz zuzufügen, ist unabhängig von der Laufzeit des Programmes! Nur unter Vista! Heute konnte ich gleich nach dem Programmstart keinen DS zufügen, nach Neustart ohne Probleme beliebig viele! Hier die (einzige) Stelle, an der zugefügt wird:
Delphi-Quellcode:
Ich hoffe, dass der Sinn deutlich wird. Wie gesagt unter XP keine Probleme (gleiche DB). Oder nein, unter VISTA wird MS-SQL 2005 SP2 verwendet, unter XP ohne Servicepack).
procedure TObjektBrowser.BtnObjNeuClick(Sender: TObject);
var ok1,ok2 : boolean; nNR : string; begin with DM do //Unit des Datenmodules begin Filter_off; //Dataset-Filter ausschalten ok1:=false;ok2:=false; nNR:=NextNumber; //Objektnummer nach Jahr sortiert wird erzeugt DSObj.Append; //DS zufügen DSObjDatum.AsDateTime:=date; //erste Angaben in den Satz DSObjObjNr.AsString:=nNR; DSAdr.First; //Adresse zum Objekt zuordnen if AdrWahl.ShowModal=mrOk then begin DSObjAdr.AsInteger:=DSAdrIdAdresse.AsInteger; //hier Adressen aussuchen und zuordnen DSAdr.Filtered:=false; ok1:=true end; DSKund.First; //ein Kunde zum Objekt zuordnen if ok1 and (KundWahl.ShowModal=mrOk) then begin DSObjVerk.AsInteger:=DSKundidKunde.AsInteger; DSKund.Filtered:=false; ok2:=true end; if ok1 and ok2 then begin DSNr.Edit;DSNrNR.AsString:=nNR;DSNr.Post; //jetzt Nummer festschreiben Verzeichnis_anlegen(defObjDir+'\'+nNr+'\Fotos'); DSObj.Post; Main.SendRefresh; //anderen Rechnern die Veränderung in der DB über UTP anzeigen end else DSObj.Cancel; UpdateObjektDaten; //hier werden Verzeichnisse eingestellt, Daten gelesen usw. DSObj.Last //zum weiteren Editieren wird der neue Satz aktuell gemacht end; end; Wisst Ihr noch, wo der Fehler stecken könnte? Bernd. |
Re: Fehler beim Scrollen in einer ADO-Table unter VISTA
Gibt es Abhängigkeiten zwischen den Datensätzen? Wird in den dazwischen aufgerufenen modalen Dialogen DSObj verändert?
Es ist besser, das Du alle Auswahldialoge VOR dem Schreiben/Anhängen des Datensatzes vornimmst.
Delphi-Quellcode:
Sieht doch besser aus, oder? :gruebel:
Procedure TForm1.ButtonNeuClick(Sender : TObject);
Begin If SammleDaten (WeitereDaten) = OK Then Begin Daten.Append; Try DatenSetzen(WeitereDaten); Daten.Post; Except On E:Exception Do Begin Daten.Cancel; Raise Exception.CreateFmt('Datensatz konnte nicht eingefügt werden: %s',[E.Message]); End End End End; Edit: Aber so auf den ersten Blick finde ich keinen Fehler. Ich vermute mal, das der Fehler verschwindet, wenn Du das so implementierst, wie ich. Denn....: Vista hat kein MDAC mehr, sondern WinDAC, das soll das Gleiche sein, ist aber nicht das Selbe. :zwinker: Vielleicht ist da ein kleiner Bug drinne... |
Re: Fehler beim Scrollen in einer ADO-Table unter VISTA
Hallo alzaimar,
erstmal Danke für Deine Mühe. Zitat:
Zitat:
Bernd. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:40 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