Форум: "Базы";
Текущий архив: 2008.08.17;
Скачать: [xml.tar.bz2];
ВнизAddFieldDef - бага в DB.pas Найти похожие ветки
← →
TFieldDefs (2008-02-22 16:01) [0]Всем, привет. На днях парился с багой:
procedure TForm1.Button1Click(Sender: TObject);
var
Dataset: TDataset;
FieldDefs: TFieldDefs;
FieldDef1: TFieldDef;
FieldDef2: TFieldDef;
begin
Dataset := TDataset.Create(nil);
FieldDefs := Dataset.FieldDefs;
FieldDef1 := FieldDefs.AddFieldDef();
FieldDef1.Name := "Field2";
FieldDef2 := FieldDefs.AddFieldDef(); //бага
FieldDef2.Name := "Field1";
end;
После долгих мучений дошло, что ошибка в исходниках DB.pas Они генерят имя для элемента коллекции не проверяя что такой элемент существует, а потом сами же и ругаются...
В общем напмсал простенькую функцию:
function AddFieldDef(const AFieldDefs: TFieldDefs;
const AName: WideString): TFieldDef;
begin
Result := TFieldDef.Create(nil);
Result.Name := AName;
Result.Collection := AFieldDefs;
end;
Может кому поможет...
← →
sniknik © (2008-02-22 16:36) [1]> Может кому поможет...
вряд ли. тебе же не помогло... пример есть в хелпе. рабочий...
> В общем напмсал простенькую функцию:
крута! вместо исправления собственное бага с наименованиями полей. (лучше бы вообще не присваивал имена, полагаясь на автоматические, нет же, присвоить надо специально именно то что следующее "в списке на авто присвоение", а после "бороться". малацца.)
← →
TFieldDefs (2008-02-22 20:24) [2]
> вряд ли. тебе же не помогло... пример есть в хелпе. рабочий.
> ..
В смысле? Я юзаю свою функцию и она работает.
> крута! вместо исправления собственное бага с наименованиями
> полей.
Где бага с именованием? Т.е. То что Борланд сам сгенерил имя, не проверил что такое уже есть, потом при инсерте итема в коллекцию ругнулся - это типа нормально? :)
← →
Palladin © (2008-02-22 20:57) [3]
> TFieldDefs (22.02.08 16:01)
да да да... ты просто не в курсе великой вещи :)
создай новое приложение Poroject1
кинь две кнопки на пустую форму, ширину выставь примерно в 100, чтобы надписи видно было...
назначь обработчик button1.onclick
и пропиши в обработчикеprocedure TForm1.Button1Click(Sender: TObject);
begin
Button1.Caption:="Я буттон 1";
Button1.Name:="";
Button2.Name:="Button1";
Button1.Caption:="нет это я буттон 1 !!!";
end;
наслаждайся...
← →
sniknik © (2008-02-22 21:09) [4]> Где бага с именованием?
FieldDef1.Name := "Field2";
FieldDef2.Name := "Field1";
зачем давать имена из тех что и так поставяться только намерено путая порядок? если бы они хотябы были осмысленные... но тогда бы "глюка" не было бы.
или давал бы по порядку
FieldDef1.Name := "Field1";
FieldDef2.Name := "Field2";
тоже не было бы. хотя так, оно уже есть, "автоматом" без присваиваний.
> потом при инсерте итема в коллекцию ругнулся - это типа нормально? :)
абсолютно. это же ошибка этапа разработки, а проверки = тормоза на исполнении...
хотя ладно, объяснять не буду, имхо, бесполезно. вместо этого можно устроить голосование, пока голосов 1 vs 1.
← →
sniknik © (2008-02-22 21:18) [5]>> вряд ли. тебе же не помогло... пример есть в хелпе. рабочий.
> В смысле?
ты посмотрел в хелп на рабочий и правильный пример прежде чем осчастливить мир своим творением? а с чего ты взял, что комуто, оно поможет? его же не просто получить ткнув в F1, его еще пор инету разыскать надо! т.что толпа рационализаторов не смотря ни на хелт ни проводя поиски твоего творения накатает кучу своего бессмысленного кода... и ринется в инет осчастливливать остальных со словами "Может кому поможет...". ... такой вот круговорот ламеризма в интернете.
← →
Johnmen © (2008-02-22 21:22) [6]
> такой вот круговорот ламеризма в интернете.
Неплохо...:)
← →
Palladin © (2008-02-22 21:22) [7]
> sniknik © (22.02.08 21:18) [5]
как ты жестоко пессиместичен и в то же время прав :)))
← →
Loginov Dmitry © (2008-02-22 23:44) [8]> Dataset := TDataset.Create(nil);
А разве это не абстрактный класс? Пользуйся TTable, TQuery, а TDataset зачем мучаешь?
← →
TFieldDefs (2008-02-25 08:56) [9]
> зачем давать имена из тех что и так поставяться только намерено
> путая порядок? если бы они хотябы были осмысленные... но
> тогда бы "глюка" не было бы.
Все намного сложнее. Поля генерятся в ран-тайме, и я утрировал пример, только для того что-бы проще показать багу.
Представте что у Вас строятся полей 20, где-то 5-ым создался филд с названием Field14, а потом когда я 14-ым хочу создать скажем ContactName, я этого уже не могу - A compomponent Field14 already exists. И типа это нормально?
Возможно ламеризм, только у Борланда.
← →
имя (2008-02-25 08:56) [10]Удалено модератором
Примечание: имя в ветке не менять! см. правила.
← →
sniknik © (2008-02-25 12:17) [11]> A compomponent Field14 already exists. И типа это нормально?
да. также как ты не можеш создать в рантайм Button14 если у тебя в десигне уже положено 14 батонов на форму и имена ты им с автоматических не менял.
раз такой умный предложи другой способ именования компонент в VCL, только не говори что [0] твой способ... мало приятного будет при "ложении" любого компонента на форму каждый раз вводить его имя...
имя должно быть автоматическим(для десигна) и понятным(их люди используют).
> Возможно ламеризм, только у Борланда.
ню ню.
напиши свой VCL который естественно будет супер профессиональным, без багов... только работать с ним будут нельзя (гарантировано, если по всему остальному такие же "претензии").
← →
TFieldDefs (2008-02-25 12:54) [12]
> да. также как ты не можеш создать в рантайм Button14 если
> у тебя в десигне уже положено 14 батонов на форму и имена
> ты им с автоматических не менял.
Немного не то... У формы нет метода - создать кнопку где сам создает сам же и имя генерит, а у TFildDefs есть, причем передать параметром нельзя имя, которое я хочу присвоить новому элементу. Вместо этого получаю багу...
← →
Amoeba © (2008-02-26 22:54) [13]
> TFieldDefs (25.02.08 12:54) [12]
>
>
> > да. также как ты не можеш создать в рантайм Button14 если
> > у тебя в десигне уже положено 14 батонов на форму и имена
> > ты им с автоматических не менял.
>
> Немного не то... У формы нет метода - создать кнопку где
> сам создает сам же и имя генерит, а у TFildDefs есть, причем
> передать параметром нельзя имя, которое я хочу присвоить
> новому элементу. Вместо этого получаю багу...
LMD!!!
← →
Германн © (2008-02-27 01:26) [14]
> TFieldDefs (25.02.08 12:54) [12]
>
>
Имя нужно только в design-time! В run-time оно (имя) идёт лесом. Оно абсолютно не нужно. А тот, кто что-то ставит в Name при создании компонента в run-time должен последовать совету Amoeba © (26.02.08 22:54) [13].
← →
TFieldDefs (2008-02-27 13:29) [15]
> Имя нужно только в design-time! В run-time оно (имя) идёт
> лесом. Оно абсолютно не нужно.
Да что Вы говорите? Как Вы думаете с каким именем будет создан Field после:
...
FieldDef1.CreateField(Dataset);
...
Отвечу за Вас. Оно будет создано с именем которое было в FieldDef1.Name
И если после создания филда не заменить ему FieldName на то что будет в запросе, то получим еще багу - о том что поля такого-то не существует. Зачем мне еще раз ходить по коллекции филдов и подменять то что нагенерил Борланд?
Почему я не могу сразу это сделать?
← →
TFieldDefs (2008-02-27 13:32) [16]
> Почему я не могу сразу это сделать?
откат. Можно. В метод CreateField можно передать это имя.
← →
sniknik © (2008-02-27 18:12) [17]> И если после создания филда не заменить ему FieldName
?
а нам голову морочишь Name-ом... (болит голова, а уколы знаете куда назначили... вот и подумайте какая связь?)
> Почему я не могу сразу это сделать?
потому что ты делаешь не то, что нужно (/в хелпе прописано), а то что тебе хочется (а хочется тебе показать какой борланд "глюкавый" а ты умный... только оно все наоборот)
← →
Amoeba © (2008-02-27 20:09) [18]
> TFieldDefs (27.02.08 13:29) [15]
>
>
> > Имя нужно только в design-time! В run-time оно (имя) идёт
> > лесом. Оно абсолютно не нужно.
>
> Да что Вы говорите? Как Вы думаете с каким именем будет
> создан Field после:
>
> ...
> FieldDef1.CreateField(Dataset);
> ...
>
> Отвечу за Вас. Оно будет создано с именем которое было в
> FieldDef1.Name
> И если после создания филда не заменить ему FieldName на
> то что будет в запросе, то получим еще багу - о том что
> поля такого-то не существует. Зачем мне еще раз ходить по
> коллекции филдов и подменять то что нагенерил Борланд?
> Почему я не могу сразу это сделать?
>
Нечего нга зеркало пенять, коли рожа крива. (c) Народная мудрость.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2008.08.17;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.052 c