Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2017.02.12;
Скачать: CL | DM;

Вниз

Обратиться к датасету через имя   Найти похожие ветки 

 
yurikon   (2011-07-29 11:26) [0]

Добрый день!

Как выполнить такой трюк: зная имя датасета, получить на него ссылку. Что-то типа
ADOConnection.DatasetByName("имя").  ....

без перебора всех датасетов в соединении и сравнении их имен.

Задача может более общая: ссылка на любой компонент через его имя. В VFP помнится была удобная штука, как макроподстановка:
&имя. - и работай себе с объектом.

Подскажите, как в делфи такое проделать?


 
sniknik ©   (2011-07-29 12:13) [1]

> &имя. - и работай себе с объектом.
не поверишь, но в дельфи примерно то же самое...
только так
имя. - и работай себе с объектом.
или
имяродителя.имя. - и работай себе с объектом.
или
имямодуля.имяродителя.имя. - и работай себе с объектом.
смотря куда ты его впихнул, и откуда пытаешься достучатся.

если непременно хочется искать то попробуй FindComponent... хотя он думается все вперемешку найдет с adocommand и т.д. но если имена датасетов всегда начинать с DS например, а команды с Cmd, то не пересекутся.
ну или по списку в DataSets пробежаться.


 
SQLEXPRESS   (2011-07-29 12:21) [2]

function TForm1.GetDS(Name: String; var DS: TADODataSet): Boolean;
var
 C: TComponent;
begin
 C := FindComponent("ads1");
 if C <> nil then
   if C is TADODataSet then
   begin
     DS := TADODataSet(C);
     Result := True;
   end;
end;


 
SQLEXPRESS   (2011-07-29 12:47) [3]

кстати, почему в этой функции, без первой строки, даётся подсказка, что результат может быть неопределен?
Разве не принято, что булевый результат функции по умолчанию - false?

function TForm1.GetDS(Name: String;  var DS: TADODataSet): Boolean;
var
 C: TComponent;
begin
 Result := False;  // < ------------------------- первая строка
 C := FindComponent(Name);
 if C <> nil then
   if C is TADODataSet then
   begin
     DS := TADODataSet(C);
     Result := True;
   end;
end;


 
sniknik ©   (2011-07-29 12:59) [4]

> Разве не принято, что булевый результат функции по умолчанию - false?
нет умолчаний,
есть не определенная переменная в стеке, память под которой возможно использовалась, и содержащая "мусор". т.е. - результат может быть не определен.


 
yurikon   (2011-07-29 13:53) [5]


> не поверишь, но в дельфи примерно то же самое...
> только так
> имя. - и работай себе с объектом.
> или
> имяродителя.имя. - и работай себе с объектом.
> или
> имямодуля.имяродителя.имя. - и работай себе с объектом.


sniknik, я в курсе как к объектам в делфи обращаться :-)

Вопрос был про другое: есть у меня например в строковой переменной S имя объекта (датасета в частности) и я хочу к нему обратиться сразу, без поиска и переборов. В VFP можно сделать &s.Open например.


 
sniknik ©   (2011-07-29 15:25) [6]

в любом скриптовом языке так можно, но дельфи полноценный компилятор.

логику своей работы меняй...


 
MsGuns ©   (2011-08-01 09:33) [7]

Для "обращения" к любому заранее неизвестному объекту определенного класса можно написать процедуру, где в качестве параметра указать этот самый объект.
Что касается именно датасетов, то, как правило, обращаться нужно к тому, что например отображается в активном гриде. В этом случае спасет такая связка

 ds: TDataSet;

 if (Screen.ActiveControl<>nil) and (Screen.ActiveControl is TDBGrid) then
    ds := (Screen.ActiveControl as TDBGrid).DataSource.DataSet;
 if ds.Assigned then
   ...


 
Ega23 ©   (2011-08-01 10:47) [8]

if (Screen.ActiveControl<>nil) and (Screen.ActiveControl is TDBGrid) then
   ds := (Screen.ActiveControl as TDBGrid).DataSource.DataSet;
if ds.Assigned then


Небезопасно. Фтопку.


 
DiamondShark ©   (2011-08-01 12:11) [9]


> есть у меня например в строковой переменной S имя объекта
> (датасета в частности) и я хочу к нему обратиться сразу,
>  без поиска и переборов

А зачем?


 
Cobalt ©   (2011-08-03 13:08) [10]

Если ты не отдаешь это "на сторону" то проще задать константы-соответствия, и на них ориентироваться.
соответственно в коде
case dsIndex of
 dsTovar:
 dsSells:
 ...
end


А вообще вопрос куцый, мало исходных данных.



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

Текущий архив: 2017.02.12;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.005 c
2-1433138949
Anthony68
2015-06-01 09:09
2017.02.12
Функциональная кнопка на тачскрине Windows 8


15-1457821350
Германн
2016-03-13 01:22
2017.02.12
Russinovich &amp; Portmon


2-1433331962
guest
2015-06-03 14:46
2017.02.12
интерактивность сервиса на лету...


15-1457857799
pavelnk
2016-03-13 11:29
2017.02.12
Демоны


3-1311924368
yurikon
2011-07-29 11:26
2017.02.12
Обратиться к датасету через имя