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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.002 c
15-1457821350
Германн
2016-03-13 01:22
2017.02.12
Russinovich &amp; Portmon


15-1457472038
Kilkennycat
2016-03-09 00:20
2017.02.12
Что делает эта штуковина?


1-1335616761
Дмитрий Белькевич
2012-04-28 16:39
2017.02.12
Есть ли в кодировке GB18030 русские буквы?


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


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





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский