![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как всегда SQL :(
Washington © (2008-01-12 11:11:00)Запрос:
OldData:=DateToStr(MonthCalendar1.Date);
OldPlan:=Label1.Caption;
Data:=DateEdit.Text;
Plan:=PlanEdit.Text;
with ADOQuery1 do
begin
close;
SQL.Clear;
SQL.Add('Update Plans');
SQL.Add('Set Plan=:pPlan and Data=:pData');
SQL.Add('Where Plan=:pOldPlan and Data=:pOldData');
Parameters.ParseSQL(SQL.Text,true);
Prepared:=true;
Parameters.ParamValues['pPlan']:=Plan;
Parameters.ParamValues['pData']:=Data;
Parameters.ParamValues['pOldPlan']:=OldPlan;
Parameters.ParamValues['pOldData']:=OldData;
ExecSQL;
end;
В поле PlanEdit пишу одно, в результате в таблице Plans в поле Plan записывается -1. Уже все перепровел, что можно было, в чём может быть ошибка? Подскажите плз.
Washington (2008-01-12 13:13:00) [1]Забейте, сделал по другому:
удалил старую запись, вставил новую. Всё ОК )
engine (2008-01-12 12:35:00) [2]> вообщето он и здесь не меняется, значения параметров изменяются,
> запрос нет, т.е. это не «иначе», это, если запрос часто
> используемый именно и нужно присвоить гденибудь вначале
> (в десигн) и выполнять после по мере необходимости.
Ну я впринципе тоже самое и имел ввиду
> учи SQL, у тебя глюк в присвоении
вот ведь, а я и не приметил ))
sniknik (2008-01-12 12:27:00) [3]> SQL.Clear — втопку;
> SQL.Add — втопку;
ADOQuery1 — втопку;
> Если вид запроса не меняется, то SQL.Text присваиваем где нибудь вначале а заодно и Prepare, иначе, делаем как показано ниже:
вообщето он и здесь не меняется, значения параметров изменяются, запрос нет, т.е. это не "иначе", это, если запрос часто используемый именно и нужно присвоить гденибудь вначале (в десигн) и выполнять после по мере необходимости.
> DateToStr(MonthCalendar1.Date);;
— втопку;
> сделал - та же фигня.
учи SQL, у тебя глюк в присвоении
engine (2008-01-12 12:22:00) [4]> [5] Washington © (12.01.08 12:20)
Это как??? Непонял
engine (2008-01-12 12:21:00) [5]> [4] Washington © (12.01.08 12:19)
Попробуй перед ExecSqL написать:
ShowMessage(Parameters.ParamValues['pPlan']);
Washington (2008-01-12 12:20:00) [6]если сделать запрос select с теми же параметрами, результат нормальный, именно update тупит
Washington (2008-01-12 12:19:00) [7]Тип поля план - text
engine (2008-01-12 12:12:00) [8]> [2] Washington © (12.01.08 11:59)
какой тип у поля Plan?
Поставь breakpoint и посмотри значения присваеваемые параметрам.
Washington (2008-01-12 11:59:00) [9]сделал - та же фигня.
engine (2008-01-12 11:52:00) [10]> OldData:=DateToStr(MonthCalendar1.Date);
> OldPlan:=Label1.Caption;
> Data:=DateEdit.Text;
> Plan:=PlanEdit.Text;
> with ADOQuery1 do
> begin
> close;
> SQL.Clear;
> SQL.Add('Update Plans');
> SQL.Add('Set Plan=:pPlan and Data=:pData');
> SQL.Add('Where Plan=:pOldPlan and Data=:pOldData');
> Parameters.ParseSQL(SQL.Text,true);
> Prepared:=true;
> Parameters.ParamValues['pPlan']:=Plan;
> Parameters.ParamValues['pData']:=Data;
> Parameters.ParamValues['pOldPlan']:=OldPlan;
> Parameters.ParamValues['pOldData']:=OldData;
> ExecSQL;
> end;
Лишние переменные втопку.
SQL.Clear втопку;
SQL.Add втопку;
Если вид запроса не меняется, то SQL.Text присваиваем где нибудь вначале а заодно и Prepare, иначе, делаем как показано ниже:
with ADOQuery1 do begin
Close;
SQL.Text := 'Update Plans Set Plan=:pPlan and Data=:pData Where Plan=:pOldPlan and Data=:pOldData';
Parameters.ParamValues['pPlan']:=PlanEdit.Text;
Parameters.ParamValues['pData']:=DateEdit.Text;
Parameters.ParamValues['pOldPlan']:=Label1.Caption;
Parameters.ParamValues['pOldData']:=DateToStr(MonthCalendar1.Date);;
ExecSQL;
end;