![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Переключение DataSource в runtime [D7, MSSQL]
Crazzy © (2004-06-10 13:17:00)Есть такой кусок кода
form:=TForm(Application.FindComponent(formName));
ds := TDataSource.create(self);
ds := TDataSource(form.FindComponent(dsName));
Query1.SQL.Clear;
//Query1.Parameters.Clear;
//Query1.DataSource := nil;
//Query1.Active:=false;
Query1.DataSource:=ds;
ds.destroy;
Первый раз отрабатывает нормально, когда второй раз вызывается последняя строка с другим DataSource, выкидывает ошибку, что не найден параметр. Имя параметра он почему-то берёт из старого DataSource, что бы я ни писал.
Help plz!!!
sniknik (2004-06-10 15:59:00) [1]кстати, вполне возможно что вот это
ds := TDataSource(form.FindComponent(dsName));
будет примерно эквивалентно этому
ds:= TDataSource(0);
даже в первый раз, второй то раз гарантировано.
sniknik (2004-06-10 15:51:00) [2]Sandman25 © (10.06.04 15:39) [9]
если код такого же плана (по обкурке видать писали), то еще и не такие чудеса возможны.
Crazzy © (10.06.04 13:17)
две строчки лишние (если вообще об этом можно судить без задачи)
ds := TDataSource.create(self);
и
ds.destroy;
убери их, работать будет лучше, и еще лучше(просто таки здорово будет работать) если сделаеш датамодуль и не будеш компоненты по формам искать.
Sandman25 (2004-06-10 15:39:00) [3]All
Недавно кто-то жаловался на похожую ситуацию - при присвоении Query.DataSource сохранялись ссылки на Param из предыдущего DataSource.
HSolo (2004-06-10 15:33:00) [4]Для начала пусть учится правильно ставить задачу, а потом - решать ее оптимальным способом :) Может, там ничего и (пере)создавать не надо
Anatoly Podgoretsky (2004-06-10 15:30:00) [5]А вот это еще более странное
ds := TDataSource.create(self);
ds := TDataSource(form.FindComponent(dsName));
Признайся у кого такой текст взял?
Курдль (2004-06-10 15:27:00) [6]Да что вы все за советы даете? Пусть научится к объектам доступаться и узнает, как их создавать / освобождать ресурсы.
Sandman25 (2004-06-10 15:22:00) [7]Crazzy © (10.06.04 13:17)
Попробуйте создать Query1 заново
HSolo (2004-06-10 15:14:00) [8]>Поэтому то и приходится менять DataSource и сам текст запроса
Даже если меняется текст запроса, зачем DataSource-то пересоздавать? Если нужно разорвать связь DataSource с Query, то достаточно:
DataSource.DataSet := nil;
// действия с Query1
DataSource.DataSet := Query1;
Курдль (2004-06-10 14:33:00) [9]У меня такое впечатление, что Вы получили форму от чужого дяди и единственное, что Вам известно - это текстовые наименования объектов... :(
Crazzy (2004-06-10 13:41:00) [10]Просто текст запроса и количество параметров в нём зависит от того, на каком пункте меню кликнули. Поэтому то и приходится менять DataSource и сам текст запроса. Насчёт ds.destroy - не знаю, может и на самом деле не надо. Отлаживаю этот кусок чуть ли не неделю :)
Курдль (2004-06-10 13:20:00) [11]А зачем это все?
(Особенно ds.destroy;)