0

テーブル設定 GUI 内で関連する挿入トリガーを持つ FoxPro テーブルに挿入しようとすると、「関数が実装されていません」というエラーが発生します。vs2012 を使用して、データセット内にテーブル アダプターを作成しました。以下に示す更新ステートメントを追加しました。挿入/更新を実行する C# プロジェクト内のコードも以下に示します。関連するトリガーを FoxPro テーブルから削除すると、挿入/更新を成功させることができます。トリガー、挿入、および更新を使用すると、「関数が実装されていません」というエラーがスローされます。選択はうまくいきます。

助けてください

utacc FoxPro テーブルには、関連する SQL Server テーブルを挿入、更新、および削除するためのトリガーが設定されています。ポストの下部にトリガーを挿入します。

VS 2012 テーブル アダプター挿入コマンド

INSERT INTO utacc
                         (fcmodid, fcuname, fccompid, fcacclvl, fcscope)
VALUES        (?, ?, ?, ?, ?)

テーブル アダプターを介して挿入/更新を実行する C# コード

using (var ta = new DataSet1TableAdapters.utaccTableAdapter())
{
    foreach (var u in lUsers.GetList().Where(x => x.selected))
    {
        foreach (var screen in lScreen.GetList().Where(x => x.selected))
        {
            if (ta.GetData()
                .Any(x => x.fccompid == _fccompid 
                    && x.fcmodid.Trim() == screen.fcmodid.Trim() 
                    && x.fcuname.Trim() == u.fcuname.Trim()))
                ta.Update(perm, screen.fcmodid, _fccompid, u.fcuname);
            else
                ta.Insert(screen.fcmodid, u.fcuname, _fccompid, perm, "P");
        }
    }
}

これらのトリガーは、SQL サーバー テーブルへの挿入です。
これがFoxProトリガーです

PROCEDURE M2MTrig_UTACCInsert 
LOCAL Cntr, ErrCode, ConStr, ConnName, ConnHandle, RV, ErrHndlr 
SET DATA TO UTIL 
ErrHndlr = ON("ERROR") 
IF EMPTY(UTACC.FCUNAME)AND EMPTY(UTACC.FCMODID)AND EMPTY(UTACC.FCCOMPID ) THEN 
RETURN .T. 
ENDIF 
ErrCode = 0 
ON ERROR ErrCode = M2MTrig_ERR(ERROR(),MESSAGE(),ErrHndlr) 
FOR Cntr = 1 TO 99 
ConnName = "SystemDBConn" + ALLTRIM(STR(Cntr)) 
TRY 
ConStr = DBGETPROP(ConnName,"CONNECTION","ConnectString") 
CATCH TO oEx
ErrCode = oEx.ErrorNo
ENDTRY
IF ErrCode = 1562 THEN 
EXIT 
ENDIF 
IF ErrCode <> 0 THEN 
ON ERROR &ErrHndlr. 
RETURN .F. 
ENDIF 
ConnHandle = SQLCONNECT(ConnName) 
IF ErrCode <> 0 THEN 
RETURN .F. 
ENDIF 
IF ConnHandle < 1 THEN 
M2MTrig_ERR(-1, "Unable to connect using " + ConnName, ErrHndlr) 
RETURN .F. 
ENDIF 
IF ErrCode <> 0 THEN 
SQLDISCONNECT(ConnHandle) 
RETURN .F. 
ENDIF 
Select UTACC 
RV = M2MTrig_ExecSQL("EXEC UpdUTACC " + XC(FCACCLVL)+ ", "+ XC(FCCOMPID)+ ", "+ XC(FCMODID)+ ", "+ XC(FCSCOPE)+ ", "+ XC(FCUNAME), .T., ConnHandle, ErrHndlr) 
IF ErrCode <> 0 THEN 
SQLDISCONNECT(ConnHandle) 
RETURN .F. 
ENDIF 
SQLDISCONNECT(ConnHandle) 
IF ErrCode <> 0 THEN 
RETURN .F. 
ENDIF 
IF RV < 0 THEN 
RETURN .F. 
ENDIF 
IF RV < 1 THEN 
M2MTrig_ERR(-1, "Could not update System database", ErrHndlr) 
RETURN .F. 
ENDIF 
NEXT Cntr 
ON ERROR &ErrHndlr. 
RETURN .T. 
4

1 に答える 1