Текущий архив: 2008.03.30;
Скачать: CL | DM;
Вниз
ADO Найти похожие ветки
← →
DimOk (2008-03-03 09:34) [0]Доброго времени суток вам мастера. Скажите пожалуйсто как можно ускорить работу ADO. У меня ситуация следующая - таблица имеет около 20 тысяч записей, после того как я пишу ADOTable.Activate := True; сижу и смоотрю в монитор минут пять, при чем на достаточно хорошм железе.... Все настройки компонента по умолчанию, за исключением Connection
← →
Сергей М. © (2008-03-03 09:44) [1]Для начала откажись от TADOTable в пользу TADOQuery или TADODataSet.
> за исключением Connection
Покажи дословный текст строки коннекта
← →
Sergey13 © (2008-03-03 09:45) [2]> [0] DimOk (03.03.08 09:34)
> Скажите пожалуйсто как можно ускорить работу ADO
Это винда глючит и/или железо слабое.
Еще вариант (редко встречается) - плохо написана программа, например используются неправильные приемы работы с БД.
← →
DimOk (2008-03-03 09:47) [3]
> Покажи дословный текст строки коннекта
Provider=VFPOLEDB.1;Data Source=D:\SAFE\BEST\BASE\FILINEW\SCLAD;Mode=Share Deny None;Extended Properties="";User ID="";Password="";Mask Password=False;Cache Authentication=False;Encrypt Password=False;Collating Sequence=MACHINE;DSN=""
← →
Сергей М. © (2008-03-03 09:51) [4]
> DimOk (03.03.08 09:47) [3]
Коннектом управляешь явно или неявно ?
← →
DimOk (2008-03-03 09:53) [5]
> Коннектом управляешь явно или неявно ?
Я не знаю, явно или нет, но строку подключения я собрал в визарде, а свойство Connected := True установленно в Object Inspector
← →
Сергей М. © (2008-03-03 09:56) [6]
> DimOk (03.03.08 09:53) [5]
Значит явно.
И собственно коннект (а не открытие таблицы) при этом происходит мгновенно ?
← →
DimOk (2008-03-03 09:59) [7]
> И собственно коннект (а не открытие таблицы) при этом происходит
> мгновенно ?
Да. А таблица "активизирутся" очень медленно
← →
Сергей М. © (2008-03-03 10:01) [8]DataSource-компонент при этом отключен от TADOTable ?
← →
DimOk (2008-03-03 10:03) [9]
> DataSource-компонент при этом отключен от TADOTable ?
Да, его нет вообще - потому что данные не выводятся пользователю...
← →
Сергей М. © (2008-03-03 10:04) [10]Приведи значения св-в
Filter, Filtered, IndexName ..
← →
Kolan © (2008-03-03 10:05) [11]Так а если через запрос(TADODataSet), ты проверил или нет?
← →
DimOk (2008-03-03 10:06) [12]
> Приведи значения св-в
> Filter, Filtered, IndexName ..
Object Inspector
Filter - пусто
Filtered - False
IndexName - пусто
← →
Sergey13 © (2008-03-03 10:07) [13]> [7] DimOk (03.03.08 09:59)
> Да. А таблица "активизирутся" очень медленно
Подозреваю, что когда будет 40 тысяч записей будет еще медленнее. Переходи на АДОДатаСет и запросы.
← →
Kolan © (2008-03-03 10:07) [14]> Подозреваю, что когда будет 40 тысяч записей будет еще медленнее.
Лол, а мы все подозревали, что станет быстрее :)
← →
DimOk (2008-03-03 10:09) [15]
> Переходи на АДОДатаСет и запросы.
Та же песня.... Я уже пробовал, запрос мне не нужен т.к. надо заполднить контрол всеми значениями из одного поля одной таблицы.
← →
Сергей М. © (2008-03-03 10:09) [16]
> DimOk (03.03.08 10:06) [12]
Св-во Sort = ?
← →
Сергей М. © (2008-03-03 10:11) [17]
> надо заполднить контрол всеми значениями из одного поля
> одной таблицы.
Абалдеть !
Ты что, хочешь заставить юзера любоваться десятками тысяч строк одновременнно ?
Да ты садист, батенька)
← →
DimOk (2008-03-03 10:13) [18]
> Да ты садист, батенька)
Да нет :) Это номенклатурый справочник, просто хотелось при формировании отчета конкретизировать его по выбранной позиции..... ну это уже другая песня.. :)
← →
Сергей М. © (2008-03-03 10:13) [19]
> запрос мне не нужен
При условии
> всеми значениями из одного поля
как раз запрос тебе и нужен !
Причем он д.б. request live и unidirectional
← →
DimOk (2008-03-03 10:14) [20]
> Св-во Sort = ?
Незаданно
← →
DimOk (2008-03-03 10:14) [21]
> Св-во Sort = ?
Незаданно
← →
Сергей М. © (2008-03-03 10:14) [22]
> Это номенклатурый справочник
Ну и нафига юзеру обозревать его весь, если его интересует десяток-другой записей, отобранных по некоему критерию ?
← →
Сергей М. © (2008-03-03 10:16) [23]
> хотелось при формировании отчета конкретизировать его по
> выбранной позиции
Для выбора "позиции" существуеьт инкрементальный поиск, которыйЮ, в свою очередь, базируется на запросах.
← →
DimOk (2008-03-03 10:18) [24]
> Ну и нафига юзеру обозревать его весь, если его интересует
> десяток-другой записей, отобранных по некоему критерию ?
>
Возьмем 1С Предприятие. При формирования отчета пользователь может конкретизировать его по номеклатурной позиции и т.п.
← →
Сергей М. © (2008-03-03 10:19) [25]
> конкретизировать его по выбранной позиции
А сортировать этот список ты как собрался ?
Он же несортированный у тебя !
Ты что же, хочешь заставить юзера искать в этой двадчатитысячной солянке интересующую его строку ? Тогда ты точно садист)
← →
DimOk (2008-03-03 10:20) [26]
> Для выбора "позиции" существуеьт инкрементальный поиск,
> которыйЮ, в свою очередь, базируется на запросах.
У меня не только же позиция выбирается. И запросы есть. Но результат один и тот же - правильный, но очень "медленный".
← →
Kolan © (2008-03-03 10:21) [27]> И запросы есть.
Показывай запрос.
← →
Сергей М. © (2008-03-03 10:21) [28]
> Возьмем 1С Предприятие
Давай возьмем.
И копнув глубже увидим, что там для этой цели используется аналог дельфийского DBComboBox"a, коим у тебя и не пахнет, судя по тобой вышеизложенному.
← →
DimOk (2008-03-03 10:22) [29]
> Ты что же, хочешь заставить юзера искать в этой двадчатитысячной
> солянке интересующую его строку ? Тогда ты точно садист)
Это поможет мне в данной ситуации..... О том удобно или нет речи же не идет...:)
← →
Сергей М. © (2008-03-03 10:23) [30]
> У меня не только же позиция выбирается
А неважно.
Инкр.поиск на то и придуман, чтобы избавить юзера от необходимости шариться по спискам бешеных размеров.
← →
DimOk (2008-03-03 10:24) [31]
> Показывай запрос.
Запрос достаточно примитивный...
select nnum.mlabel, name.mlabel, kolpost.mkart from mlabel mkart where nnum.mlabel = nnum.mkart
← →
Kolan © (2008-03-03 10:25) [32]> Это поможет мне в данной ситуации… О том удобно или
> нет речи же не идет…:)
Тебе говорят, что если пльзователь хочет найти вермешель, то и надо делать:SELECT * FROM <Table>
WHERE FoodType = "вермешель";
а не давать ему все продукты сразу…
Переделай сабж с пом запроса, и доложи о результатах(незабудь показать сам запрос).
← →
Сергей М. © (2008-03-03 10:25) [33]
> том удобно или нет речи же не идет
Ну что ж .. смотри, кума, тебе жить)
Но почему не использован DBLookup/ComboBox - вот это совершенно непонятно и ничем не оправдано.
← →
DimOk (2008-03-03 10:26) [34]
> дельфийского DBComboBox"
С этим компонентом у меня работать не получилось, и я прибег к обычному ComboBoxу
← →
Kolan © (2008-03-03 10:27) [35]> select nnum.mlabel, name.mlabel, kolpost.mkart from mlabel
> mkart where nnum.mlabel = nnum.mkart
О, а тут джоин. Как же ты его с пом TADOTAble делал?
← →
Сергей М. © (2008-03-03 10:28) [36]
> where nnum.mlabel = nnum.mkart
А говоришь нет фильтрации)
Вот тебе и засада !
Индекса-то по полю nnum.mlabel нет и в помине)
← →
DimOk (2008-03-03 10:28) [37]
> Kolan © (03.03.08 10:25) [32]
Я не совсем понял вопроса, этот запрос не для поиска информации, а для создания конкретой выборки
← →
Kolan © (2008-03-03 10:28) [38]> С этим компонентом у меня работать не получилось, и я прибег
> к обычному ComboBoxу
От тут видимо и тормоза, все дело в долгм выводе в ComboBox…
← →
Сергей М. © (2008-03-03 10:29) [39]
> Как же ты его с пом TADOTAble делал?
Да, оч интересно было бы послушать на эту тему нач-ка транспортного цеха) ..
← →
Kolan © (2008-03-03 10:29) [40]> а для создания конкретой выборки
Так вот эту конкретную выборку хорошобы сокращать до минимума… Проблемма конечно именнов отсутствии индекстов или прорисовке на комбобоксе…
← →
DimOk (2008-03-03 10:30) [41]
> [36]
Поиск элементов у меня не реализован, т.к. на данный момент мне хотелось бы разобраться со скоростью Activate
← →
Сергей М. © (2008-03-03 10:30) [42]
> все дело в долгм выводе в ComboBox
Тогда, получается, автор нагло обманывает общественность, утверждая что
> пишу ADOTable.Activate := True; сижу и смоотрю в монитор
> минут пять
← →
Kolan © (2008-03-03 10:32) [43]> Поиск элементов у меня не реализован
Что ты путаешь нас?
Была TAdoTable так?
Замени теперь её на TADODataSet и расскажи что получилось + сам запрос покажи…
← →
Сергей М. © (2008-03-03 10:33) [44]
> DimOk (03.03.08 10:30) [41]
Разберешься, не волнуйся)
Но для этого ты должен сначала разобраться, каким образом ты умудрился обойтись одним компонентом TADOTable для получения данных аж из целых 3-х таблиц одновременно)
← →
DimOk (2008-03-03 10:33) [45]
> Проблемма конечно именнов отсутствии индекстов или прорисовке
> на комбобоксе…
Проблемма в следующем, если в FormCreate вставить (Таблица/Запрос).Activate := True; Форма не открывается минуты 1,5-2. Если даже в режиме дизайна, попытаться в Object Inspector св-во Activate установить в True - то же самое, среда виснет и долго что то там делает....
← →
Сергей М. © (2008-03-03 10:34) [46]
> Проблемма в следующем
Это не проблема, а ее видимые последствия
← →
Kolan © (2008-03-03 10:35) [47]За две минуты 20000 тыщ строк — тут что-то не так — это точно…
Может это чудеса фокс про? я им не пользовался никогда…
← →
Kolan © (2008-03-03 10:36) [48]А может это все по сети тащиться?
← →
Сергей М. © (2008-03-03 10:36) [49]
> Может это чудеса фокс про?
Если индексы не задействованы, то крайне маловероятно.
← →
DimOk (2008-03-03 10:36) [50]
> Разберешься, не волнуйся)
>
> Но для этого ты должен сначала разобраться, каким образом
> ты умудрился обойтись одним компонентом TADOTable для получения
> данных аж из целых 3-х таблиц одновременно)
Там используется одна таблица. На вапрос показать запрос я его показал из другого компонента ADOQuery.... Вот и все.... Просто у меня запрос используется там где надо вывести сводную информацию, а не занчения конкретной таблицы...
← →
Kolan © (2008-03-03 10:38) [51]> На вапрос показать запрос я его показал из другого компонента
> ADOQuery
Та понимаешь, что запрос с JOIN никак не получить с помошбю TTable… Так что ты что-то недоговариваешь.
← →
DimOk (2008-03-03 10:39) [52]
> А может это все по сети тащиться?
Нет.
← →
DimOk (2008-03-03 10:41) [53]
> Та понимаешь, что запрос с JOIN никак не получить с помошбю
> TTable…
Перечисляю компоненты TADOConnection, TADOQuery, TADOTAble - все, больше компонентов для работы с БД у меня не используется.....
← →
Kolan © (2008-03-03 10:41) [54]Есть предложение — сделай тестовый проект.
1. Создаешь проект.
2. Кидаешь ADOConnection и настраиваешь
3. Кидаешь DataSource и TDBGrid
4. Кидаешь TADOTable.
5. Все настраиваешь.
6. Проверяешь — тормозит…
7. удаляешь TADOTable кладешь TADODataSet.
8. Проверяешь…
← →
Kolan © (2008-03-03 10:41) [55]> TADOTAble — все, больше
Убери совсем этот компонент замени на запрос…
← →
Сергей М. © (2008-03-03 10:42) [56]
> Там используется одна таблица
Вот и накатай соответствующий запрос этой одной таблице и запусти его с пом. TADOTable или TADODataSet, поделись результатами его открытия, тогда и разговор будет предметный
← →
Kolan © (2008-03-03 10:43) [57]> пом. TADOTable или TADODataSet
Имхо Сергей описался, он имел ввиду TADOQuery.
← →
Сергей М. © (2008-03-03 10:43) [58]
> его с пом. TADOTable или TADODataSet
с пом. TADOQuery или TADODataSet
← →
DimOk (2008-03-03 10:44) [59]
> Убери совсем этот компонент замени на запрос…
Убрал... Написал select * from mlabel и тоже самое...
← →
Сергей М. © (2008-03-03 10:46) [60]
> D:\SAFE\BEST\BASE\FILINEW\SCLAD
Это путь к локальному ресурсу ?
← →
DimOk (2008-03-03 10:47) [61]ADODataSet с ним стало побыстрее, но все равно секунд 20 проходит....
← →
DimOk (2008-03-03 10:47) [62]
> Это путь к локальному ресурсу ?
Да, диск D: несетевой
← →
sniknik © (2008-03-03 10:48) [63]> Может это чудеса фокс про?
врядли, это скорее "чудеса" реализации...
для примера, на довольно таки слабой сейчас машине (пень 3000, 1 гиг памяти)
полный запрос SELECT * FROM sales
с коннектом
Provider=VFPOLEDB.1;Data Source=D:\;Password="";Collating Sequence=MACHINE
выполняется 17 сек. и возвращает 315883 записей (сколько есть в базе взятой для примера)
"ширина" записи - 20 полей, из них 12 VarChar(32), остальные - даты, числа, деньги (т.е. ничего "массивного").
← →
Kolan © (2008-03-03 10:48) [64]> и тоже самое
Вариант, который решает не проблемму а последствия.
Так, как пользователю твои 20 тыщ все равно не нужны, ты сначала спроси его что он хочет конкретнно, а потом делалайselect * from mlabel where …
Так ты значительно сократиш выборку.
← →
Kolan © (2008-03-03 10:50) [65]> врядли, это скорее «чудеса» реализации…
Автор, сделай ка тестовый проект как в [54].
← →
DimOk (2008-03-03 10:52) [66]
> для примера, на довольно таки слабой сейчас машине (пень
> 3000, 1 гиг памяти)
Эсли у вас в офисе такая машина считается слабой......
> Вариант, который решает не проблемму а последствия.
Хорошо, подскажите тогда что за причина этих последствий... :)
← →
Сергей М. © (2008-03-03 10:53) [67]
> все равно секунд 20 проходит
Есть стойкое подозрение, что у автора где-то после открытия происходит перемещение к последней записи в неиндексированном НД.
Подобные "чудеса" при этом вполне объяснимы и ожидаемы.
← →
Kolan © (2008-03-03 10:53) [68]> Эсли у вас в офисе такая машина считается слабой…
А у тебя какая машина?
> Хорошо, подскажите тогда что за причина этих последствий…
> :)
Причину и пытаемся понять, для чистоты эксперимента сделай новый проект, бо мало ли что там у тебя в рабочем еще делается…
← →
Сергей М. © (2008-03-03 10:54) [69]
> причина этих последствий
Ты пока ни словом не обмолвился о существовании и использованиии индексов по интересующему полю.
← →
Kolan © (2008-03-03 10:54) [70]> Ты пока ни словом не обмолвился о существовании и использованиии
> индексов по интересующему полю.
Дак он же select * делает…
← →
Сергей М. © (2008-03-03 10:56) [71]
> Дак он же select * делает
Мало ли чего он еще делает (или не делает), но об этом не договаривает)
← →
DimOk (2008-03-03 10:58) [72]
> Автор, сделай ка тестовый проект как в [54].
Сделал... Медленно и так и сяк, до секунд не сравнивал но помоему одинаково медленно :(
← →
ЮЮ © (2008-03-03 11:00) [73]> Запрос достаточно примитивный...
> select nnum.mlabel, name.mlabel, kolpost.mkart from mlabel
> mkart where nnum.mlabel = nnum.mkart
Такой запрос не должен работать ни на одном движке из-за ошибок в синтаксисе
← →
Kolan © (2008-03-03 11:03) [74]> Сделал… Медленно
Чудеса, мож и впрям железо хилое?
← →
DimOk (2008-03-03 11:06) [75]БД старая FoxBase в таблице mlabel 4 поля с типом memo может из за этого...? Хотя в фоксе кидаешь грид на форму, устанавливаешь ему в качестве источника данных эту таблици и.. вуаля, грид заполняется практически мнгновенно....
← →
DimOk (2008-03-03 11:09) [76]
> Такой запрос не должен работать ни на одном движке из-за
> ошибок в синтаксисе
Мог и ошибиться я не копировал а набирал руками, имена таблиц спереди пишутся, но все понял о че реч... :)
← →
Сергей М. © (2008-03-03 11:13) [77]
> DimOk (03.03.08 11:06) [75]
Версия модуля сервера vfpoledb.dll у тебя какая ?
← →
DimOk (2008-03-03 11:16) [78]
> Версия модуля сервера vfpoledb.dll у тебя какая ?
Помоему 9 я его с Microsoft скачивал, последнюю, и Fox 9 у меня на машине стоит.
← →
Сергей М. © (2008-03-03 11:24) [79]9.0.0.3504 - это у меня.
Никаких тормозов не наблюдаю даже в условиях доступа к сетевым шаровым FP2.5-таблицам гораздо большего размера.
> Fox 9 у меня на машине стоит
Сам Фокс, если не ошибаюсь, ОлейДиБи-механизм не использует.
Попробуй для сравнения получить доступ к таблице через odbc-драйвер
← →
DimOk (2008-03-03 11:26) [80]
> Попробуй для сравнения получить доступ к таблице через odbc-
> драйвер
Пробовал, но после при активате := труе пишет. Ошибка поставщика данных!
← →
Сергей М. © (2008-03-03 11:28) [81]Можно еще для сравнения попробовать доступ прямо из MS Access (через Jet3.5 + FoxPro ISAM или через Jet4.0 + VFP ODBC)
← →
Сергей М. © (2008-03-03 11:29) [82]
> Ошибка поставщика данных
А он у тебя установлен в системе, VFP ODBC - провайдер ?
← →
DimOk (2008-03-03 11:29) [83]
> [81]
Хорошо сейчас попробую, но какой мне следует пото сделать вывод?
← →
Сергей М. © (2008-03-03 11:31) [84]Если при том же самом провайдере в чужом приложении доступ к таблице быстрый, а в твоем медленный, значит ты что-то недоговариваешь)
← →
DimOk (2008-03-03 11:33) [85]
> Если при том же самом провайдере в чужом приложении доступ
> к таблице быстрый, а в твоем медленный, значит ты что-то
> недоговариваешь)
Понятно. Ноя все как есть выложил... :)
← →
Сергей М. © (2008-03-03 11:33) [86]
> какой мне следует пото сделать вывод
А пока вывод один - собственно АДО тут абсолютно ни причем.
← →
Kolan © (2008-03-03 11:40) [87]Может грид нестандартный? а без грида тоже самое?
А с этим фокс прое есть где скрипт запустить? Там быстро?
← →
DimOk (2008-03-03 11:40) [88]Access вообще не подключается. В Delphi при использовании ODBC если я выбираю поставщика Visual FoxPro Tables выдает ошибку инициализации поставщика....
← →
Сергей М. © (2008-03-03 11:42) [89]
> Access вообще не подключается
Через что не подключается ? Вариантов-то минимум два, в зависимости от конкретного семейства/версии MS Access..
← →
DimOk (2008-03-03 11:43) [90]
> Может грид нестандартный? а без грида тоже самое?
> А с этим фокс прое есть где скрипт запустить? Там быстро?
>
Пока я только пытаюсь сделать ADODataSet1.Activate := True; только что бы побыстрее. В Фоксе все быстро работает.
← →
Сергей М. © (2008-03-03 11:45) [91]
> DimOk (03.03.08 11:43) [90]
А как насчет доступа через БДЕ ? Пробовал ? Такие же пироги или картина иная ?
← →
DimOk (2008-03-03 11:47) [92]Через БДЕ - пробовал, все впорядке, все быстро.
← →
Сергей М. © (2008-03-03 11:50) [93]остается попробовать через связку ADO+ODBC или Jet+ODBC
← →
DimOk (2008-03-03 11:52) [94]
> остается попробовать через связку ADO+ODBC или Jet+ODBC
Я в этих делах не очень, можно немножко расшифровать? :)
← →
DimOk (2008-03-03 11:55) [95]
> Jet+ODBC
Как мне указать в строке подключения Extendet Driver или что то еще я уже и непомню.... :(
← →
DimOk (2008-03-03 11:59) [96]
> Extendet Driver
Вернее Extendet Provider=
← →
Сергей М. © (2008-03-03 12:02) [97]ODBC - это
http://www.google.ru/search?complete=1&hl=ru&newwindow=1&client=firefox-a&rls=org.mozilla:ru:official&hs=Lml&defl=ru&q=define:ODBC&sa=X&oi=glossary_defi nition&ct=title
Не вдаваясь в подробности, для тебя это выглядит как "поставщик данных" или "источник данных".
Соотв. драйвер ODBC должен быть утановлен в системе.
В строке ADO-коннекта ты должен указать, что ты используешь именно odbc-, а не oledb-поставщика данных.
Равно как и при импорте/привязке внешних таблиц в MS Access-базе ты можешь указать, что источником данных является такой-то конкретный odbc-движок.
Только MS Access подключается к odbc-движку через "родной" для него Jet, а не через ADO.
← →
Palladin © (2008-03-03 12:04) [98]выставь парметры
q.CursorLocation:=clUseServer;
q.CursorType:=ctOpenForwardOnly;
q.LockType:=ltReadOnly;
← →
Palladin © (2008-03-03 12:05) [99]
> остается попробовать через связку ADO+ODBC или Jet+ODBC
лучше не надо, в случае существования OLEDB провайдера
← →
sniknik © (2008-03-03 12:09) [100]> Хотя в фоксе кидаешь грид на форму, устанавливаешь ему в качестве источника данных эту таблици и.. вуаля,
> грид заполняется практически мнгновенно....
сравнил. там же не делается выборки всей таблицы предварительно, там она просто открывается как файл и отображаются(читаются) только несколько первых строк по числу показанных в гриде.
реализация в общем там не твоя... уже сделано все за тебя.
← →
DimOk (2008-03-03 12:11) [101]
> выставь парметры
>
> q.CursorLocation:=clUseServer;
> q.CursorType:=ctOpenForwardOnly;
> q.LockType:=ltReadOnly;
Всеравно медленно.... :(
← →
DimOk (2008-03-03 12:14) [102]
> > выставь парметры
> >
> > q.CursorLocation:=clUseServer;
> > q.CursorType:=ctOpenForwardOnly;
> > q.LockType:=ltReadOnly;
>
> Всеравно медленно.... :(
И выдает ошибку Dataset does not support bookmarks, with are required for multi-record data controls
← →
Palladin © (2008-03-03 12:14) [103]смотри
> sniknik © (03.03.08 12:09) [100]
про выборку всей таблицы
← →
DimOk (2008-03-03 12:19) [104]
> сравнил. там же не делается выборки всей таблицы предварительно,
> там она просто открывается как файл и отображаются(читаются)
> только несколько первых строк по числу показанных в гриде.
>
И что при запуске формы на гриде отображается тлько количество строк которое в него вмещается...? :)
← →
Сергей М. © (2008-03-03 12:23) [105]
> Palladin © (03.03.08 12:05) [99]
Я просто полностью не исключаю "кривизну" имеющегося у автора oledb-провайдера.. Или "кривизну" его инсталляции.
А MSAccess позволит подключиться к фоксовым таблицам иным маршрутом - через OLEDB for ODBC + VFP ODBC .. хотя бы для исключения подозрения на "кривизну"
← →
Сергей М. © (2008-03-03 12:28) [106]Вот строка подключения для связки ADO -> OLEDB for ODBC -> VFP ODBC:
Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="DSN=Visual FoxPro Database;UID=;SourceDB=g:\DBASES\SOME_VFPDB_DIR;SourceType=DBF;Exclusive=No;Back groundFetch=Yes;Collate=Machine;Null=Yes;Deleted=Yes;"
p.s. Флаг ShareDenyNone убрать нафих !
← →
Palladin © (2008-03-03 12:29) [107]
> Сергей М. © (03.03.08 12:23) [105]
угу... согласен...
← →
DimOk (2008-03-03 12:36) [108]
> Provider=MSDASQL.1;Persist Security Info=False;Extended
> Properties="DSN=Visual FoxPro Database;UID=;SourceDB=g:\DBASES\SOME_VFPDB_DIR;
> SourceType=DBF;Exclusive=No;Back groundFetch=Yes;Collate=Machine;
> Null=Yes;Deleted=Yes;"
Еще хуже.... среда повисла..... :(
← →
Сергей М. © (2008-03-03 12:40) [109]
> DimOk (03.03.08 12:36) [108]
>
>
Я так и не понял. у тебя vfp odbc установлен или нет ?
← →
DimOk (2008-03-03 12:42) [110]
> Я так и не понял. у тебя vfp odbc установлен или нет ?
Да. Но когда я в ODBC выбираую поставщика Microsoft Visual FoxPro Table , то вылетает ошибка инициализации поставщика :(
← →
sniknik © (2008-03-03 12:43) [111]> Еще хуже.... среда повисла..... :(
а DSN "Visual FoxPro Database" у тебя есть? чтобы к нему подключаться...
а вообще, все это как как мертвому припарки... настройками не поможешь, реализацию/логику менять надо.
← →
DimOk (2008-03-03 12:44) [112]
> DSN "Visual FoxPro Database"
В данном случа Table а не Database
← →
Сергей М. © (2008-03-03 12:45) [113]
> В данном случа Table а не Database
>
по барабану.
И так и эдак должнго работать
← →
sniknik © (2008-03-03 12:50) [114]> В данном случа Table а не Database
нет. в данном случае как раз таки Database, т.к. реплика была к
DimOk (03.03.08 12:36) [108]
...
> Еще хуже.... среда повисла..... :(
а там указано в подключении вовсе не Table.
← →
DimOk (2008-03-03 12:52) [115]Наверное у меня драйвер не правильно работает.... Сейчас опять пустой проект создали попробовал через ODBC Ошибка SQLSetConnectAttr драйвера.
← →
Kolan © (2008-03-03 12:54) [116]А ты параметры в диалоге выбираешь?
← →
DimOk (2008-03-03 12:56) [117]
> А ты параметры в диалоге выбираешь?
Нет, только прописываю путь и имя источника данных
← →
Kolan © (2008-03-03 12:58) [118]> Нет, только прописываю путь и имя источника данных
А ты дважды на TADOConnection кликни и построй эту строку с пом диалога.
← →
DimOk (2008-03-03 13:02) [119]
> А ты дважды на TADOConnection кликни и построй эту строку
> с пом диалога.
Я так и делаю..... Если я выбираю в качестве поставщика Microsoft OLE DB Provider for Visual FoxPro то все работает но очень медленно, если я выбираю ODBC и на вкладке подключение выбираю имя источника данных Visual FoxPro Database/Tablset и устанавливаю начальный каталог D:\safe\best\base\filinew\sclad жму тест - ошибка.
← →
DimOk (2008-03-03 13:03) [120]
> Tablset
Tables - опечатка
← →
Palladin © (2008-03-03 13:05) [121]что можно посоветовать... распрощатся нафик с этим монстром...
← →
Сергей М. © (2008-03-03 13:11) [122]Флаг ShareDenyNone снял ?
Сними вообще все флаги ...
← →
Сергей М. © (2008-03-03 13:26) [123]А что такого удивительного может храниться в таблице, если все ее поля типа мемо ? Вот что еще любопытно ..
← →
sniknik © (2008-03-03 13:27) [124]> если я выбираю ODBC и на вкладке подключение выбираю имя источника данных Visual FoxPro Database/Tablset
настрой провайдера в самом DSN ODBC, если он у тебя вообще есть (ODBC и OLEDB для VFP это разные провайдеры, ставятся раздельно, и в новую винду не включаются. (раньше ODBC включался))
← →
sniknik © (2008-03-03 13:35) [125]> что можно посоветовать... распрощатся нафик с этим монстром...
ага. любого с управлением чего не справился считать монстром, и распрощаться нафик...
а когда все кончится? %) что делать? ;)
← →
DimOk (2008-03-03 14:07) [126]
> если все ее поля типа мемо ? Вот что еще любопытно ..
Только 4 [75]
← →
Kolan © (2008-03-03 14:12) [127]> Только 4 [75]
Это значит что всего их 75?
← →
DimOk (2008-03-03 14:15) [128]
> Это значит что всего их 75?
4 из 26
← →
Сергей М. © (2008-03-03 14:15) [129]
> Только 4
Хотя бы одно из них тебя в выборке интересует ?
Если нет, то зачем эти поля у тебя участвуют в выборке ?
← →
DimOk (2008-03-03 14:20) [130]
> Хотя бы одно из них тебя в выборке интересует ?
> Если нет, то зачем эти поля у тебя участвуют в выборке ?
>
Это было сказанно когда я пытался работать с ADOTable, сейчас исправился использую ADODataSet c select field1, field2,...... fieldn from table, но результат тот же.
← →
Kolan © (2008-03-03 14:22) [131]> select field1, field2,… fieldn from table, но результат
> тот же
Предлагается сократить список этиф филдов до нужного.
← →
Сергей М. © (2008-03-03 14:23) [132]Действительно, нафига тебе куча филдов в запросе, если тебя интересует всего одно поле для заполнения твоего комбобокса значениями этого поля ?
← →
DimOk (2008-03-03 14:25) [133]
> Предлагается сократить список этиф филдов до нужного.
Вроде получается.... всем спасибо
← →
Kolan © (2008-03-03 14:25) [134]20 сек — может это и есть объективная скорость выборки на твоем железе. В QueryAnalyzer"e (как там для фокса аналог называется) выполнить надо запрос, и посмотреть.
← →
Kolan © (2008-03-03 14:26) [135]> Вроде получается… всем спасибо
Что получается? Ты сокращаеь список и у тебя это получается?
← →
DimOk (2008-03-03 14:30) [136]
> Что получается? Ты сокращаеь список и у тебя это получается?
Да, в запросе выбрал только два конкретных поля и он стал выполняться около 4-ех секунд
← →
Сергей М. © (2008-03-03 14:37) [137]
> два конкретных поля
Включая как минимум одно мемо-поле ?
← →
DimOk (2008-03-03 14:40) [138]
> Включая как минимум одно мемо-поле ?
Нет, только типа char и double :)
← →
Сергей М. © (2008-03-03 14:45) [139]И результат в <= 4 сек - это с учетом [98] или без ?
← →
DimOk (2008-03-03 14:47) [140]
> И результат в <= 4 сек - это с учетом [98] или без ?
Без.
← →
DimOk (2008-03-03 14:48) [141]
> И результат в <= 4 сек - это с учетом [98] или без ?
А с этим еще быстрее !!!! :)
← →
Сергей М. © (2008-03-03 14:49) [142]Ну а с учетом этого еще минимум в 2 раза быстрей будет.
← →
Kolan © (2008-03-03 14:51) [143]+ еще сразу количество уменьшить до того, как показываешь и будет нормально.
← →
Сергей М. © (2008-03-03 14:53) [144]
> DimOk
Похоже, что из-за бестолкового привлечения тобой в запросе мемо-полей львиная доля времени уходила на вынужденное открытие файлов с мемо-данными и позиционирование в них. Чего сам Фокс по умолчанию, естественно, не делал в таких же условиях.
← →
DimOk (2008-03-03 14:55) [145]
> Похоже, что из-за бестолкового привлечения тобой в запросе
> мемо-полей львиная доля времени уходила на вынужденное открытие
> файлов с мемо-данными и позиционирование в них. Чего сам
> Фокс по умолчанию, естественно, не делал в таких же условиях.
>
Я не профи но думаю так же и полностья с вами согласен. Всем еще раз большое спасибо! :)
← →
Сергей М. © (2008-03-03 14:56) [146]
> А с этим еще быстрее
А если еще async fetch прикрутить, то вообще со свистом пролетать будет)
← →
DimOk (2008-03-03 14:58) [147]
> async fetch
А это что за зверь такой.....?
← →
Сергей М. © (2008-03-03 15:00) [148]См. TADOTable.ExecuteOptions
← →
DimOk (2008-03-03 15:05) [149]
> См. TADOTable.ExecuteOptions
Cool! Вообще летает :)
← →
Сергей М. © (2008-03-03 15:06) [150]
> что за зверь такой
Впрочем для твоей задачи этот "пролет со свистом" будет скорей более вреден, чем полезен - тебе ж надо предоставить юзеру твои 20 тыс. записей сразу, а не "частями" по мере их загрузки.
← →
DimOk (2008-03-03 15:09) [151]
> Впрочем для твоей задачи этот "пролет со свистом" будет
> скорей более вреден, чем полезен - тебе ж надо предоставить
> юзеру твои 20 тыс. записей сразу, а не "частями" по мере
> их загрузки.
Вообще то да, но и 2-4 секунды можно подождать ..... :)
← →
Сергей М. © (2008-03-03 15:23) [152]Чудненько)
Осталась самая "малость" - [25]...
← →
DimOk (2008-03-03 15:27) [153]
> Осталась самая "малость" - [25]...
Ну это я думаю у меня трудносте не вызовет, т.к. результаты запросов уже приходилось сортировать, да и в справке написанно про это понятней уже не куда. Но.......... если что начну новуу тему, как сортировать выборку из таблицы имеющую одну колонку..... :))
← →
Сергей М. © (2008-03-03 15:34) [154]
> результаты запросов уже приходилось сортировать
Нафига сортировать результат, если можно получить уже сортированную выборку ?
см.
SELECT SomeField OREDR BY SomeField
На сравнительно больших НД существующий индекс по полю SomeField по результирующей скорости выполнения запроса наверняка обставит любой изощренный алгоритм сортировки на стороне клиента.
← →
DimOk (2008-03-03 15:38) [155]
> см.
> SELECT SomeField OREDR BY SomeField
Большое спасибо за подсказку! Буду пробовать все это воплощать в жизнь....:)
← →
Anatoly Podgoretsky © (2008-03-03 18:49) [156]> DimOk (03.03.2008 11:09:16) [76]
А нафига нам обсуждать один нереальный запрос, а у тебя совсем другой крутится.
Приведеный запрос никогда не сможет исполниться.
Страницы: 1 2 3 4 вся ветка
Текущий архив: 2008.03.30;
Скачать: CL | DM;
Память: 0.86 MB
Время: 0.033 c