2013-05-16 3 views
1

J'ai une requête ADOQuery connectée à un DataSetProvider connecté à un ClientDataSet connecté à un DataSource connecté à un DBGrid. Dans certaines circonstances, la requête renvoie trop d'enregistrements et j'obtiens une erreur Out of Memory dans MidasLib. J'ai lu que je pourrais utiliser un DataReader, pour éviter de charger tous les enregistrements en mémoire, mais je ne vois pas comment utiliser un DataReader et que le DBGrid fonctionne correctement. Je ne peux également trouver aucune information sur la façon d'utiliser un DataReader dans Delphi. Je me demande si je peux déconnecter l'ADOQuery de DataSetProvider (et le reste de la chaîne), exécuter la requête, obtenir le RecordCount, puis seulement reconnecter la chaîne si le RecordCount semble raisonnable.Erreur de mémoire insuffisante dans Delphi avec ODBC et MidasLib

Je ne peux pas comprendre comment désactiver le DataSetProvider, et quand j'essaye de désactiver le ClientDataSet, j'obtiens l'erreur de mémoire quand même.

Répondre

0

J'ai fini par définir ADOQuery.DataSetProvider sur NIL et décharger tous les enregistrements directement à partir de l'ADOQuery dans une table de base de données résidant en mémoire locale. Il a fallu un certain temps, mais il n'y avait pas d'erreurs de mémoire. Les mêmes données qui provoquaient l'erreur Out of Memory, lors de la conversion en StringList, n'étaient que de 4 Mo.