![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Написание потомка DataSet [D7]
Inq © (2006-09-19 22:59:00)Цель такая: "Написать компонент-потомок DataSet, реализующий "Виртуальную таблицу". Сам компонент не хранит в себе данные, а лишь предоставляет методы доступа к ним. Компонент должен поддерживать индексацию, поиск, события On... и т.д."
Вопросы у меня к Вам такие:
1. Где и в каком виже можно хранить данные, если используешь такой компонент?
2. Собственно, для чего такой компонент можно использовать? Какой механизм работы программы с таким компонентом?
sniknik (2006-09-20 17:53:00) [1]> Это не имеет отношения к вычисляемым полям.
согласен, но как еще оценивать нереализванную часть? (это же пример`с!) где брать onCalcFields при его остутствии? (где ты его взял в том примере?)
> Все хватит спорить. Я аргементы привел. Дальше пусть каждый останется при свем мнении.
еще раз согласен.
atruhin (2006-09-20 17:11:00) [2]> onGetText
Это не имеет отношения к вычисляемым полям.
Все хватит спорить. Я аргементы привел. Дальше пусть каждый останется при свем мнении.
sniknik (2006-09-20 16:55:00) [3]> А то что в Calculeted поле отображает данные первого поля вы считаете нормально? (delphi 6, delphi 7)
картинку показать? у меня показывает или пусто или то что я туда "насчитал" (D7). "считал" в onGetText т.к. в примере не многие свойства/события попросту не выведены/нереализованы код (когда он был, и был мой геттекст) был Text:= IntToStr(Sender.DataSet.RecNo);.
никаких исправлений кода примера кроме этого не делал.
atruhin (2006-09-20 16:09:00) [4]> [18] sniknik © (20.09.06 15:45)
Ну мы говорим не о Вашем MySuperPuperMethod(), а о написании потомка датасета. Причем даже не о том сложно или нет его написать, а о отсутствии документации, и неверных сведениях в литературе например см.
> [17] atruhin © (20.09.06 15:43)
А ошибка там существенная. Т.к. Field.Index - индекс поля для отображения и сответствует номеру поля только изначально, если например передвиныть поле в DBGrid, то начнутся интересные глюки.
А для правильного определения номера поля, необходимо использовать, примерно такую конструкцию:
if Field.Calculated then
Result:=(PChar(Buffer)+FCalckPosition+Field.Offset)
else
Result:=(PChar(Buffer)+FListOffsets[Field.FieldNo]);
atruhin (2006-09-20 15:54:00) [5]> открыли, добавили, нормально работает... (не заставлял)
А то что в Calculeted поле отображает данные первого поля вы считаете нормально? (delphi 6, delphi 7)
> с чего это обязательно? насколько понимаю это на усмотрние
> разработчика (тебя то есть), если ничего не выделял то ничего
> и чистить не нужно.
В том то и дело что нет, этот буфер выделяет TDataset, при создании пользователем вычисляемых полей.
> вполне нормальная, информативная статья. + дельфевский пример
> + немного усилий = сдача курсовой...
Я непосредственно учавствовал в разработке компонент описанных в статье (в основном именно доводка датасета, так как он наиболее полно соответствовал моей задаче). И обсуждали с Николаем неописанные в статье моменты, описанные неточности :) и т.д. Была идея доделать статью, но ни у кого не было времени.
sniknik (2006-09-20 15:45:00) [6]> нужен не ответ, а ссылка на хелп или литературу где это описанно.
а мне нужна ссылка на документацию на MySuperPuperMethod(), я его весде использую (сам и написал), а документации почемуто до сих пор не встречал...
atruhin (2006-09-20 15:43:00) [7]> [10] Anatoly Podgoretsky © (20.09.06 14:01)
Кстати, только что посмотрел, в "Delphi 5, Руководство разработчика" Тейксейра, Пачеко в методах GetFieldData, SetFieldData есть очень грубая ошибка.
sniknik (2006-09-20 15:43:00) [8]atruhin © (20.09.06 15:12) [11]
> Открываем пример, в датасет добавляем вычисляемое поле ...
открыли, добавили, нормально работает... (не заставлял)
> А главное, перекрывать его нужно обязательно
с чего это обязательно? насколько понимаю это на усмотрние разработчика (тебя то есть), если ничего не выделял то ничего и чистить не нужно.
Inq (20.09.06 15:17) [12]
> Единственная статья, которую я нашёл
вполне нормальная, информативная статья. + дельфевский пример + немного усилий = сдача курсовой...
(большой недостаток статьи конечно (для тебя), что нет готового примера "вывода" который можно просто скачать и сдать как свое... ну ищи дальше, наверняка есть гдето и готовое)
atruhin (2006-09-20 15:29:00) [9]> [10] Anatoly Podgoretsky © (20.09.06 14:01)
На вопросы которые я задал выше, нужен не ответ, а ссылка на хелп или литературу где это описанно.
atruhin (2006-09-20 15:28:00) [10]> [12] Inq (20.09.06 15:17)
Не плохая, только лучше возьми с сайта Николая, http://www.stikriz.narod.ru/, и скачай исходники, они неплохо прокоментированны.
Посмотри также:
http://www.rsdn.ru/article/delphi/dbaware.xml
atruhin (2006-09-20 15:23:00) [11]Процедуры:
function GetFieldData(Field: TField; Buffer: Pointer): Boolean;
procedure SetFieldData(Field: TField; Buffer: Pointer);
Должны сохранять/возвращать значение для поля Field, что принципиально неправильно реализованно в примере TextData, и как должно быть?
Inq (2006-09-20 15:17:00) [12]>>> Постарайся взять у педагога другое задание. Дело в том что написание нормально работающего датасета, полностью ни где не документированно. Искал на русском и на английском, ни чего :(
Взять другое задание пытался ещё во время выдачи :) Не вышло.
Единственная статья, которую я нашёл - http://www.delphimaster.ru/articles/dataset/index.html
atruhin (2006-09-20 15:12:00) [13]Ну что же, привоже конкретику.
1. О примере в поставке Delphi. Открываем пример, в датасет добавляем вычисляемое поле, смотрим что получилось. Пытаемся заставить нормально работать :).
2. По вопросам.
например метод ClearCalcFields(Buffer: PChar), как он должен работать? А главное, перекрывать его нужно обязательно, но в хелпе он не упомянут.
Anatoly Podgoretsky (2006-09-20 14:01:00) [14]Пока абстрактный наезд, хочешь, что бы он был конкретным, то приводи конкретику.
atruhin (2006-09-20 13:52:00) [15]> [8] sniknik © (20.09.06 13:25)
Ерунду говорите товарищь. Я раньше к Вам серьезнее относился.
По вопросу.
> а что действительно нужно так это реализовать методы взаимодействия
> с datasource
Вот как ни странно, а именно это уже реализованно в датасете, и трогать это не нужно.
> вот по ним подозреваю есть полная инфа (неохота смотреть)
В том то и проблемма, что ты подозреваешь, а я знаю о чем говорю.
> пример смотрел... и значит знаю уже похоже больше тебя по
> этому вопросу
Мало знаешь, по этому вопросу, точнее ничего не знаешь. Так как пример показывает вывод в 1 столбец нескольких строк, и его невозможно расширить, он не правильно спроектирован. Как я уже говорил Борланд отсылает не к примеру а исходникам.
> в вопросе (и вообще) нет необходимости писать его с нуля,
> там говорится о наследнике
Я о нем и говорю. И если ты готов спорить, могу привести 3 вопроса НЕОБХОДИМЫХ для создания потомка, а Вы найдете описание реализации/методов в хелпе/литературе, не в исходниках. А пока с Вашей стороны пустые некомпетентные высказывания.
sniknik (2006-09-20 13:25:00) [16]с чего решил что не занимался?... пример смотрел... и значит знаю уже похоже больше тебя по этому вопросу...
> которые НЕОБХОДИМЫ для создания DS
в вопросе (и вообще) нет необходимости писать его с нуля, там говорится о наследнике... в родителе которого эти "необходимые" внутренние методы уже есть... а что действительно нужно так это реализовать методы взаимодействия с datasource, вот по ним подозреваю есть полная инфа (неохота смотреть).
atruhin (2006-09-20 13:08:00) [17]> [6] sniknik © (20.09.06 12:52)
Остряк! Зачем такие высказывания о проблемме которой ни когда не занимался? Т.к. если бы занимался то знал, что в хелпе на половину внутренних методов (которые НЕОБХОДИМЫ для создания DS) нет описания, другие вообще не упомянуты.
sniknik (2006-09-20 12:52:00) [18]> Дело в том что написание нормально работающего датасета, полностью ни где не документированно.
а в хелпе смотрели?
хотя не уверен, вернее, наверняка нет того, чего подозреваю ждали... типа "пособие по созданию датасет для чайников, по шагам с 0 и до получения продукта на выходе после прочтения"... нет. такого нет. но описания работы, исходные коды, простой пример от борланда, это все есть.
atruhin (2006-09-20 12:31:00) [19]> [4] Inq (20.09.06 01:16)
Постарайся взять у педагога другое задание. Дело в том что написание нормально работающего датасета, полностью ни где не документированно. Искал на русском и на английском, ни чего :(. Где то встречал что Борланд сам отсылает к исходникам. Если возмешся писать буди готов изучать материал разбирая чужие исходные тексты.
PS Хотя если написать просто чтобы сдать, то можно попробовать по литературе (Тексейра & Паченко, Кнут) и по статьям, немного есть.
Inq (2006-09-20 01:16:00) [20]В 99.9% случаев такая формулировочка -это верный признак того, что педагог заставил...
Так и было...