Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
4-85754
Soft(Unpowered Kiborg)
2002-08-10 11:06
2002.09.26
Version Info в Delphi проектах


7-85731
иван
2002-07-16 15:49
2002.09.26
TCanvas


3-85418
MsGuns
2002-09-06 12:55
2002.09.26
Проблема при вводе данных ! Поделитесь экспириенсом


1-85457
BillyJeans
2002-09-16 10:44
2002.09.26
как блокировать повторный запуск?


14-85696
Mike B.
2002-09-02 13:00
2002.09.26
К вопросу о рекламе и телевидении





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский