Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Событие в DBGrid или в DataSet ??


Страницы:   1 2 3

Анна ©   (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. Стоит описание используемого языка программирования изучить в конце концов...


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо