Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

String - как это объяснить? [D5, Win2k]


turusov ©   (2002-10-28 10:38:00) 

Произошла (случилась) не понятная ситуация. При получении строки из одного объекта, ее значение при добавлении в строковую переменную происходит не замещение на новое значение, а добавление.//TP – названо для сокращения
function TP.GetIndexOptions: string; //property IndexOptions – опции индексов
begin
[1]
if Assigned(IndexDef) then begin
with IndexDef do begin //в проге GetSetProp
if ixPrimary in Options then Result:= Result + "ixPrimary;";
if ixUnique in Options then Result:= Result + "ixUnique;";
if ixCaseInsensitive in Options then Result:= Result + "ixCaseInsensitive;"; //и так далее
end;//with
end else Result:= "";
end;
А вот этот объект получает IndexOptions каждого индекса
Var P: TP; s: string;- только для проверки
for k:= 0 to Indexes.Count - 1 do begin
P:= TP(Indexes.Item[k].Data);
if Assigned(P) then begin
s:= P.IndexOptions;
Result:= Result + Format("%s"#9"%s"#9"%s"#13#10, [P.IndexName, P.IndexFields, s]);
end;
end;//for
Что происходит: P.IndexOptions – возвращает к примеру "ixCaseInsensitive;’, а s – выдает предыдущее значение "ixPrimary;ixUnique;ixCaseInsensitive;"+ P.IndexOptions.
Нормальное выполнение произошло, только тогда, когда на место [1]поставлено Result:= "";


turusov   (2002-10-28 11:12:00) [1]

Ребята в душе я все прекрасно понамаю, что и как. Возможно мне нужно было послушать Ваши версии произошедшего. Но меня смущает только одно, почему САМА среда выдает при s:= P.IndexOptions -> P.IndexOptions как ixCaseInsensitive, s как ixPrimary,ixUnique,ixCaseInsensitive,ixCaseInsensitive (последнее 2 раза), а TreeView как P.IndexOptions


Anatoly Podgoretsky   (2002-10-28 11:03:00) [2]

turusov © (28.10.02 10:56)
Никаких особенностей, кроме воли программиста, система точно выполнило твое требование


turusov   (2002-10-28 10:58:00) [3]

> Separator, а как с GetSetProp из uses TypInfo


turusov   (2002-10-28 10:56:00) [4]

Просто при работе с обьектами, методами существует какаято инициализация. И во многих случаях это выручало и нормально работало. И почему получаемое значение отлично от значения переменной. Или всетаки есть особенность с длинными строками?
Типа с одним #0 или #0#0


Separator   (2002-10-28 10:51:00) [5]

with IndexDef do begin
Result:= ""


Anatoly Podgoretsky   (2002-10-28 10:51:00) [6]

Вот вместо этого end else Result:= "";

Первой строкой Result:= ""; и без ненужного else


turusov   (2002-10-28 10:49:00) [7]

Я не обежаюсь
//в проге GetSetProp
s:= P.IndexOptions; - обьект ы


Anatoly Podgoretsky   (2002-10-28 10:44:00) [8]

А вот строками
if ixPrimary in Options then Result:= Result +"ixPrimary;";
ты говоришь, что я буду использовать текущее значение, так чего обижаешься


Наверх

Титульная страница Поиск, карта сайта Написать письмо