Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Триггер каскадирования в связные DBF, возможна ли нормальная работа триггера  
:(
    Опции темы
Magistrus
Дата 7.8.2007, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Жив
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 14.6.2006
Где: г. Одесса

Репутация: нет
Всего: 1



Уважаемые гуруSQL помогите кто чем можете!

Есть таблица в sql  reg_ul  и ее аналои в dbf? нужно чтоб при вставке в таблице sql производилась вставка в таблицы  dbf

Я попытался решить это так:
Создал триггер на создание записи в таблице reg_ul 
Код

CREATE TRIGGER add_reg ON [dbo].[reg_ul] 
FOR INSERT
AS
insert  PROTOCOL1...reg_ul(fiskalkod,DEVIZ,D_BEGIN,D_END) 
SELECT FISKALKOD,DEVIZ,D_BEGIN,D_END from inserted
insert  PROTOCOL2...reg_ul(fiskalkod,DEVIZ,D_BEGIN,D_END) 
SELECT FISKALKOD,DEVIZ,D_BEGIN,D_END from inserted


где PROTOCOL это Linked Servers на DBF  файл reg_ul

одкако при попытке вставки записи в таблицу выдает ошибку

Server: Msg 8524, Level 16, State 1, Procedure add_reg, Line 4
The current transaction could not be exported to the remote provider. It has been rolled back.

Это сообщение отредактировал(а) Magistrus - 8.8.2007, 08:52
--------------------
~ вот такая вот загагулина ~ 
PM MAIL WWW ICQ Skype   Вверх
Magistrus
Дата 8.8.2007, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Жив
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 14.6.2006
Где: г. Одесса

Репутация: нет
Всего: 1



вобщем я нашел решение,  smile     
оно мне не очень нравится так как путь к базам dbf будет находится внутри триггера, что не очень хорошо...

Код

CREATE TRIGGER add_reg ON dbo.reg_ul 
FOR INSERT
AS

declare 
    @hr        INT,        
    @raf        INT,        
    @ado_con    INT,        
    @ado_rs         INT,            
    @src           VARCHAR(255),
    @desc        VARCHAR(255), 
    @command VARCHAR(255),    
    @ado_cstr  VARCHAR(255),
    @RSQL      VARCHAR(1000)
-- формируем запрос из базы вставки    
SELECT    @RSQL = 'insert  into reg_ul VALUES ('''+FISKALKOD+''','''+DEVIZ+''')'    FROM    INSERTED
    IF @RSQL IS NULL    RETURN
-- задаем провайдера
    set    @ado_cstr = 
    'Provider=Microsoft.Jet.OLEDB.4.0;
    Data Source=\\ds1\net;
    User ID=Admin;
    Password=;
    Extended Properties=dBase III'

-- создаем соединение
    exec @hr = sp_OACreate 'ADODB.Connection', @ado_con OUT
        -- проверяем выполнена ли хранимай процедура
    if     @hr <> 0
    begin
        exec    sp_OAGetErrorInfo @ado_con, @src OUT, @desc    OUT
        select    hr= CONVERT(VARBINARY(4), @hr), Source=@src, Descript=@desc
        print    '[1]Error occured'
        ROLLBACK
    end

-- уничтожаем соединение
    exec @hr = sp_OASetProperty    @ado_con, 'ConnectionString', @ado_cstr
    if     @hr <> 0
    begin
        exec    sp_OAGetErrorInfo @ado_con, @src OUT, @desc    OUT
        select    hr= CONVERT(VARBINARY(4), @hr), Source=@src, Descript=@desc
        print    '[2]Error occured'
        ROLLBACK
    end
-- открываем соединение
    exec @hr = sp_OAMethod    @ado_con, 'Open'
    if     @hr <> 0
    begin
        exec    sp_OAGetErrorInfo @ado_con, @src OUT, @desc    OUT
        select    hr= CONVERT(VARBINARY(4), @hr), Source=@src, Descript=@desc
        print    '[3]Error occured'
        ROLLBACK
    end
--- выполняем запрос вставки
    exec @hr = sp_OAMethod @ado_con, 'Execute', @raf OUT, @RSQL
    if     @hr <> 0
    begin
        exec    sp_OAGetErrorInfo @ado_con, @src OUT, @desc    OUT
        select    hr= CONVERT(VARBINARY(4), @hr), Source=@src, Descript=@desc
        print    '[4]Error occured'
        ROLLBACK
    end
-- закрываем соединение
    exec @hr = sp_OAMethod @ado_con, 'Close'
    if     @hr <> 0
    begin
        exec    sp_OAGetErrorInfo @ado_con, @src OUT, @desc    OUT
        select    hr= CONVERT(VARBINARY(4), @hr), Source=@src, Descript=@desc
        print    '[5]Error occured'
        ROLLBACK
    end
-- уничтожаем соединение
    exec @hr = sp_OADestroy @ado_con
    if     @hr <> 0
    begin
        exec    sp_OAGetErrorInfo @ado_con, @src OUT, @desc    OUT
        select    hr= CONVERT(VARBINARY(4), @hr), Source=@src, Descript=@desc
        print    '[6]Error occured'
        ROLLBACK
    end


к тому же не получилось работать с полями datatime может кто подскажет решение?

Это сообщение отредактировал(а) Magistrus - 8.8.2007, 13:48
--------------------
~ вот такая вот загагулина ~ 
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0400 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.