![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
DBGrid и unixtime [D7, MySQL]
Jungle Forever! © (2005-04-25 20:01:00)Посоветуйте пожалуйста
есть типа такого запроса SELECT *, FROM_UNIXTIME(date1, '%H:%i:%s') as gmt_date FROM senders
Поле date1 типа varchar(11). Cодержит либо время в unixtime либо NULL.
Если значение поля date1 не пустое, то время вернет нормально, но если значение NULL, то в gmt_date будет 00:00:00, что вполне логично, но мне нужно чтобы при выводе в DBGrid, если date1=NULL, была пустая строка, а не нули. Это возможно сделать только с помощью mysql? Если нет, то какие решения существуют? date1 используется в куче всяких статистик, поэтому хранить время в обычном формате нельзя. А выводить результат sql-запроса в StringGrid очень не хочется
Jungle Forever! (2005-04-26 12:14:00) [1]Всё, получилось. Всем огромное спасибо :)
Johnmen (2005-04-26 12:13:00) [2]Вот-вот. Не существует поля-то :)
sniknik (2005-04-26 12:07:00) [3]> Ошибка возникает на определении обработчика события OnGetText, а не в самом обработчике.
именно про это я и думал, на присвоении -> BGrid4.Fields[4].OnGetText:=OnGetText;
почему уже обьясняли.
только я не обратил внимание куда ты это присваиваеш (показалось, логично полю), а у тебя через грид, тогда кроме того что говорилось надо еше и открытие таблици добавить до этого к полм через грид доступа не будет (если они конечно в десигне не описаны).
т.е. + к onShow, после открытия таблици привязаной к этому гриду.
а то чтоне мог найти, так искал не там, оно находится в данных а не компоненте эти данные отображающие...
Jungle Forever! (2005-04-26 11:56:00) [4]>Anatoly Podgoretsky
я не смог найти :(
у DBGrid.Сolumns вобще нет ни одного event'а.
Процедуру обработки определил в type TMain = class(TForm)
Anatoly Podgoretsky (2005-04-26 11:49:00) [5]Определение создается просто, двойным щелчком по событию OnGetText, соответствующего поля, в инспекторе объектов.
Jungle Forever! (2005-04-26 11:32:00) [6]>sniknik
Ошибка возникает на определении обработчика события OnGetText, а не в самом обработчике.
ставить на TMain.onShow пробовал - тоже самое. Компоненты DBExpress изначально на датамодуле размещались и сам датамодуль создается раньше формы TMain.
Anatoly Podgoretsky (2005-04-26 11:20:00) [7]Johnmen © (26.04.05 09:42) [3]
Почему не поможет, не зная ее синтаксиса приведу общее стандартное решение
IFNULL(date1=NULL; NULL; FROM_UNIXTIME(date1, '%H:%i:%s'))
sniknik (2005-04-26 10:46:00) [8]проверь
procedure TMain.OnGetText(Sender: TField; var Text: String; DisplayText: Boolean);
begin
DisplayText:= not Sender.isNull;
end;
(возможно функция отрабатывает как раз нормально, а преобразование уже на момент отображения...)
но к AV это вряд ли имеет отношение, сдесь дело в чемто другом. например в procedure TMain.Form Create(Sender: TObject); ??? переставь это присвоение на onShow, или базовые компоненты помести в датамодуль а его создание поставь раньше главной формы.
но только не вали на DBExpress и т.д., запомни главный глюк в компьютере это ты!!! ;о))) пока не разобрался как это работает...
Johnmen (2005-04-26 10:32:00) [9]Видимо на момент определения обработчика геттекст для поля №4 самого поля не существует.
Jungle Forever! (2005-04-26 10:18:00) [10]Пробовал еще изменять обработчик DataSet'а - тоже самое, AccessViolation
SimpleDataSet10.FindField('gmt_date').OnGetText := OnGetText;
Jungle Forever! (2005-04-26 09:57:00) [11]>Johnmen ©
Да, OnGetText похоже то, что нужно, но есть какя-то проблема. Сделал так:
procedure TMain.FormCreate(Sender: TObject);
begin
DBGrid4.Fields[4].OnGetText:=OnGetText;
end;
procedure TMain.OnGetText(Sender: TField; var Text: String; DisplayText: Boolean);
begin
if (Text = '00:00:00') then Text := '';
end;
Delphi вылетает с ошибкой EAccessViolation
Я использую для доступа DBExpress - может с ним что-то связано?
Johnmen (2005-04-26 09:42:00) [12]>Anatoly Podgoretsky © (26.04.05 09:05) [2]
Да, там есть ф-ия IFNULL, но ни она, ни ей подобные здесь не помогут.
Anatoly Podgoretsky (2005-04-26 09:05:00) [13]Это FROM_UNIXTIME видимо какая то встроеная или самописная функция, которая или неправильно работает или работает не так как ожидается тобой. Может в MySQL есть какая ни будь условная функция типа IIF/CASE, то используй ее для определения NULL и выдачи уже нужного значения или обрабатывай date1 на клиенте или ищи функцию, которая соответствует твоим ожиданиям.
Johnmen (2005-04-25 21:57:00) [14]OnGetText