Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Круглый стол
  
Правила КС
>> Настройки

Фильтр вопросов
>> Новые вопросы
отслеживать по
>> Новые ответы

Избранное

Страница вопросов
Поиск по КС


Специальные проекты:
>> К л ю к в а
>> Г о л о в о л о м к и

Вопрос №

Задать вопрос
Off-topic вопросы

Помощь

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  15:15[Войти] | [Зарегистрироваться]
Ответ на вопрос № 72938

17-09-2009 11:53
Возникла проблема  необходимо в DBGrid добавить новое поле(5) (даже три) при условии что совпадает дата одной строки с датой  другой строки в существующем поле(4), при этом соответствующее значение поля(3) совпадающей дате поля(4) необходимо поместиь в туже строку созданного поля(5).

[+] Добавить в избранные вопросы

Отслеживать ответы на этот вопрос по RSS

Ответы:


Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице.
Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.

08-10-2009 01:50 | Сообщение от автора вопроса
Задача такая: имеется набор данных из 6 полей. Поля с 1 по 3 совпадают. Четвертое поле "дата". Пятое "дата возм. поступ. товара" 6 поле "количество". Необходимо чтобы в DBGrid выводить в одну строку записи где "даты" совпадают, " дата возм. поступ." не выводим, а значения "количества" каждой совпадающей по дате записи выводить в отдельном поле , но в эту же строку. Понимаю, что все же лучше привести набор данных к такому виду, но запросом нереально это сделать, а вот хран. процедурой можно, но она повиснет в базе -не хотелось бы "засорять", так как процедура простенькая. Может есть возможность создать временную процедуру, чтоб после выполнения она удалялась. Как это сделать я не знаю ни разу не делал. Работаю с базами данных Firebird 2.0

07-10-2009 15:43 | Вопрос к автору: запрос дополнительной информации
А теперь после Вашего поста от 07-10-2009 09:32 отставим в сторону заданный Вами вопрос. Начните "от Адама", то бишь изложите доходчиво суть разрабатываемой программы, а не то, каким путем пытались решить задачу.

07-10-2009 11:47
если ДА то в выч. поле2 заносим значение 260, но в строку1, а не в строку2, а строку2 вообще не выводим.

Ну и пирожки с котятами! Только теперь выплыло, что всем Королевством совершенно иную задачу задачу решали ...

07-10-2009 09:32 | Сообщение от автора вопроса
Да это то понятно я так и делаю. Но в том то и дело что каждое вычисляемое поле соответствует определенной записи в запросе. Как же я смогу присвоить сразу трем выч. полям значения если я шагаю по записям и в каждой оно только одно. Мне необходимо проверять что в строке2  поле "ДАТА" совпадает  с полем "ДАТА" строки1 кроме значения поля "ДАТА ПОСТУПЛЕНИЯ" (visible:=false)и  естественно необходимое мне 260 ,если ДА то в выч. поле2 заносим значение 260, но в строку1, а не в строку2, а строку2 вообще не выводим. И так след. запись пока "ДАТА" перестанет совпадать.

07-10-2009 07:37
У меня сейчас
1строка поле1/поле2/поле3/дата/выч.поле1(250)
2строка поле1/поле2/поле3/дата/    /выч.поле2(260)
3строка поле1/поле2/поле3/дата/    /        /выч.поле3(270)
Мне необходимо так:если дата совпадает
поля1,2,3 совпадают
то:
1строка поле1/поле2/поле3/дата/выч.поле1/выч.поле2/выч.поле3


Все проще пареной репы.

1. В редакторе полей заранее должно быть создано необходимое количество вычисляемых полей.

2. В коде события OnCalcFields просто проверяете значения реальных полей (поля 1, 2 и 3) из запроса согласно условию/условиям и или присваиваите значение такого поля нужному вычисляемому полю - или выч.поле1 или выч.поле2 или выч.поле3 или сразу нескольким (оно тогда отобразится в нужной ячейке Grid'е), если же ни одно условие не выполняется, то просто ничего не делайте, и ничего отображаться не будет. Надеюсь, что написать такой несложный код проблемы не составит даже начинающему. Справка по OnCalcFields в помощь.

07-10-2009 04:24 | Сообщение от автора вопроса
Спасибо за ответ. Правильно значения вычисляемых полей создаются для каждой записи. Пример
На самом деле запрос выводит такую таблицу
1строка поле1/поле2/поле3/дата/250
2строка поле1/поле2/поле3/дата/260
3строка поле1/поле2/поле3/дата/270
Если дата совпадает то необходимо создавать новое поле и записывать так:
1строка поле1/поле2/поле3/дата/250/260/270

У меня сейчас
1строка поле1/поле2/поле3/дата/выч.поле1(250)
2строка поле1/поле2/поле3/дата/    /выч.поле2(260)
3строка поле1/поле2/поле3/дата/    /        /выч.поле3(270)
Мне необходимо так:если дата совпадает
поля1,2,3 совпадают
то:
1строка поле1/поле2/поле3/дата/выч.поле1/выч.поле2/выч.поле3

07-10-2009 03:35
>>>Необходимо значения вычисляемых полей(их 4)в DBGridе заносить в одну строку как это сделать, по другим полям данная запись совпадает(условие совпадения и является созданием вычисляемого поля).

Походу Вы ошиблись.
не
>>>заносить в одну строку
а в одну ячейку

Давайте наведем порядок.
1. Вычисляемые поля создаются для все записей (строк). А вот значение вычисляемого поля "может быть", а "может и не быть". Количество полей для ВСЕХ записей (строк) одинаковое. А значения - разные.
2. Если Вы начинающий, то лучше сразу воспользоваться схемой:
- состав полей таблиц должен отображать Вашу модель данных, желательно не нарушая 1,2 и 3 нормальные формы
- все, что можно для подготовки набора данных, реализовывать на SQL
- все, что не получилось SQL, делать вычисляемыми полями
- все, что не получилось SQL и вычисляемыми полями, делать событием OnGetText
- на крайний случай делать уже в DBGrid событием OnDrawDataCell
3. Желательно останавливаться на SQL, тогда у Вас результирующие наборы данных будут максимально независимы от конкретного "интерфейсного" приложения (технологии), компонентного решения (TQuery и т.д.), элементов управления (DBGrid, DBEdit и т.д.).
4. Понижая зависимость от специфики реализации Вы даете "долгую жизнь" и универсальность Вашему приложению.

06-10-2009 09:09 | Сообщение от автора вопроса
Подскажите еще один момент. Необходимо значения вычисляемых полей(их 4)в DBGridе заносить в одну строку как это сделать, по другим полям данная запись совпадает(условие совпадения и является созданием вычисляемого поля).

18-09-2009 03:54
777 Спасибо. Я начинающий программист поэтому извините за "тугодумство". Идею понял большое Вам спасибо за помощь.

18-09-2009 03:39
Более подробно если записи по полю "Даты" совпадают, то записи "уровней" приходящихся на эти даты необходимо записать в новых колонках и отобразить эту информацию в DBGrid мне это лучше сделать в DBGrid или необходимо перестроить DataSet(формируется SQL запросом).

Опять двадцать пять. Как вижу, Вы так ничего не вынесли из уже данных Вам ответов.

Растолковываю. Во-первых, наконец оставьте в покое DBGrid. Все делается на уровне DataSet'а (TQuery), и только его, выполняющего запрос. И ничего ни в какие колонки записывать не надо. Создайте в редакторе полей необходимое количество вычисляемых полей (о чем писал Всеволод), и в событии OnCalcFields по соответствующему алгоритму присваивайте (или не присваивайте, если оно не должно им присваиваться) им значения в зависимости от того, что находится в полях выбираемых SQL-запросом. Если колонки в DBGrid созданы в редакторе, то создайте их и для этих вычисляемых полей.

Разъяснение:
если записи по полю "Даты" совпадают, то записи "уровней" приходящихся на эти даты
Вот и присваивайте нужное значение соответствующему вычисляемому полю, если даты не совпадают - то нет.

18-09-2009 03:03
Более подробно если записи по полю "Даты" совпадают, то записи "уровней" приходящихся на эти даты необходимо записать в новых колонках и отобразить эту информацию в DBGrid мне это лучше сделать в DBGrid или необходимо перестроить DataSet(формируется SQL запросом).

18-09-2009 01:20
добавить поле для отдельно взятой записи нельзя. а добавить "колонку" в принципе - можно.
можно в Вашем DataSet-е добавить вычисляемое поле (Calculated Field), значение которого Вы можете задавать как хотите. Для этого надо описать событие OnCalcFields.
зачитайте раздел "вычисляемые поля" в любом доступном для Вас учебнике.

18-09-2009 01:15
Хорошо если я свяжу DBGrid с набором данных у меня сформируется таблица смогу я программно( не через Colummns editor) добавить  новую колонку и затем данные из существующей колонки по определенному условию перенести в новую чтобы получить необходимую мне таблицу в DBGrid. Заранее спасибо за ответы.

17-09-2009 13:32
необходимо в DBGrid добавить новое поле

В DBGrid нет полей, в нем вообще ничего нет. Данные, которые он всего лишь отображает, находятся в DataSet, к которому он подключен через DataSource. В DbGrid есть колонки, связанные с полями DataSet'а. Поля можно добавлять в DataSet (а также управлять их видимостью), но никак не в DBGrid. В DBGrid можно только добавлять колонки (и связывать их с полями набора данных) или управлять их видимостью.

Добавьте свое cообщение

Вашe имя:  [Войти]
Ваш адрес (e-mail):На Королевстве все адреса защищаются от спам-роботов
контрольный вопрос:
Раз дощечка, два дощечка будет лесенка. Раз словечко, два словечко, будет ЧТО?
в качестве ответа на вопрос или загадку следует давать только одно слово в именительном падеже и именно в такой форме, как оно используется в оригинале.
Надоело отвечать на странные вопросы? Зарегистрируйтесь на сайте.
Тип сообщения:
Текст:
Жирный шрифт  Наклонный шрифт  Подчеркнутый шрифт  Выравнивание по центру  Список  Заголовок  Разделительная линия  Код  Маленький шрифт  Крупный шрифт  Цитирование блока текста  Строчное цитирование
  • вопрос Круглого стола № XXX

  • вопрос № YYY в тесте № XXX Рыцарской Квинтаны

  • сообщение № YYY в теме № XXX Базарной площади
  • обсуждение темы № YYY Базарной площади
  •  
     Правила оформления сообщений на Королевстве

    Страница избранных вопросов Круглого стола.
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования