Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Ehlib

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37

Открыть новую тему     Написать ответ в эту тему

Rounder2000

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго дня.
Подскажите плиз как сделать та, чтобы на Title колонки не сробатывало popupMenu
Т.е. оно должно срабатывать в любой точке грида кроме title.
Или на крайний случай, как получить имя колонки, на title которой было нажато правой клавишей мыши.
Спасибо.

Всего записей: 81 | Зарегистр. 19-01-2007 | Отправлено: 14:17 19-01-2007
vserd

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ответ на пост  relictus в http://forum.ru-board.com/topic.cgi?forum=33&topic=6679&start=1780#lt
 
relictus
 

Цитата:
И если хочешь автоматической сортировки/фильтрации ни вкоем случае не создавай обработчиков соответствующего действия. Иначе автоматика не работает.  
И поставить /*FILTER*/ и Order By в отдельную строку в самое начало.
 
А можно по-подробнее насчет этого?  

 
А доку почитать? А исходный код посмотреть?
для того чтобы EHLib начал фильтровать, нужно в отдельную строку запроса поставить /*FILTER*/ 1=1, причем обязательно на первую позицию.
пример:

Код:
 
Select * From MyTable where /*FILTER*/ 1=1 не работает
Select * From MyTable where  
   /*FILTER*/ 1=1                                         не работает
Select * From MyTable where  
/*FILTER*/ 1=1                                            работает
 

тоже самое и для ORDER BY.
 

Цитата:
 для DBISAM там ничего-то нет!! А именно этот engine используется в проекте

Попробуй написать его самостоятельно. просто сравни как сделано в других DataService-ах, или используй Memtable.

Всего записей: 2065 | Зарегистр. 08-05-2002 | Отправлено: 10:41 01-02-2007
relictus

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vserd
Спасибо! Пишу свой модуль для DBISAM'a.
A запросы пока мне не понадобились - в гриде тупо сидит одна табличка из 4-х полей. Но все равно спасибо, когда-нибудь эта инфа будет востребована

Всего записей: 3716 | Зарегистр. 19-04-2005 | Отправлено: 10:52 01-02-2007
Dauren111



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а события OnCellDbClick у Ehlib нету  
как заменить?

Всего записей: 182 | Зарегистр. 05-01-2006 | Отправлено: 14:31 01-02-2007
relictus

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как грамотно на сабжевом гриде реализовать такое:
в гриде отображается напрямую содержимое одной таблицы, причем значениями последнего поля являются числа, которые могут быть равны нулю. Что надо сделать, чтобы в гриде, строка имеющая в том поле 0 отображалась, к примеру, красным цветом?
Через OnGetCellParams могу подобраться только к конкретной ячейке, но не строке...

Всего записей: 3716 | Зарегистр. 19-04-2005 | Отправлено: 17:01 01-02-2007
vserd

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Именно через GetCellParams и получается доступ. Данный код отрисовывает всю строку желтым цветом.
 
procedure TfrmCommonGridFormWithPeriod.DBGridEh1GetCellParams(Sender: TObject;
  Column: TColumnEh; AFont: TFont; var Background: TColor; State: TGridDrawState);
begin
  inherited;
  if Assigned(IBQuery.FindField('IS_FOLDER')) and (not IBQuery.IsEmpty) then  
    if (IBQuery.FieldByName('IS_FOLDER').Value) then Background := clYellow;
end;

Всего записей: 2065 | Зарегистр. 08-05-2002 | Отправлено: 17:15 01-02-2007
SERGE_BLIZNUK

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dauren111
Цитата:
а события OnCellDbClick у Ehlib нету  как заменить?

могу предложить крайне кривое решение - если не найдёте лучше - тогда можете попытаться - через установку меток в CellClick и проверке их на onDblClick Подробнее...
Удачи.

Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 18:12 01-02-2007
relictus

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vserd
Что-то не так... у меня такой код меняет бэкграунд только в ОДНОЙ ячейке (в той где 0), а не во всей строке!
 
procedure TForm1.DBGridEhSkladGetCellParams(Sender: TObject; Column: TColumnEh;
  AFont: TFont; var Background: TColor; State: TGridDrawState);
begin  
  inherited;
  if (Column.FieldName = 'KOLVO') and (Column.Field.Value = 0) then Background := clYellow;
end;
 
Что я делаю не так?

Всего записей: 3716 | Зарегистр. 19-04-2005 | Отправлено: 09:36 02-02-2007
vserd

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
у меня такой код меняет бэкграунд только в ОДНОЙ ячейке (в той где 0), а не во всей строке!  

Этот код работает правильно. Он и должен закрашивать фон только у одной ячейки.  
Внимательно почитай и подумай почему. :)
 

Цитата:
Что я делаю не так?  

Column. А вот и ответ.
 
Попробуй так:
if Sender is TDBGridEh then
  if  Assigned(TDBGridEh(Sender).DataSource.Dataset.FindField('KOLVO'))  and  
     (TDBGridEh(Sender).DataSource.Dataset.FieldByName('KOLVO').value = 0)
  then Background := clYellow;
     
Возможно со скобками напутано, но должно работать.  

Всего записей: 2065 | Зарегистр. 08-05-2002 | Отправлено: 10:47 02-02-2007
relictus

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vserd Гениально! Работает! ) Но в чем фишка-то? Что в моем коде обрабатывалась только одна ячейка - это понятно, но почему в твоем - вся строка, не пойму! Если не сложно, объясни! Можно в личку.

Всего записей: 3716 | Зарегистр. 19-04-2005 | Отправлено: 11:23 02-02-2007
Just_Perf

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
вопрос по EhLib
есть форма с gridEh. Align грида по клиентскому окну. грид через мемотаблицу (МТ) берет данные с sql запроса.
вопрос таков: при открытии формы в MT отображаются все записи запроса и onCellClick отрабатывается прекрасно. как только разворачивавется клиенское окно (и, следовательно, грид вместе с ним) строки, которые ранее не входили в область грида, не отрабатывают указанное событие... словно их и нет...
если работать без MT (напрямую с запросом), то грид ведет себя корректно. свойства МТ всячески перепробовал, fetchall стоит по умолчанию. в чем м.б. проблема?

Всего записей: 141 | Зарегистр. 15-01-2002 | Отправлено: 11:58 02-02-2007
vserd

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
relictus
Потому что в твоем коде, анализируется значение ТЕКУЩЕЙ КОЛОНКИ грида.
В моем коде анализируется значение ПОЛЯ ТЕКУЩЕЙ ЗАПИСИ в таблице.
 
Когда ты осознаешь в чем разница, такой код будешь ловить на раз.

Всего записей: 2065 | Зарегистр. 08-05-2002 | Отправлено: 12:38 02-02-2007
relictus

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Знатоки сабжа, ну подскажите в чем дело?? см. скриншот (46 кб) http://i16.tinypic.com/2v14saa.jpg
Простенькая таблица, но почему одна строка фильтруется, а другая нет?? Голову уже сломал
Поля п/п: char(150), currency, integer

Всего записей: 3716 | Зарегистр. 19-04-2005 | Отправлено: 14:36 09-02-2007
vserd

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
relictus
IMHO "прелести" вещественных чисел, число в базе не точно 3138,45 а к примеру  
3138,4500000000000001 или 3138,4499999999999999999.
Так что смотри что реально у тебя лежит в таблице.
 
 

Всего записей: 2065 | Зарегистр. 08-05-2002 | Отправлено: 15:59 09-02-2007
relictus

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vserd
в базе реально лежит число с двумя знаками после запятой, ибо тип поля = currency!

Всего записей: 3716 | Зарегистр. 19-04-2005 | Отправлено: 16:07 09-02-2007
vserd

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
relictus

Цитата:
в базе реально лежит число с двумя знаками после запятой, ибо тип поля = currency!

Вобще-то учите матчасть! взято с hччp://www.elevatesoft.com/dbisam4d5_data_types_null_support.htm

Цитата:
 
Currency fields are the same as Float fields except they are identified in a special way to allow for Delphi, Kylix, and C++Builder to format their values as monetary values when displayed as strings. The equivalent Delphi, Kylix, and C++Builder TFieldType is ftCurrency, the TField object used for Currency fields is the TCurrencyField object, and the equivalent SQL data type is MONEY.
 
Note
Don't confuse the Currency field type with the Currency data type found in Delphi, Kylix, and C++Builder. The Currency field type is essentially still a floating-point number and is not always good for storing exact monetary values, whereas the Currency data type is a fixed-point data type that minimizes rounding errors in monetary calculations. If you wish to have accurate financial figures that use up to 4 decimal places stored in DBISAM tables then you should use the BCD data type described next.
 
 

 
Вобще-то даже Делфийский currency если я правильно путаю и справка меня в этом убеждает имеет вещественную природу, хотя и храниться в целочисленном значении, но может иметь 4 знака после запятой.
Currency    -922337203685477.5808.. 922337203685477.5807    19-20    8

Всего записей: 2065 | Зарегистр. 08-05-2002 | Отправлено: 16:25 09-02-2007
SERGE_BLIZNUK

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
relictus
Цитата:
Простенькая таблица, но почему одна строка фильтруется, а другая нет?? Голову уже сломал  
точно не скажу - НО, на 99% виновато округление! Т.е. там нет суммы 3138.45 руб (а есть, например, 3138.44987 - при отображении двух знаков, после запятой - она округляется....) Попробуйте либо в запросе сделать округление, либо добавить вычисляемое поле, либо, чтобы убедиться, что это не так, сделайте отображение хотя бы пяти знаков после запятой - убедитесь, что там точное число.
Кстати, можете подключиться к таблице через накой-нибудь SQL Navigator - и глянуть, что же за цена фактически в базе по "Плате S775 ..."
 
sorry, если не угадал причину.... ;-))

Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 16:37 09-02-2007
relictus

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vserd
сенькс! а ведь я это читал! но не обратил внимания, что currency
Цитата:
 is not always good for storing exact monetary values


Всего записей: 3716 | Зарегистр. 19-04-2005 | Отправлено: 16:39 09-02-2007
SERGE_BLIZNUK

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Сорри за тормознутость. Пока открыл страничку. Отвлёкся на минуту - тут уже целая дискуссия ;-)))))

Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 16:47 09-02-2007
relictus

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как правильно реализовать следующее:
булевское поле отображается в дбгриде как CheckBox (галкой). При клике на ячейке значение меняется, но в БД не сохраняется пока не произойдет переход на другую запись, т.е. пока поле не выйдет из режима редактирования. А как сразу сохранять изменения в БД, не выходя из ячейки грида?

Всего записей: 3716 | Зарегистр. 19-04-2005 | Отправлено: 14:57 12-02-2007
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Ehlib


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru