Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.046 c
2-1216032987
alexalex
2008-07-14 14:56
2008.08.17
печать


15-1214730717
Kostafey
2008-06-29 13:11
2008.08.17
С днем рождения ! 29 июня


9-1173617382
Аццкий_рыцарь
2007-03-11 15:49
2008.08.17
Проблема со столкновением


2-1215755547
Андрей Пл
2008-07-11 09:52
2008.08.17
TDBNavigator в вертикальном виде?


15-1214669750
Tommy
2008-06-28 20:15
2008.08.17
async professional





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