|
Вопрос # 2 117/ вопрос решён / |
|
Здравствуйте, эксперты!
я пытаюсь сформировать запросик на обновление.... но на форме присутствуют MaskEdit(6 шт) для даты. и при отсутствии вводимой информации на MaskEdit у меня появляеться ошибка 'несоответствие типов при отборе данных' как сформировать блоки проверки так чтобы условия проверялись все .при этом по ходу проверки выполнялось исключение из запроса той информации которой пользователь не ввел в MaskEdiT?
пробовала вот так:
Приложение: Переключить в обычный режим-
- if TryStrToDateTime(MaskEdit11.Text, d) then begin
- if TryStrToDateTime(MaskEdit12.Text, d) then begin
- if TryStrToDateTime(MaskEdit13.Text, d) then begin
- if TryStrToDateTime(MaskEdit14.Text, d) then begin
- if TryStrToDateTime(MaskEdit15.Text, d) then begin
- if TryStrToDateTime(MaskEdit16.Text, d) then begin
- tex:= 'update Zurnal set DataPost='+ QuotedStr(MaskEdit11.text)+',StatusKol='+
QuotedStr(Edit36.text)+',KemPereslano='+ QuotedStr(Edit38.text)+',Adress='+
QuotedStr(Edit40.text)+',Soderganie='+ QuotedStr(Edit41.text)+',Ispolnitel='+
QuotedStr(Edit42.text)+',Status='+ QuotedStr(ComboBox6.text)+',DataIspolnen='+
QuotedStr(MaskEdit15.text)+',Ident='+ QuotedStr(ComboBox10.text)+' where
PorNomer='+QuotedStr(Edit37.Text)+'';
- tex1:='update RegistraKartochka set DataPovtOb ='+ QuotedStr(MaskEdit12.text)+',IndexPovtObr='+
QuotedStr(Edit44.text)+',Korrespondent='+ QuotedStr(LabeledEdit2.text)+', ';
- tex1:=tex1+'DataP='+ QuotedStr(MaskEdit13.text)+',IndexP='+ QuotedStr(Edit45.text)+',VidObr='+
QuotedStr(ComboBox7.text)+', ';
- tex1:=tex1+'FormulZayav='+ QuotedStr(Edit55.text)+',SocGruppa='+
QuotedStr(Edit46.text)+',Tematika='+ QuotedStr(ComboBox8.text)+', ';
- tex1:=tex1+'Rezol='+QuotedStr(Edit47.Text)+',Ispolnitel='+QuotedStr(Edit42.Text)+',DataN='+QuotedStr(MaskEdit11.Text)+',DataS='+QuotedStr(MaskEdit14.Text)+',
';
- tex1:=tex1+'DataI='+QuotedStr(MaskEdit15.Text)+',HodRassmotr='+QuotedStr(Edit49.Text)+',KontrMetka='+QuotedStr(Edit50.Text)+',DataOt='+QuotedStr(MaskEdit16.Text)+',RezRassmObras='+QuotedStr(ComboBox9.Text)+',OtmetkaOsnatii='+QuotedStr(Edit51.Text)+',
';
- tex1:=tex1+'DokumentPodsit='+QuotedStr(Edit52.Text)+',kolListov='+QuotedStr(Edit43.Text)+',naIspolnen='+QuotedStr(Edit48.Text)+'';
- tex1:=tex1+' where PorNomer='+QuotedStr(Edit37.Text)+'';
- end else begin
-
- end;
- end else begin
-
- end;
- end else begin
-
- end;
- end else begin
-
- end;
- end else begin
-
- end;
- end else begin
-
- end;
 |
Вопрос задала: Танюшка (статус: Посетитель)
Вопрос отправлен: 25 ноября 2008, 12:47
Состояние вопроса: решён, ответов: 4.
|
Ответ #1. Отвечает эксперт: Шичко Игорь
Здравствуйте, Танюшка!
Я бы сделал немного по-другому.
Введ массив к примеру
m: array[1..10] of string;
На каждый MaskEdit прописал бы конструкцию типа: (пример)
if TryStrToDateTime(MaskEdit11.Text, d) then
m[1]:= ', DataOt= '+QuotedStr(MaskEdit16.Text);
else
m[1]:= '';
В результирующий запрос вставляем вместо ... + ', DataOt= ' + QuotedStr(MaskEdit16.Text) + ...
элемент ... + m[1] + ...
Удачи.
 |
Ответ отправил: Шичко Игорь (статус: 9-ый класс)
Время отправки: 25 ноября 2008, 13:20
|
Ответ #2. Отвечает эксперт: Вадим К
Здравствуйте, Танюшка!
Страшный код. Не думали?
Я бы сделал так.
вначале бы завел нужное кол-во буленовским переменных, в которых хранил состояние проверки каждой даты
var c2:boolean;
begin
c2 := TryStrToDateTime(MaskEdit12.Text, d);
и так для всех дат.
теперь запрос. основная часть будет выглядеть где то так
tex:= 'update Zurnal set DataPost='+ /*врезано цензурой*/ set
'+MakePole(с2,'СDataPovtOb',MaskEdit12.text)+....+MakePole(.....);
/*врезано цензурой*/
то есть у нас есть маленькая функция, которая проверяет буленовскую пременную и если все хорошо, формирует строку.
function MakePole(ins:boolean; polename, poledata:string):string;
begin
if ins then
result := polename + '+'+QuotedStr(poledata) + ', '
else result := '';
end;
теперь замечание. Так как функция автоматически добавляет запятую в конец, то надо в конец запроса добавить ещё хотя бы одну запись ручками либо просто удалить лишнюю запятую.
Где то так...
З.Ы. три десятка Edit - это круто. Зачем?
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 25 ноября 2008, 13:27
Оценка за ответ: 5
|
Ответ #3. Отвечает эксперт: DNK
Здравствуйте, Танюшка!
Я думаю, проще по условиям сформировать части строк, а затем сложить полученные части. Перед началом проверок в части нужно занести пустые строки.
Приложение: Переключить в обычный режим- if TryStrToDateTime(MaskEdit11.Text, d) and TryStrToDateTime(MaskEdit15.Text, d) then
- tex:= 'update Zurnal set DataPost='+ QuotedStr(MaskEdit11.text)+',StatusKol='+
QuotedStr(Edit36.text)+',KemPereslano='+ QuotedStr(Edit38.text)+',Adress='+
QuotedStr(Edit40.text)+',Soderganie='+ QuotedStr(Edit41.text)+',Ispolnitel='+
QuotedStr(Edit42.text)+',Status='+ QuotedStr(ComboBox6.text)+',DataIspolnen='+
QuotedStr(MaskEdit15.text)+',Ident='+ QuotedStr(ComboBox10.text)+' where
PorNomer='+QuotedStr(Edit37.Text)+'';
- tex11 := '';
- tex12 := '';
- tex13 := '';
- tex14 := '';
- tex15 := '';
- tex16 := '';
- if TryStrToDateTime(MaskEdit11.Text, d) then
- tex11:='..........................';
- if TryStrToDateTime(MaskEdit12.Text, d) then
- tex12:='...........................';
-
- //...................
-
- if TryStrToDateTime(MaskEdit16.Text, d) then
- tex16:='...................................';
- tex1 := tex11+tex12+tex13+tex14+tex15+tex16;
 |
Ответ отправил: DNK (статус: Студент)
Время отправки: 25 ноября 2008, 13:37
|
Ответ #4. Отвечает эксперт: Nasgool
Здравствуйте, Танюшка!
С такими запросами не работал и, пока не возникнет необходимости, разбираться в их сути не буду. Но общую проблему в алгоритме понял. У вас слишком громоздкая и трудная в понимании конструкция получилась.
К вашему приложению пример неверняка имеет мало отношения, но алгоритм должен быть понятен.
Учпехов.
С уважением, Nasgool.
 |
Ответ отправил: Nasgool (статус: 2-ой класс)
Время отправки: 25 ноября 2008, 16:58
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 8; последнее сообщение — 25 ноября 2008, 17:51; участников в обсуждении: 3.
|
Танюшка (статус: Посетитель), 25 ноября 2008, 16:05 [#1]:
вопрос к Вадиму К:
а почему в базу если удалить дату с эдита у меня сохраняет вот такое число:29.12.1899
я делала вот так:
tex:= 'update Zurnal set DataPost='+MakePole(c,MaskEdit11.text)+' DataIspolnen='+MakePole(y,MaskEdit15.text);
tex:=tex+' StatusKol='+ QuotedStr(Edit36.text)+',KemPereslano='+ QuotedStr(Edit38.text)+',Adress='+ QuotedStr(Edit40.text)+',Soderganie='+ QuotedStr(Edit41.text)+',Ispolnitel='+ QuotedStr(Edit42.text)+',Status='+ QuotedStr(ComboBox6.text)+',Ident='+ QuotedStr(ComboBox10.text)+' where PorNomer='+QuotedStr(Edit37.Text)+'';
изменила немного функцию:
function TForm7.MakePole(ins:boolean; poledata:string):string;
begin
if ins then
result := QuotedStr(poledata) + ', '
else result :='';
end;
c := TryStrToDateTime(MaskEdit11.Text, d);
y := TryStrToDateTime(MaskEdit15.Text, d);
так почему такое странное число заносит?
|
|
Вадим К (статус: Академик), 25 ноября 2008, 16:13 [#2]:
а потому что это число - это как раз есть дата, соответствующая числу 0. Так как скорее всего такой даты не может быть, то простонадо прорверять на равенство 0. Ну где то так
c := TryStrToDateTime(MaskEdit11.Text, d) and d > 0;
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Танюшка (статус: Посетитель), 25 ноября 2008, 16:25 [#3]:
я тут еше решила проверить что выводит запрос , если переменная Y возращает false так вот что получается:
update Zurnal set DataPost='01.10.2008', DataIspolnen= StatusKol='1',KemPereslano='',Adress='',Soderganie='',Ispolnitel='',Status='Жалоба(предложение) требует дальнейшего рассмотрен',Ident='Ж ' where PorNomer='5'
и как оно работает я не понимаю т.к. DataIspolnen= всему что ниже!!! О_о
|
|
Вадим К (статус: Академик), 25 ноября 2008, 16:34 [#4]:
не совсем понял, что у Вас там происходит, но посмотрите на функцию, которую вы модифицировали.
Если данные есть, то в результате в запрос попадает две запятые. Сравните исправленную функцию
изменила немного функцию:
function TForm7.MakePole(ins:boolean; poledata:string):string;
begin
if ins then
result := QuotedStr(poledata)
else result :='';
end;
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Танюшка (статус: Посетитель), 25 ноября 2008, 16:48 [#5]:
можно я вам последний вопрос задам!
где у ва в вашей функции 2 запятые?
я убрала просто с вашей функции название поля... и все !
т.е. как я разобралась в ней запятая ставится (у вас) если значение ins=true
иначе функция возращает else result :='';
так где 2 запятые?
|
|
Вадим К (статус: Академик), 25 ноября 2008, 16:53 [#6]:
Одна запятая ставиться если ins=true, вторая запятая появляется в Вашем запросе.
Рекомендую делать по простому - поставьте на форму Memo де нибудь и выводите туда результирующий запрос либо где то в лог.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Nasgool (статус: 2-ой класс), 25 ноября 2008, 17:18 [#7]:
В ответе №3 я допустил ошибку:
if TryStrToDateTime(MaskEdit11.Text, d) then text := 'какой либо текст' + QuotedStr(MaskEdit1.text);
if TryStrToDateTime(MaskEdit12.Text, d) then text := text + 'какой либо текст' + QuotedStr(MaskEdit2.text);
if TryStrToDateTime(MaskEdit13.Text, d) then text := text + 'какой либо текст' + QuotedStr(MaskEdit3.text);
if TryStrToDateTime(MaskEdit14.Text, d) then text := text + 'какой либо текст' + QuotedStr(MaskEdit4.text);
if TryStrToDateTime(MaskEdit15.Text, d) then text := text + 'какой либо текст' + QuotedStr(MaskEdit5.text);
if TryStrToDateTime(MaskEdit16.Text, d) then text := text + 'какой либо текст' + QuotedStr(MaskEdit6.text);
Вот так примерно
|
|
Танюшка (статус: Посетитель), 25 ноября 2008, 17:51 [#8]:
для Nasgool :
спасибо за ответ... хотя есть тут свои минусы .... но надеюсь пользователь дату стирать не будет!
|
31 января 2011, 20:03: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|