Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.48 MB
Время: 0.012 c
1-1116534544
Green_Templar
2005-05-20 00:29
2005.06.06
возведение в квадрат


14-1116581327
BigMac
2005-05-20 13:28
2005.06.06
IMEI


4-1113325359
DeScriptor
2005-04-12 21:02
2005.06.06
Выбор одной из одинаковых компонент


1-1116569296
Borsuk
2005-05-20 10:08
2005.06.06
Как узнать есть ли " * " в ячейки таблицы?


1-1116923548
Phoenix
2005-05-24 12:32
2005.06.06
Субменю в PopupMenu





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский