Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];

Вниз

обновление DataSet а не работает...   Найти похожие ветки 

 
Maxim2030   (2004-05-07 06:58) [0]

Добрый день.

имеем такой код:

Ds := TADODataSet.Create(nil);
DS.CommandText := "Select * from table";
DS.CursorType = ctUseServer;
Ds.Open();
после этого датасет привязывается к гриду и отображается.
Через время на других машинах в сети отображаемая табличка изменяется; надо отобразить эти изменения на экране.
пытаюсь сделать Ds.Requery(), DS.Resync(), DS.Refresh() - ничего не помогает ado выдает ошибку "this provider does not suuported refreshing with underlaying values"
БД - access2000 (MS Jet4.0)
Так работает:
tmp = DS.<Значения ключевых полей>
DS.Close;
DS.Open;
DS.Seek(tmp);
но как то криво само по себе а кроме того при большом объеме таблицы (>10000записей) зависает

подскажите как лечить?


 
sniknik ©   (2004-05-07 08:45) [1]

оставить как есть (лутший вариант), обновление только по запросу пользователя.
почему это лутше можеш поискать недавно обсуждалось (и не раз), повторятся надоело.

> но как то криво само по себе а кроме того при большом объеме таблицы (>10000записей) зависает
чтото у тебя не так, больших зависаний не должно быть, у тебя же серверный курсор должно тянутся только то что отображается. хотя, access? возможно разное проявление (ну к примеру тянет все с начала до отображаемого), проверять ситуацию тоже не хочется, ввиду того что считаю безсмысенной такую логику.

еще вариант перейти на локальный и обновлять позаписьно (только измененные), см. статью на королевстве про ADO 2-3 части, поиск по resync command (если не спутал написание :)


 
Erik ©   (2004-05-07 10:03) [2]

Как я понимаю ты работаеш с таблицей и используеш курсорные методы? Тогда почему у тебя ADODataSet а не ADOTable? Хотя я нопомню как она внутри устроена, лучше всего открой через MsJet как таблицу! Тогда будь у тебя хоть 1000000 будет открыватся мгновенно.
И еще ctUseServer небудет работать, потому что это не SQL сервер а File Server. Как ты представляеш себе Seek с ctUseServer?


 
sniknik ©   (2004-05-07 10:47) [3]

> Тогда почему у тебя ADODataSet а не ADOTable?
это то как раз очень правильно, ADOTable это урезаная версия ADODataSet-а, его ни в коем случае лутше не использовать. (ADOTable  сделан только для "облегчения" перехода, и по моему зря, лутше бу совсем не было)


 
sniknik ©   (2004-05-07 10:50) [4]

> И еще ctUseServer небудет работать, потому что это не SQL сервер а File Server. Как ты представляеш себе Seek с ctUseServer?
будет, а Seek как раз только при серверном и работает.

Using the Seek method depends on the settings of a few properties. IndexName must be set to activate the index to use, CommandType must be cmdTableDirect (for TADODataSet, set TableDirect to true for a TADOTable), CursorLocation must be clUseServer, and CursorType must be ctKeySet.


 
Maxim2030   (2004-05-07 20:09) [5]

экспериментировал с reQuery(), close/open - результат по скорости примерно одинаковый.
причем что интересно, когда ручками вырезал из таблицы строки, начиная с некоторого момента скорость открытия стала нормальной. Например, когда 15тыс строк - ~0,5сек, а при постепенном увеличении кол-ва строк скорость резко падает, при 18 тыс строк - ~4-5 сек , при 28тыс строк - 200сек :(
причем никакой активности процессора или диска не наблюдается
выбоорка всегда отбирается и сортируется делается по индексу.
Вот еще что интересно: после упаковки базы, в которой было около 18 тыс строк скорость восстановилась до нормальной, но после некоторого кол-ва движений опять упала.
такое ощущение что акцесс при открытии блокирует страницы .mdb файла и при некотором кол-ве страниц начинает безбожно тормозить

может у кого есть какие идеи?


 
sniknik ©   (2004-05-07 21:07) [6]

> CommandType must be cmdTableDirect


 
Maxim2030   (2004-05-08 08:27) [7]

> CommandType must be cmdTableDirect

был бы рад, но там Sql :
select * from table where field1 in (1, 2, 5, ...) order by field2
в будущем в sql будет расширяться в секции where

есть индекс на field2 (char, 255) + field1 (integer)
менял индекс на field1+field2 - абсолютно тот же результат

под отладчиком смотрел - во время открытия управление находится где-то в msjet40.dll. установка последней версии (jet service pack 8) не помогла


 
sniknik ©   (2004-05-08 12:37) [8]

> DS.CommandText := "Select * from table";

> был бы рад, но там Sql :
> select * from table where field1 in (1, 2, 5, ...) order by field2
?
ну да ладно.

можно варьировать и посмотреть что будет быстрее, либо сделать это условие фильтром либо перейти на локальный курсор. (при локальном передача идет немного по другому, много раз замечал серверный + fetchall по времени дольше чем открыть локальный а он тоже на клиента все качает) + как уже говорил можно будет обновление делать позаписьно.

а вообше не очень это хорошая идея использовать локальную базу для серверных решений, если базу сменить нельзя то уж хотябы перевести все на трехзвенку можно? можно так переводи.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.03 c
3-1084006567
Dimedrol
2004-05-08 12:56
2004.05.30
Как лучше строить индексы ?..


1-1084939263
Cryon
2004-05-19 08:01
2004.05.30
Как завершить работу приложения


1-1084898089
Beglec
2004-05-18 20:34
2004.05.30
Подскажите где можно взять TChart, но более мощный и халявный ;)


14-1084092082
nikkie
2004-05-09 12:41
2004.05.30
Новая версия DMClient - 2.1.1


14-1083869414
lak
2004-05-06 22:50
2004.05.30
вопрос html





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский