Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.06;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.047 c
4-1113482304
_AndreW_
2005-04-14 16:38
2005.06.06
Можно ли управлять чужим приложением, используя его же классы?


11-1098482343
Nix
2004-10-23 01:59
2005.06.06
KOLEcmListEdit


14-1116250544
kai
2005-05-16 17:35
2005.06.06
как отправить/принять факс по интернету?


1-1116524779
Gear
2005-05-19 21:46
2005.06.06
Шифрование.


1-1116526602
Tolyaka
2005-05-19 22:16
2005.06.06
своя форма поверх полноэкранного приложения