Студент

Группа: Новичок
Сообщений: 18
Регистрация: 13.10.2008
Из: Томск
Пользователь №: 390
Спасибо сказали: 0 раз(а)
Репутация: 2

|
Помогите!!! есть хранимки, которые добавляют в базу какую-нибудь сущность и возвращают id ALTER PROCEDURE [dbo].[AddUser]
@FirstName nvarchar(50),
@SurName nvarchar(50),
@Patronymic nvarchar(50),
@email nvarchar(50),
@phone nchar(11),
@Description nvarchar(100),
@NicName nvarchar(50),
@UserId int
AS
BEGIN
declare @newid int,
@ErrStr nvarchar(250),
@ret int
if dbo.AdminValidating(@UserId)=0 and EXISTS (select id from Users where isAdmin=1)
Begin
set @ret=1
Raiserror('У пользователя, от чьего имени производятся изменения, нет соответствующих прав',16,1)
End
else
Begin
declare @idTable table (id int)
Begin try
Begin Transaction AddUserTr;
insert into dbo.Users
(FirstName,SurName,Patronymic,email,phone,Description,Available,NicName)
output INSERTED.id into @idTable
values (@FirstName,@SurName,@Patronymic,@email,@phone,@Description,0,@NicName)
Set @newid=(select Top 1 id from @idTable)
insert into dbo.GeneralLog
(TableName,ObjectId,UserId,actionDate,ActionType,Description,successfully)
values ('users',@newid,@UserId,GetDate(),1,'',1)
Commit Transaction AddUserTr;
set @ret=@newid
End try
Begin Catch
Rollback Transaction AddUserTr;
set @ErrStr='Ошибка добавления записи '+(select ERROR_MESSAGE())
insert into dbo.GeneralLog (TableName,ObjectId,UserId,actionDate,ActionType,Description,successfully)
values ('users',@newid,@UserId,GetDate(),1,SubString(@ErrStr,0,100),0)
set @ret=-1
Raiserror(@ErrStr,16,1)
End Catch
End
select @ret
return @ret
END
ALTER PROCEDURE [dbo].[AddRelation]
@RelationName nvarchar(50) ,
@FromNode int,
@ToNode int,
@Status nchar(2),
@UserId int
AS
BEGIN
declare @idTable table (id int)
declare @ret int,
@newid int,
@ErrorString nvarchar(250)
set @ErrorString ='Ошибка выполнения процедуры'
if dbo.AdminValidating(@UserId)=0
Begin
set @ret=-1
Raiserror('У пользователя, от чьего имени производятся изменения, нет соответствующих прав',16,1)
End
else
Begin
if NOT EXISTS (select id from dbo.Relations
where RelationName=@RelationName and FromNode=@FromNode and ToNode=@ToNode)
Begin
Begin try
Begin Transaction AddRelationTr;
insert into dbo.Relations (RelationName,FromNode,ToNode,Available,Status)
output INSERTED.id into @idTable
values (@RelationName,@FromNode,@ToNode,0,@Status)
set @newid=(select Top 1 id from @idTable)
insert into dbo.GeneralLog (TableName,ObjectId,UserId,actionDate,ActionType,Description,successfully)
values ('Relations',@newid,@UserId,GetDate(),1,'Запись добавлена',1)
Commit Transaction AddRelationTr;
set @ret=@newid
End try
Begin catch
Rollback Transaction AddRelationTr;
set @ErrorString =@ErrorString +' '+(select ERROR_MESSAGE())
insert into dbo.GeneralLog (TableName,ObjectId,UserId,actionDate,ActionType,Description,successfully)
values ('Relations',-1,@UserId,GetDate(),1,@ErrorString,0)
set @ret=-1
Raiserror(@ErrorString,16,1)
End catch
End
else
Begin
insert into dbo.GeneralLog (TableName,ObjectId,UserId,actionDate,ActionType,Description,successfully)
values ('Relations',-1,@UserId,GetDate(),1,'Запись уже существует',0)
set @ret=-1
Raiserror('Запись уже существует',16,1)
End
End
return @ret
END
int cDataBase::AddRelation(cRelationData *data)
{
int id = 0;
QVariant res;
QSqlQuery query(m_database);
query.setForwardOnly(true);
query.prepare("{CALL AddRelation(?, ?, ?, ?, ?)}");
query.addBindValue(QVariant(data->m_name));
query.addBindValue(QVariant(data->m_fromNodeID));
query.addBindValue(QVariant(data->m_toNodeID));
query.addBindValue(QVariant(data->m_status));
query.addBindValue(QVariant(m_userID));
if (!query.exec())
{
QMessageBox msgBox(QMessageBox::Warning, "Error",
query.lastError().text(), QMessageBox::Ok);
msgBox.exec();
return id;
}
while (query.next())
{
id = query.value(0).toInt();
data->m_ID = id;
}
return id;
}
первая хранимка работает нормально, и в результате получаю id во втором случае в while (query.next())
{
id = query.value(0).toInt();
data->m_ID = id;
}
даже не заходит.... в чем может быть проблема? и как ее решить?
|