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

Вниз

exception   Найти похожие ветки 

 
Choo   (2002-09-04 23:22) [0]

Друзья, подскажите:
При попытке ввести в поле DBGrid, связанное с полем типа TData таблицы неполное значение даты возникает (естественно) exception. Как корректно обработать эту ошибку и вернуть курсор в то же поле сетки(grid)? Благодарю всех ответивших :)


 
Choo   (2002-09-04 23:49) [1]

Спасибо и на этом :(((
Ладно, если найду к утру решение, поделюсь...


 
Energizer   (2002-09-05 00:28) [2]

DBGrid подрубленно пусть например к Tabl (или Querty- не важно)

Table.edit;
Table.FieldByName("имя поля").AsDateTime:=Компонеот.date;
\\или так:
Table.FieldByName("имя поля").AsDateTime:=Date(now);
table.post;


 
Ал   (2002-09-05 09:10) [3]

Обработать событие OnSetText для данного поля Table или Query, а вот чтобы вернуть курсор в данную ячейку придется помучится. Это зависит от того какой DBGrid ты используешь.


 
Choo   (2002-09-05 09:44) [4]

Использую DBGridEh из библиотеки EhLib


 
Choo   (2002-09-05 10:33) [5]

Ал, спасибо за подсказку: OnSetText. Проверка текста на соответствие формату даты решила половину проблемы :)


 
ал   (2002-09-05 11:21) [6]

Можно сделать так:
Создать какую-нибудь переменную типа: invalid_data, обрабатываешь событие OnSetText и в зависимости от результата выполняешь соответств. действия и присваиваешь этой переменной соотв. значение.
Далее:
в DBGridOnKeyDown:
with DBGrid.SelectedField do
if (Table.State = dsEdit) and (FieldName="DATA") and
((Key = VK_DOWN) or (Key = VK_UP) or (Key = VK_PRIOR) or (Key = VK_NEXT) or (Key = VK_return) or (Key = VK_TAB)) then
with DBGrid do
begin
selectedindex := selectedindex +1; // увеличиваем поле, если оно не последнее

if invalid_data then
begin
key:=0;
invalid_data:= false;
end;
selectedindex := selectedindex - 1;
end;
Можно сделать еще по другому, ч/з TInPlaceEdit.


 
Choo   (2002-09-05 12:30) [7]

Ал, я безмерно тебе благодарен:
if (Table.State = dsEdit) or (Table.State = dsEdit) then
...проверка на валидность...
if {False} then Key:=0; !!!!

Все гениальное просто :)
и я еще после этого считаю себя кодером ?!
Еще раз благодарю


 
Ал   (2002-09-05 13:17) [8]

Не торопись, подумай для чего строчка:
selectedindex := selectedindex +1; (без нее работать не будет)

> if {False} then Key:=0; !!!!
на самом деле:
if {True} then Key:=0;



 
Choo   (2002-09-05 21:51) [9]

Ал,
конечно наворочал я тут с больной головы, НО РАБОТАЕТ!
проблема была в том что девочки-пользователи не хотели работать со встроенным календарем поля даты, надо было обеспечить корректный ввод даты в это поле в ручную :)

procedure Tdm.tDocBodyEndSrokGodnSetText(Sender: TField;
const Text: String);
var
d,m,y: Word;
EndSrokGodn: TDateTime;
begin
EndSrokGodn:=ValidDate(Text);
DecodeDate(EndSrokGodn,y,m,d);
if y>1900 then Sender.Value:=EndSrokGodn
else Sender.Clear;
end;

function ValidDate(vdDate:String):TDateTime;
var
vdDay, vdMonth, vdYear: Smallint;
begin
vdDate:=TrimRight(vdDate);
case Length(vdDate) of
1..6: vdDate:="01.01.1900";
7..9: Insert(StringOfChar("0",10-Length(vdDate)),vdDate,7);
end;
vdDay:=StrToInt(Copy(vdDate,1,2));
vdMonth:=StrToInt(Copy(vdDate,4,2));
vdYear:=StrToInt(Copy(vdDate,7,4));
if (vdYear>=100) and (vdYear<2000) then vdYear:=1900;
if vdYear<100 then vdYear:=vdYear+2000;
try
Result:=EncodeDate(vdYear,vdMonth,vdDay);
except
Result:=0;
end;
end;

Еще раз благодарю за помощь, надеюсь по-возможности получить консультацию :)


 
Ал   (2002-09-07 06:37) [10]

Всегда пожалуйста. Пиши.



Страницы: 1 вся ветка

Текущий архив: 2002.09.26;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.011 c
14-85704
Lexer
2002-08-28 18:09
2002.09.26
Мастера, очень нужен Grid.


4-85759
anod
2002-08-10 19:44
2002.09.26
SetWindowRgn


14-85649
murza
2002-08-30 14:54
2002.09.26
Продолжение логической игры


6-85629
Rammst
2002-07-25 17:43
2002.09.26
Mail


4-85758
Gari
2002-08-07 15:08
2002.09.26
Работа с окнами.