![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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;";
ты говоришь, что я буду использовать текущее значение, так чего обижаешься