Помогите написать апдейт

apelsinka
Дата: 27.05.2011 13:41:56
Добрый день!
Пытаюсь делать на Delphi7 + SQLExpress2005, ADO, провайдер OLEDB

Простой запрос:
update managers
set
           firstname = :par1,
	surname = :par2,
	lastname = :par3,
	password = :par4,
	position = :par5,
	department = :par6 
where
	id = :manager_id
Параметры задаю:
 with mwsDataModule.ADOQChangeManager do
                        begin
                                Connection := mwsConnectForm.ADOConn;
                                Parameters.ParamByName('manager_id').DataType := ftInteger;
                                Parameters.ParamByName('manager_id').Value := mwsConnectForm.mwsManagerId;
                                Parameters.ParamByName('par1').DataType := ftString;
                                Parameters.ParamByName('par1').Value := mwsNewManagerForm.mwsNewManagerFormFirstnameEdit.Text;
                                Parameters.ParamByName('par2').DataType := ftString;
                                Parameters.ParamByName('par2').Value := mwsNewManagerForm.mwsNewManagerFormSurnameEdit.Text;
                                Parameters.ParamByName('par3').DataType := ftString;
                                Parameters.ParamByName('par3').Value := mwsNewManagerForm.mwsNewManagerFormLastnameEdit.Text;
                                Parameters.ParamByName('par4').DataType := ftString;
                                Parameters.ParamByName('par4').Value := mwsNewManagerForm.mwsNewManagerFormPasswordEdit.Text;
                                Parameters.ParamByName('par5').DataType := ftString;
                                Parameters.ParamByName('par5').Value := mwsNewManagerForm.mwsNewManagerFormPositionEdit.Text;
                                Parameters.ParamByName('par6').DataType := ftString;
                                Parameters.ParamByName('par6').Value := mwsNewManagerForm.mwsNewManagerFormDepartmentEdit.Text;
                                Prepared;
                                ExecSQL;
                        end; 
В базе:
CREATE TABLE [dbo].[managers](
	[id] [int] IDENTITY(1,1) NOT NULL,
	[login] [varchar](20) NOT NULL,
	[firstname] [varchar](50) NULL,
	[surname] [varchar](50) NULL,
	[lastname] [varchar](50) NULL,
	[password] [varchar](20) NOT NULL,
	[position] [varchar](100) NULL,
	[department] [varchar](100) NULL,
 CONSTRAINT [PK_managers] PRIMARY KEY CLUSTERED 
(
	[id] ASC
),
UNIQUE NONCLUSTERED 
(
	[login] ASC
)
) ON [PRIMARY]

И, и, и ошибка: Conversion failed when converting the varchar value 'name' to datatype int

Если пишу тот же запрос без параметров, то он выполняется.
Johnmen
Дата: 27.05.2011 13:50:09
В приведенной инфе ошибок нет.
Поэтому приводи наиболее полную информацию -
где, как прописывается текст запроса
где, как выполняется
где возникает ошибка
и т.д. и. т.п.
Кроик Семён
Дата: 27.05.2011 14:00:25
apelsinka,

mwsConnectForm.mwsManagerId //видимо, не integer
Кроик Семён
Дата: 27.05.2011 14:30:34
P.S.

т.е. попробуй

   Parameters.ParamByName('manager_id').Value := StrToInt(mwsConnectForm.mwsManagerId);
apelsinka
Дата: 27.05.2011 16:59:49
Кроик Семён,

integer, когда я сокращаю запрос до

update managers
set
           firstname = 'Маша'
where
	id = :manager_id
, то он выполняется.

Johnmen,
Текст запроса прописывается в ADOQuery.Sql.
Кроик Семён
Дата: 27.05.2011 17:20:13
поищи, каким параметром ты эту букву "q" передал.

а так, всё похоже на какой то мусор в параметрах
попробуй для начала (перед всем блоком) вызвать:

mwsDataModule.ADOQChangeManager.Parameters.Clear();
Johnmen
Дата: 27.05.2011 18:20:39
apelsinka
Текст запроса прописывается в ADOQuery.Sql.

Если в дизайне, то смотри, что там с коллекцией параметров.
Если в рантайме, то приводи код. И всё, что к этому моменту относится.
apelsinka
Дата: 27.05.2011 18:56:46
Johnmen,

Да, в дизайне. Вспомнила про свойство параметров Size, поставила. Теперь ошибок нет, но и база не обновляется =(
apelsinka
Дата: 27.05.2011 19:49:46
Не хватало
Parameters.ParseSQL(SQL.Text, True);
For each parameter found in the SQL statement, a TParameter object is added to the calling TParameters object using the name of the parameter in the SQL statement.

Закрыто, спасибо.