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

Вниз

Работа с реестром   Найти похожие ветки 

 
Саша   (2008-07-01 21:20) [0]

Подскажите, пожалуйста, как проверить существование определенного Строкового параметра в определенной ветке реестра.


 
Сергей М. ©   (2008-07-01 21:25) [1]

см. TRegistry.ReadПоБарабануКакойТип()

При несуществовании значения с запрашиваемым тобой именем метод возбудит исключение.


 
Игорь Шевченко ©   (2008-07-01 22:07) [2]


> Подскажите, пожалуйста, как проверить существование определенного
> Строкового параметра в определенной ветке реестра.


valueexists ?


 
Loginov Dmitry ©   (2008-07-01 23:44) [3]

> При несуществовании значения с запрашиваемым тобой именем
> метод возбудит исключение.


У строк не возбуждает.


 
Riply ©   (2008-07-01 23:54) [4]

> [0] Саша   (01.07.08 21:20)
> Подскажите, пожалуйста, как проверить существование определенного
> Строкового параметра в определенной ветке реестра.

Зависит от "в определенной ветке реестра".
В общем случае это невозможно (ну пусть будет: "довольно сложно").
Дело в том, что могут быть проблеммы с правами.


 
Сергей М. ©   (2008-07-02 00:20) [5]


> У строк не возбуждает


Это почему же ?

Вот цитата из "генофонда":


function TRegistry.GetData(const Name: string; Buffer: Pointer;
 BufSize: Integer; var RegData: TRegDataType): Integer;
var
 DataType: Integer;
begin
 DataType := REG_NONE;
 if RegQueryValueEx(CurrentKey, PChar(Name), nil, @DataType, PByte(Buffer),
   @BufSize) <> ERROR_SUCCESS then
   raise ERegistryException.CreateResFmt(@SRegGetDataFailed, [Name]);

...

function TRegistry.ReadString(const Name: string): string;
var
 Len: Integer;
 RegData: TRegDataType;
begin
 Len := GetDataSize(Name);
 if Len > 0 then
 begin
   SetString(Result, nil, Len);
   GetData(Name, PChar(Result), Len, RegData);
   if (RegData = rdString) or (RegData = rdExpandString) then
     SetLength(Result, StrLen(PChar(Result)))
   else ReadError(Name);


 
Loginov Dmitry ©   (2008-07-02 00:40) [6]

> Вот цитата из "генофонда":


Если строковой переменной в реестре нет, то GetDataSize() вернет -1, а функция ReadString() - пустую строку.

Вот недостающий фрагмент функции ReadString():

 end
 else Result := "";
end;


 
Сергей М. ©   (2008-07-02 00:48) [7]


> Loginov Dmitry ©   (02.07.08 00:40) [6]


Да, ты прав.

Но логика эта довольно странная.

На месте

else Result := "";

по идее должно было быть

else ReadError(..);


 
Loginov Dmitry ©   (2008-07-02 00:57) [8]

> Но логика эта довольно странная.


Имхо, не более странная, чем NULL="" у Оракла и Парадокса :)

Что есть, то и используем, и на том спасибо! :)



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

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

Наверх




Память: 0.48 MB
Время: 0.02 c
2-1215254494
RealSwift
2008-07-05 14:41
2008.08.03
Перевести запрос к MDB из VB в DELPHI


6-1190972431
botaniQ
2007-09-28 13:40
2008.08.03
Переход в TWebBrowser...


2-1215154260
uno-84
2008-07-04 10:51
2008.08.03
Проблема с переходом по ссылке


15-1213859829
antarion
2008-06-19 11:17
2008.08.03
Вакансия программиста Delphi


2-1215364824
lewka
2008-07-06 21:20
2008.08.03
ColorDialog