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

Вниз

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

 
Trilon1   (2006-01-26 16:07) [0]

Привет.
Помогите, как правильно обработать исключительную ситуацию:

EOleException with message "Data type mismatch in criteria expression

Появляется если жму сохранить, а Edit1in.Text пустое, процедура ниже:

procedure TForm1.BtnInOKClick(Sender: TObject);
begin
Adoqin.Close;
Adoqin.SQL.Text:="INSERT INTO InDoc (numberin,dat,NDDOC,FROM_H,doc,QLIST,Regist,TO_WHOM,NNOT) VALUES ("
+ QuotedStr(Edit1in.Text)+","
+ QuotedStr(DateEdit1.Text)+","
+ QuotedStr(Edit2in.Text)+","
+ QuotedStr(REd2in.Text)+","
+ QuotedStr(Red1in.Text)+","
+ QuotedStr(Edit6in.Text)+","
+ QuotedStr(Edit5in.Text)+","
+ QuotedStr(Edit7in.Text)+","
+ QuotedStr(Edit8in.Text) + ")";
Adoqin.ExecSQL;
Adoqin.Close;


 
Val ©   (2006-01-26 16:18) [1]

1. СУБД?
2. вероятно не все поля текстовые, а вы обрамляете их кавычками.


 
Trilon1   (2006-01-26 16:25) [2]

1. Простая таблица в Access
2. Действительно это поле в базе "Number"

Убрал кавычки, другая EoleException Syntax error in INSERT INTO statement


 
sniknik ©   (2006-01-26 16:32) [3]

дата это тоже не текст... (DateEdit1 наверняка содержит "типа дату")

универсальное решение - параметры. и следить за типами, посылать только то что соответствует типу в базе.


 
Trilon1   (2006-01-26 16:40) [4]

Покажите на примере, пожалуйста.


 
sniknik ©   (2006-01-26 17:02) [5]

AdoComm.CommandText:= "INSERT INTO InDoc (numberin, dat) VALUES (:num, :dat)";
AdoComm.Parameters.ParamByName("num").Value:= 1;
AdoComm.Parameters.ParamByName("dat").Value:= Now();
AdoComm.Execute;


 
Trilon1   (2006-01-26 17:12) [6]

Спасибо, это понял.
Но у меня на форме Edit, в который вводится номер документа, если пользователь забыл его ввести и нажал сохранить, т.е. исполнил комманду INSERT, то получил exception :(
Как его "заставить" не забывать заполнять Edit?


 
sniknik ©   (2006-01-26 17:48) [7]

> Как его "заставить" не забывать заполнять Edit?
+ рубль, - рубль. еще и не такие "проблемы" решает...

но можно и менее радикально
procedure TForm1.EditChange(Sender: TObject);
begin
 Button1.Enabled:= (Trim(Edit1.Text) <> "") and
                            (Trim(Edit2.Text) <> "") ...
end;
"повесить" на все критичные едиты (условие желательно "поинтелектуальней")
или проверку в нажатии делать до инсерта... и выдавать "не заполнен едит_х"


 
Trilon1   (2006-01-26 18:11) [8]

Спасибо за помощь. Буду пробовать.


 
Trilon1   (2006-01-27 16:41) [9]

Sniknik, первый вариант получился, УРА.
Есть одно но, в это поле нужно только цифры вводить ?
Как сделать проверку перед нажатием (до инсерта), покажи пожалуйста какой-нить примерчик?



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

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

Наверх




Память: 0.48 MB
Время: 0.028 c
4-1132931995
Kent
2005-11-25 18:19
2006.02.12
серийный номер винта!!!


2-1138016256
Стелс
2006-01-23 14:37
2006.02.12
Считывание системного времени в формат TDateTime


15-1137733833
begin...end
2006-01-20 08:10
2006.02.12
С Днём рождения! 20 января


15-1138184621
Харько
2006-01-25 13:23
2006.02.12
help файл для MEMProof


2-1138119940
555
2006-01-24 19:25
2006.02.12
Помогите Word к delhi прикрутить