![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Событие в DBGrid или в DataSet ??
Анна © (2009-11-25 16:49:00)С помощью ADOQUERY создаю временную табл и помещаю туда данные, с 2 полями формата DATETIME
ADOQ1.Close;
ADOQ1.SQL.Clear;
ADOQ1.SQL.Add('IF (object_id(''tempdb..#prochee'') is null) create table #prochee (datetime datetime,FIO_director varchar(20),Post_person varchar(30),FIO_person varchar(20),Phone_person varchar(20),Date_document datetime,Notes varchar(500)');
ADOQ1.SQL.Add(' PRIMARY KEY (datetime))');
ADOQ1.ExecSQL;
ADOQ1.Close;
ADOQ1.SQL.Clear;
ADOQ1.SQL.Add('IF (select count(*) from #prochee)=0 insert into #prochee');
ADOQ1.SQL.Add('select a.datetime,a.FIO_director,a.Post_person,a.FIO_person,a.Phone_person,a.Date_docum ent,a.Notes from start_tabl a,own');
ADOQ1.SQL.Add('WHERE a.id_own=own.id_own and');
ADOQ1.SQL.Add(' own.iki_own='+leftstr(sp_own.Text,pos(' ',sp_own.Text)-1));
ADOQ1.SQL.Add('and (datetime ='+ quotedstr(formatdatetime('yyyymmdd',strtodate(sp_dat.text)))+'or datetime='+quotedstr(formatdatetime('yyyymmdd',znach_dat))+')');
ADOQ1.SQL.Add('and a.tops=''S''');
ADOQ1.ExecSQL;
дальше эту врем табл связываю с DBGrid. При редактировании ячейки грида, где надо занести дату, набираю просто текст ('hhhh') и перехожу на след ячейку. При переходе не могу найти событие, в котором бы нужно обработать введеную дату на корректность. Перепробовала почти все события (ADOQ1AfterEdit,ADOQ1AfterInsert,ADOQ1BeforePost...) не успевает ни в одно событие заходить, ругается: Class EConvertErrow with message "pppp" is not valid date and time" Какое событие нужно обработать, чтобы не допустить вставки некорректной даты в временную табл.?
Анна (2009-11-27 15:29:00) [1]
> Inovet © (27.11.09 15:21) [47]
Спасибо за внимание. Но, все то что он будет вводить (пользователь) (ФИО, тел, персон, и дату документа) в табл. эти поля по умолчанию - NULL. И если не ввел или неправильно - не хочу его заставлять, т.к. эти данные не очень важны, и вводятся на самой последней странице всей большой программы ввода отчетности.
Inovet (2009-11-27 15:21:00) [2]А какие мысли насчёт
> [32] Inovet © (27.11.09 12:08)
> Вообще не очень хорошо очищать то что ввёл пользователь,
> надо дать возможность исправить. Как раз стандартная схема
> с OnValidate самое оно.
Анна (2009-11-27 14:17:00) [3]
> Inovet © (27.11.09 13:53) [45]
const -да, не было. Моя ошибка. Вы мне подсказали.
Но то что писал Плохиш [29] не проходило по синтаксису.
Проходит вариант :
ADOQ1.FieldByName('Date_document').OnSetText:=mysettext;
Inovet (2009-11-27 13:53:00) [4]> [44] Анна (27.11.09 13:18)
> Но ADOQ1.FieldValues['Date_document'].OnSetText := mysettext;
> не проходит, я же отвечала Плохишу.
> [43] Inovet © (27.11.09 13:10)
> с учётом исправленного выше.
В том ответе [31] у тебя const не было.
Анна (2009-11-27 13:18:00) [5]
> Inovet © (27.11.09 13:10) [43]
Получилось:
ADOQ1.FieldByName('Date_document').OnSetText:=mysettext;
Но ADOQ1.FieldValues['Date_document'].OnSetText := mysettext; не проходит, я же отвечала Плохишу.
Всем спасибо.
> Анна (27.11.09 12:55) [41]
Программиста вряд ли наймем, слишком маленькая зарплата.
Inovet (2009-11-27 13:10:00) [6]> [37] Анна (27.11.09 12:40)
> Вы думаете, что я не обращаю внимания на ваши подсказки???
> Это не так.
Аня, см
> [36] Inovet © (27.11.09 12:28)
с учётом исправленного выше. Неужели не получается?
Плохиш (2009-11-27 13:06:00) [7]
> Анна (27.11.09 12:55) [41]
>
>
> > Плохиш © (27.11.09 12:53) [39]
>
> Ну так подскажите где у меня ошибка?
Я уже говорил и Inovet © говорил.
Анна (2009-11-27 12:55:00) [8]
> Плохиш © (27.11.09 12:53) [39]
Ну так подскажите где у меня ошибка? А потом будем нанимать программиста.
Анна (2009-11-27 12:54:00) [9]
> Anatoly Podgoretsky © (27.11.09 12:46) [38]
ADOQ1.Fields[5].OnSetText:=MySetText(ADOQ1.Fields[5],ADOQ1.Fields[5].asstring);
Ошибка компиляции :
Incompatible types : 'TFieldSerTextEvent' and 'procedure, untyped pointer or untyped parameter
Плохиш (2009-11-27 12:53:00) [10]Я не помню, нанять программиста еи уже предлагали? По-моему, самое время.
Anatoly Podgoretsky (2009-11-27 12:46:00) [11]
> Теперь в большом проекте при динамическом переопределении
> не компилируется: не корректные типы FieldSetTextEvent
> and proced....
У тебя не закончено предложение. Возможно у тебя регулярная процедура.
Анна (2009-11-27 12:40:00) [12]Вы думаете, что я не обращаю внимания на ваши подсказки???
Это не так.
Я уже отвечала в [31] что этот вариант не компилируется.
Если бы я смогла найти решение этой проблемы в интернете, я бы сюда не обратилась, т.к. очень хорошо понимаю, что никто мне ничего не должен, и если отвечают - то в ущерб своим делам.
Inovet (2009-11-27 12:28:00) [13]> [35] Анна (27.11.09 12:21)
> ADOQ1.FieldValues['Date_document'].OnSetText := mysettext(ADOQ1.Fields[5]
> ,ADOQ1.Fields[5].asstring);
Пару раз или больше уже подсказали, тебе же адрес процедуры надо присвоить, а не вызывать её, причём неизвестно с чем там
ADOQ1.FieldValues['Date_document'].OnSetText := mysettext;
Анна (2009-11-27 12:21:00) [14]
> Inovet © (27.11.09 12:11) [33]
тот же результат. Компиляция проходит:
ADOQ1.FieldValues['Date_document'].OnSetText := mysettext(ADOQ1.Fields[5],ADOQ1.Fields[5].asstring);
procedure TForm1.mysettext(sender:TField;const sss:string);
begin
showmessage('mysettext');
end;
но при выполнении на операторе
ADOQ1.FieldValues['Date_document'].OnSetText := mysettext.....
ошибка invalid variant operation...
Плохиш (2009-11-27 12:17:00) [15]
> Inovet © (27.11.09 12:11) [33]
>
> > [31] Анна (27.11.09 12:06)
>
> const где?
>
+1
Inovet (2009-11-27 12:11:00) [16]> [31] Анна (27.11.09 12:06)
const где?
Inovet (2009-11-27 12:08:00) [17]> [28] Анна (27.11.09 11:46)
> Мне надо проверять, чтобы при неудачном вводе заменяла на
> NULL
Вообще не очень хорошо очищать то что ввёл пользователь, надо дать возможность исправить. Как раз стандартная схема с OnValidate самое оно.
Анна (2009-11-27 12:06:00) [18]
> Плохиш © (27.11.09 11:57) [29]
ADOQ1.FieldValues['Date_document'].OnSetText := mysettext;
procedure TForm1.mysettext(sender:TField;sss:string);
begin
showmessage('mysettext');
end;
Не компилируется : Not enough actual parameters
Inovet (2009-11-27 12:05:00) [19]> [26] Анна (27.11.09 11:30)
> если
> ADOQ1.Fields[5].OnSetText:=mysettext;
> то при компиляции : Parameter lists differ
Значит прототип твоего обработчика не совпадает с ожидаемым
procedure TForm1.ADOQuery1Date_documentSetText(Sender: TField; const Text: String);
Плохиш (2009-11-27 11:57:00) [20]
> написала:
> ADOQ1.FieldValues['Date_document'].OnSetText := mysettext(ADOQ1.
> Fields[5],ADOQ1.Fields[5].asstring);
> Компиляция проходит, но при выполнении на этой строке ошибка:
>
> invalid variant operation...
ADOQ1.FieldValues['Date_document'].OnSetText := mysettext;
При условии, что описание mysettext совпадает с описанием OnSetText.
PS. Стоит описание используемого языка программирования изучить в конце концов...