Hallo,<br>
vorab: ich verwende den C++Builder5 Enterprise Edition (sollte aber bei meinem Problem mit Delphi5 Enterprise absolut vergleichbar sein), Zugriff auf eine Access97 bzw. Access2000 Datenbank via ADODataSet. Alle Datenzugriffskomponenten werden zur Laufzeit dynamisch erzeigt.
Eigenschaften eines ADODataSet (beispielhaft: m_DataSet) sind (unter anderem):<br>
<b> m_DataSet->CommandType = cmdTableDirect;
m_DataSet->CommandText = m_TableName;
m_DataSet->CursorType = ctKeyset;
m_DataSet->CursorLocation = clUseServer;</b><br>
Die verwendeten Tabellen enthalten (jeweils) mehr als 80.000 Datensaetze - daher auch die (notwendige) Entscheidung fuer <b>clUseServer</b>. Der Zugriff (auf die Datenbank und unterschiedlichste Tabellen) erfolgt sehr schnell und zunaechst auch zuverlaessig (ich verwende hierbei unter anderem auch den <b>->Seek(...)</b> ) - das Problem tritt beim Setzen des aktiven Index auf:<br>
<b> m_DataSet->IndexName = sAttributeName;</b><br>
Hier kommt es (soweit ich das Erkennen kann erst beim mehrmaligem Index-Wechsel) zu folgender Fehlermeldung:<br>
<b> Alle Zeilenhandles müssen freigegeben werden, bevor neue abgerufen werden können.</b><br>
Was ist mit <b>Zeilenhandles</b> gemeint? Wer reserviert sich die und wie kann ich sie wieder freigeben?<br>
Ein (ueber eine Datasource) angehangenes DBGrid hatte ich bereits versuchsweise entfernt bzw. DisableControls verwendet - kein Erfolg.
Natuerlich passieren einige Abfragen von Feldern dieser Tabelle zwischenzeitlich - editiert wird aber nichts.<br>
Das einzige was hilft ist ein <b>->Close()</b> vor dem setzen des neuen <b>IndexName</b> und dann wieder <b>->Open()</b> - Nur das ist wegen der verlorenen Zeit nicht akzeptabel. Da muss es doch einen besseren Weg geben !?
Leider komme ich trotz vielen Versuchen nicht weiter und hoffe jetzt auf Eure Hilfe.
Beste Gruesse<br>
Stefan
vorab: ich verwende den C++Builder5 Enterprise Edition (sollte aber bei meinem Problem mit Delphi5 Enterprise absolut vergleichbar sein), Zugriff auf eine Access97 bzw. Access2000 Datenbank via ADODataSet. Alle Datenzugriffskomponenten werden zur Laufzeit dynamisch erzeigt.
Eigenschaften eines ADODataSet (beispielhaft: m_DataSet) sind (unter anderem):<br>
<b> m_DataSet->CommandType = cmdTableDirect;
m_DataSet->CommandText = m_TableName;
m_DataSet->CursorType = ctKeyset;
m_DataSet->CursorLocation = clUseServer;</b><br>
Die verwendeten Tabellen enthalten (jeweils) mehr als 80.000 Datensaetze - daher auch die (notwendige) Entscheidung fuer <b>clUseServer</b>. Der Zugriff (auf die Datenbank und unterschiedlichste Tabellen) erfolgt sehr schnell und zunaechst auch zuverlaessig (ich verwende hierbei unter anderem auch den <b>->Seek(...)</b> ) - das Problem tritt beim Setzen des aktiven Index auf:<br>
<b> m_DataSet->IndexName = sAttributeName;</b><br>
Hier kommt es (soweit ich das Erkennen kann erst beim mehrmaligem Index-Wechsel) zu folgender Fehlermeldung:<br>
<b> Alle Zeilenhandles müssen freigegeben werden, bevor neue abgerufen werden können.</b><br>
Was ist mit <b>Zeilenhandles</b> gemeint? Wer reserviert sich die und wie kann ich sie wieder freigeben?<br>
Ein (ueber eine Datasource) angehangenes DBGrid hatte ich bereits versuchsweise entfernt bzw. DisableControls verwendet - kein Erfolg.
Natuerlich passieren einige Abfragen von Feldern dieser Tabelle zwischenzeitlich - editiert wird aber nichts.<br>
Das einzige was hilft ist ein <b>->Close()</b> vor dem setzen des neuen <b>IndexName</b> und dann wieder <b>->Open()</b> - Nur das ist wegen der verlorenen Zeit nicht akzeptabel. Da muss es doch einen besseren Weg geben !?
Leider komme ich trotz vielen Versuchen nicht weiter und hoffe jetzt auf Eure Hilfe.
Beste Gruesse<br>
Stefan
Comment