Форум: "Базы";
Текущий архив: 2002.09.26;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c