crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> вызов хранимок
svetlana
  опции профиля:
сообщение 5.11.2008, 14:32
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 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;
    }

даже не заходит....

в чем может быть проблема? и как ее решить?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Litkevich Yuriy
  опции профиля:
сообщение 5.11.2008, 15:16
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(svetlana @ 5.11.2008, 17:32) *
даже не заходит....

в чем может быть проблема? и как ее решить?
а ошибки при query.exec() не происходит?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.4.2024, 21:27