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

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

Как всегда 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;


Наверх

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