Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Fehler beim Scrollen in einer ADO-Table unter VISTA (https://www.delphipraxis.net/122697-fehler-beim-scrollen-einer-ado-table-unter-vista.html)

aladin60 20. Okt 2008 19:28

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.

Bernhard Geyer 20. Okt 2008 21:34

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.

aladin60 21. Okt 2008 21:01

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.

Bernhard Geyer 21. Okt 2008 21:11

Re: Fehler beim Scrollen in einer ADO-Table unter VISTA
 
Der Funktionsname müsste irgendwas mit SetThreadAffinity sein.
Und probier mal clUseClient.

aladin60 21. Okt 2008 21:28

Re: Fehler beim Scrollen in einer ADO-Table unter VISTA
 
Ich teste mal und melde mich morgen wieder. Danke erst mal.

Bernd.

aladin60 26. Okt 2008 00:30

Re: Fehler beim Scrollen in einer ADO-Table unter VISTA
 
...probiert, gleiches Ergebnis.

Wer hat noch einen Tipp?

Bernd.

alzaimar 26. Okt 2008 07:05

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:
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;
3. Beim Datensatzwechsel wird nur der MyTimer angeschaltet.

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.

aladin60 26. Okt 2008 13:40

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.

alzaimar 26. Okt 2008 15:36

Re: Fehler beim Scrollen in einer ADO-Table unter VISTA
 
Zitat:

Zitat von aladin60
man müsste dann die 'Tag'-Variable jedoch auch schalten

Wieso? Der Timer wird doch sofort ausgeschaltet.
Zitat:

Zitat von aladin60
Noch etwas ist mir aufgefallen unter VISTA,... Nach dem Zufügen von x-Datensätzen ... ist es irgendwann nicht mehr möglich, einen neuen Satz zuzufügen.

Das kenne ich nicht. Beispielprojekt?

aladin60 26. Okt 2008 16:24

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.

alzaimar 27. Okt 2008 08:33

Re: Fehler beim Scrollen in einer ADO-Table unter VISTA
 
Zitat:

Zitat von aladin60
Wie ich ein Beispielprojekt in der Größe hier posten soll...???

Das Problem lässt sich doch auf wenige Komponenten reduzieren (wenn es denn wirklich so einfach ist).

aladin60 27. Okt 2008 21:08

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.

alzaimar 27. Okt 2008 22:15

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.

aladin60 28. Okt 2008 15:19

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.

aladin60 3. Nov 2008 18:05

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

Wisst Ihr noch, wo der Fehler stecken könnte?

Bernd.

alzaimar 4. Nov 2008 06:59

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:
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;
Sieht doch besser aus, oder? :gruebel:

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...

aladin60 4. Nov 2008 19:21

Re: Fehler beim Scrollen in einer ADO-Table unter VISTA
 
Hallo alzaimar,

erstmal Danke für Deine Mühe.

Zitat:

Gibt es Abhängigkeiten zwischen den Datensätzen? Wird in den dazwischen aufgerufenen modalen Dialogen DSObj verändert?
Abhängikeiten zwischen den Datensätzen gibt es nicht, es werden die gesammelten Daten mit dem neuen Satz verknüpft, dabei können neue Datensaätze in anderen Tabellen erzeugt oder diese verändert werden. Mit den Resultaten wird der Satz in DSObj nur vervollständigt.

Zitat:

Es ist besser, das Du alle Auswahldialoge VOR dem Schreiben/Anhängen des Datensatzes vornimmst.
Ich werde das mal dahingehend umstellen, vielleicht hilft es ja, obwohl ich keinen so rechten Unterschied in der Funktion erkenne...

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