電子書籍の厳選無料作品が豊富!

accessユーザーです
accessで以下のようにするとsqlserverのテーブルにupdateできるのですが
DoCmd.RunSQL "DROP PROCEDURE [SP_旅行貯金へ給与追加]", -1
DoCmd.RunSQL "CREATE PROCEDURE [SP_旅行貯金へ給与追加] AS UPDATE dbo.共栄会旅行貯金 SET [" & 月日FLD & "] = '" & 月日指定 & "', [" & 控除額FILD & "] = 給与.旅行 FROM dbo.給与 INNER JOIN dbo.共栄会旅行貯金 ON dbo.給与.SNAM = dbo.共栄会旅行貯金.SNAM", -1
DoCmd.OpenStoredProcedure "SP_旅行貯金へ給与追加", acViewPreview, acEdit
--------------------------------------------------------------
sqlserverで以下のようにパラメーター変数作成して実行しますとupdateできません
フィールド名を@Mfld 変数および@KOUfld変数 にしているのですが無理があるのでしょうか
CREATE PROCEDURE [dbo].[SP_旅行貯金へ給与追加]
(@Mfld nvarchar(255), @Msitei nvarchar(255),@KOUfld nvarchar(255))
AS
BEGIN
UPDATE dbo.共栄会旅行貯金 SET @Mfld = @Msitei, @KOUfld = 給与.旅行 FROM dbo.給与 INNER JOIN dbo.共栄会旅行貯金 ON dbo.給与.SNAM = dbo.共栄会旅行貯金.SNAM

END

A 回答 (1件)

SQLの動的実行にする必要があります。



(1)SQLを文字列として組み立てる変数を宣言
(2)SQLを文字列として組み立て
(3)(2)をexecuteで実行

以下のような感じです。

declare @sqlstmt varchar(500)

set @sqlstmt = 'UPDATE dbo.共栄会旅行貯金 SET '
+ @Mfld + '=' + @Msitei + ',' + @KOUfld
+ '= 給与.旅行 FROM dbo.給与 INNER JOIN dbo.共栄会旅行貯金 '
+ 'ON dbo.給与.SNAM = dbo.共栄会旅行貯金.SNAM'

execute (@sqlstmt)

この回答への補足

早速お返事ありがとうございます
すみませんaccess側では下記のようにprgしてsqlを実行させています
------------------------------------------------
Dim L As Integer
Dim 月日FLD, 控除額FILD, 月日指定 As String
月日指定 = Format(F2!NENGETU, "@@@@\/@@")

Dim PS As New ADODB.Recordset

PS.Open "SELECT SUM(K1) AS K1, SUM(K2) AS K2, SUM(K3) AS K3, SUM(K4) AS K4, SUM(K5) AS K5, SUM(K6) AS K6, SUM(K7) AS K7, SUM(K8) AS K8, SUM(K9) AS K9,SUM(K10) AS K10, SUM(K11) AS K11, SUM(K12) AS K12, SUM(K13) AS K13,SUM(K14) AS K14, SUM(K15) AS K15, SUM(K16) AS K16 FROM dbo.共栄会旅行貯金", db, adOpenStatic, adLockOptimistic

For L = 1 To 16
If PS("K" & L) = 0 Then
月日FLD = "M" & L: 控除額FILD = "K" & L
Exit For
End If
Next L

DoCmd.SetWarnings False

Dim cmd As New ADODB.Command
Set cmd.ActiveConnection = db
cmd.CommandText = "SP_旅行貯金へ給与追加"
cmd.CommandType = adCmdStoredProc
cmd.Parameters("@Mfld") = 月日FLD
cmd.Parameters("@Msitei") = 月日指定
cmd.Parameters("@KOUfld") = 控除額FILD
cmd.Execute

--------------------------------------------------
エラーはなく正常に終了しますが更新されていません?
DoCmd.RunSQLの場合は[" & 月日FLD & "]で [をつければフィールド名と認識するようですがsqlの場合は[でするとうまくいきません
よろしくおねがいします

補足日時:2007/06/07 21:08
    • good
    • 0
この回答へのお礼

どうもsqlserverでは変数でフィールド指定はできないようですね
dropからCREATEでやるしかないようですね
ありがとうございまとた

お礼日時:2007/06/12 21:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す