Форум: "Базы";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];
ВнизDBGrid и unixtime Найти похожие ветки
← →
Jungle Forever! (2005-04-25 20:01) [0]Посоветуйте пожалуйста
есть типа такого запроса 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 очень не хочется
← →
Johnmen © (2005-04-25 21:57) [1]OnGetText
← →
Anatoly Podgoretsky © (2005-04-26 09:05) [2]Это FROM_UNIXTIME видимо какая то встроеная или самописная функция, которая или неправильно работает или работает не так как ожидается тобой. Может в MySQL есть какая ни будь условная функция типа IIF/CASE, то используй ее для определения NULL и выдачи уже нужного значения или обрабатывай date1 на клиенте или ищи функцию, которая соответствует твоим ожиданиям.
← →
Johnmen © (2005-04-26 09:42) [3]>Anatoly Podgoretsky © (26.04.05 09:05) [2]
Да, там есть ф-ия IFNULL, но ни она, ни ей подобные здесь не помогут.
← →
Jungle Forever! (2005-04-26 09:57) [4]>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 - может с ним что-то связано?
← →
Jungle Forever! (2005-04-26 10:18) [5]Пробовал еще изменять обработчик DataSet"а - тоже самое, AccessViolation
SimpleDataSet10.FindField("gmt_date").OnGetText := OnGetText;
← →
Johnmen © (2005-04-26 10:32) [6]Видимо на момент определения обработчика геттекст для поля №4 самого поля не существует.
← →
sniknik © (2005-04-26 10:46) [7]проверь
procedure TMain.OnGetText(Sender: TField; var Text: String; DisplayText: Boolean);
begin
DisplayText:= not Sender.isNull;
end;
(возможно функция отрабатывает как раз нормально, а преобразование уже на момент отображения...)
но к AV это вряд ли имеет отношение, сдесь дело в чемто другом. например в procedure TMain.FormCreate(Sender: TObject); ??? переставь это присвоение на onShow, или базовые компоненты помести в датамодуль а его создание поставь раньше главной формы.
но только не вали на DBExpress и т.д., запомни главный глюк в компьютере это ты!!! ;о))) пока не разобрался как это работает...
← →
Anatoly Podgoretsky © (2005-04-26 11:20) [8]Johnmen © (26.04.05 09:42) [3]
Почему не поможет, не зная ее синтаксиса приведу общее стандартное решение
IFNULL(date1=NULL; NULL; FROM_UNIXTIME(date1, "%H:%i:%s"))
← →
Jungle Forever! (2005-04-26 11:32) [9]>sniknik
Ошибка возникает на определении обработчика события OnGetText, а не в самом обработчике.
ставить на TMain.onShow пробовал - тоже самое. Компоненты DBExpress изначально на датамодуле размещались и сам датамодуль создается раньше формы TMain.
← →
Anatoly Podgoretsky © (2005-04-26 11:49) [10]Определение создается просто, двойным щелчком по событию OnGetText, соответствующего поля, в инспекторе объектов.
← →
Jungle Forever! (2005-04-26 11:56) [11]>Anatoly Podgoretsky
я не смог найти :(
у DBGrid.Сolumns вобще нет ни одного event"а.
Процедуру обработки определил в type TMain = class(TForm)
← →
sniknik © (2005-04-26 12:07) [12]> Ошибка возникает на определении обработчика события OnGetText, а не в самом обработчике.
именно про это я и думал, на присвоении -> BGrid4.Fields[4].OnGetText:=OnGetText;
почему уже обьясняли.
только я не обратил внимание куда ты это присваиваеш (показалось, логично полю), а у тебя через грид, тогда кроме того что говорилось надо еше и открытие таблици добавить до этого к полм через грид доступа не будет (если они конечно в десигне не описаны).
т.е. + к onShow, после открытия таблици привязаной к этому гриду.
а то чтоне мог найти, так искал не там, оно находится в данных а не компоненте эти данные отображающие...
← →
Johnmen © (2005-04-26 12:13) [13]Вот-вот. Не существует поля-то :)
← →
Jungle Forever! (2005-04-26 12:14) [14]Всё, получилось. Всем огромное спасибо :)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.012 c