![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос по набору данных в ADOTable [D7, MSSQL]
KyRo © (2006-07-20 18:09:00)Как сделать что бы когда переводиш ADOTable.active в True он не подтягивал из базы все данные из таблицы потому что на это время программа получается залипает.
Подскажите как сделать что бы он вообще не подтягивал
записи или хотя бы чтоб подтягивал последних например пару тысяч .
KyRo (2006-07-21 16:40:00) [1]Все переделал TADOQuery подошол вроде все отлично . Всем спасибо.
sniknik (2006-07-21 15:33:00) [2]> Почему именно TADOQuery ?
потому что после ADOTable и он тебе сказкой покажется...
а вообще, родные для ADO, это ADOConnection, ADOCOmmand, ADODataSet, RDCConnection их и надо использовать при необходимости, все остальное в корзину однозначно.
KyRo (2006-07-21 14:19:00) [3]Спасибо буду эксперементировать , а то с ростом базы задержка не заметная по началу начинает напрягать.
Stanislav (2006-07-21 14:17:00) [4]Там все методы как у TADOTable, единственное что ты можешь написать SQL на выборку т.е. вместо имени таблицы пишешь SELECT * FROM MYTABLE WHERE...
А Insert, Edit,POst все есть, как и у ADOTable
KyRo (2006-07-21 14:14:00) [5]
> Используй TADOQuery
Почему именно TADOQuery ?
Stanislav (2006-07-21 14:10:00) [6]Используй TADOQuery
KyRo (2006-07-21 14:06:00) [7]
> но поменять компанент на ADODataSet всетаки лучше (да и
> не сложно совсем, 800 строк переписывать не придется, только
> одну практически, просто имя оставь ADOTable1 а тип ему
> поменяй...)
Тогда вопрос я смогу через тот же ADOCOmmand добовлять строки в формате
Inco_Table.Insert;
Inco_Table.FieldByName('ID_ATM_NAME').Value:=ATM_Name_Id;
Inco_Table.FieldByName('TRANS_INFO').Value:=Trans[2];
Inco_Table.post;
?
Или там надо на SQL Писать Insert (итд.) ?
sniknik (2006-07-21 12:08:00) [8]описываеш тип
type
TMyADOTable = class(TADOTable);
и вместо ADOTable1.Open; пишеш
ADOTable1.TableName:= 'SELECT * FROM '+ADOTable1.TableName+' WHERE 1=2';
with TMyADOTable(ADOTable1) do begin
CommandType:= cmdText;
Open;
end;
понятно, что если писать в имя сразу запрос то переприсвавать его будет не надо, а если CommandType заранее поставить в cmdText то и этого не надо будет делать (возможно... может меняется гдето по ходу. проверь), тогда сработает и стандартный Open.
но поменять компанент на ADODataSet всетаки лучше (да и не сложно совсем, 800 строк переписывать не придется, только одну практически, просто имя оставь ADOTable1 а тип ему поменяй...)
Stanislav (2006-07-21 11:45:00) [9]KyRo (21.07.06 11:36) [9]
Не пойму что можно там переделывать?
Наоборот (с ADOCOmmand или ADOQuery на ADOTable) я бы еще понял.
Desdechado © (21.07.06 11:38) [10]
Думаю на 0,5-1ч :-).
Desdechado (2006-07-21 11:38:00) [10]> переделывать придется строк так 800
ха-ха 3 раза
на час-два работы
KyRo (2006-07-21 11:36:00) [11]
> 2 недостатка такогого способа, первый нестандартное и нецелевое
> использование компонента (единственная достойная цель для
> ADOTable это оказаться в корзине), второе медленное добавление
> по сравнению с тем же ADOCommand. если это не отпугивает
> то могу показать как сделать.
Покажи если не сложно . Потому что действительно переписывать код скорее всего уже поздно да и переделывать придется строк так 800.
Stanislav (2006-07-21 09:44:00) [12]Можно заменить AdoTable на ADOQuery, а имя дать ему, то которое было у таблицы. Не думаю что переделывать придется много.
sniknik (2006-07-21 08:46:00) [13]Slym © (21.07.06 05:18) [6]
сам по себе способ с условием имеет право на жизнь... (хотя если надо только identity вернуть то тут наверное лучше делать запрос из двух команд, инсерт и селект идентити, от конкретики зададач конечно зависит, может и не лучше)
изврат в том что придется запрос пихать в ADOTable... а он вообщето не для этого.
(о том для чего он можно спорить, борландом для него вкладывался такой призрачный смысл как "для облегчения перехода" с BDE в основном (и еще 2 компанента)... но по-моему ничего ини не облегчают, только путают, и мешают когда оказывается, что старые стереотипы не срабатывают на более новых технологиях)
Slym (2006-07-21 05:18:00) [14]sniknik © (20.07.06 20:24) [5]
с невыполняющимся условием
:) я также делаю когда ident вернуть нуна...
SELECT * FROM table WHERE false;
вернет 0 записей, но добавляемые будут видны и соответственно будут видны генерируемые значения полей.
sniknik (2006-07-20 20:24:00) [15]вообщето "проблему" решить можно, но это будет очень через... эээ, задницу, так мягко скажем.
достаточно вспомнить чей наследник ADOTable... и прописать в него запрос с невыполняющимся условием, вот и не будет при открытии "подтягивать" ни одной записи, а добавлять будет можно.
2 недостатка такогого способа, первый нестандартное и нецелевое использование компонента (единственная достойная цель для ADOTable это оказаться в корзине), второе медленное добавление по сравнению с тем же ADOCommand. если это не отпугивает то могу показать как сделать.
(и не приходи потом спрашивать как ускорить ;о)
Anatoly Podgoretsky (2006-07-20 20:05:00) [16]KyRo (20.07.06 19:04) [2]
Тем более, не нужен ADOTable - это все таки двухнаправленный компонент.
Ega23 (2006-07-20 19:12:00) [17]
> Кроме как поменять компонент на другой не как нельзя решить
> эту проблему?
Никак.
KyRo (2006-07-20 19:04:00) [18]В том то и дело что я через ADOTable.
просто добавляю записи в базу мне не надо просматривать данные. Переделывать мне как то не хочетса потому что придется переписывать довольно не малый кусок кода.
Кроме как поменять компонент на другой не как нельзя решить эту проблему?
Desdechado (2006-07-20 18:16:00) [19]Посмотреть параметры компонентов.
И не использовать ADOTable.
> последних например пару тысяч
Отсортировать в обратном порядке и брать первые пару тысяч или сформулировать условие в ADOCommand.