0

まず、ユーザーがExcelを介してデータベースを更新するプロセスには多くのリスクが伴うことを理解しています。この方法に対するアドバイスはありがたいですが、間違いを犯さない完璧なユーザーがいると推測できます:)

そのため、最初に、Excelのvbaを介してストアドプロシージャにアクセスし、特定のセルのパラメーターに基づいてデータをプルすることができました。これらのフィールドを更新したい場合、どうすればこれを実行できますか?

私の最初の提案は、スプレッドシートのすべてのフィールドに基づいて更新されるストアドプロシージャを作成することです。これが正しい道である場合、どのようにすべての行をループするのでしょうか?

人々が提供できる他の提案は大歓迎です。

4

2 に答える 2

1

SQLServerの更新に関する注意事項。これ[ODBC;FileDSN=z:\docs\test.dsn]は、任意の有効な接続文字列にすることができます。

Dim cn As Object,  rs As Object
Dim scn As String, sSQL As String, sFile As String

    sFile = ActiveWorkbook.FullName

    scn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & sFile _
        & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"

    ''Late binding, so no reference is needed

    Set cn = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")
    cn.Open scn

    sSQL = "SELECT * INTO [ODBC;FileDSN=z:\docs\test.dsn].FromXL " _
         & "FROM [Sheet8$]"
    cn.Execute sSQL, recs
    Debug.Print recs

    sSQL = "INSERT INTO [ODBC;FileDSN=z:\docs\test.dsn].FromXL " _
         & "SELECT * FROM [Sheet8$]"
    cn.Execute sSQL, recs
    Debug.Print recs

    sSQL = "UPDATE [ODBC;FileDSN=z:\docs\test.dsn].FromXL x " _
         & "INNER JOIN [Sheet8$] w " _
         & "ON x.ID = w.ID SET x.Field =w.field"
    cn.Execute sSQL, recs
    Debug.Print recs

    rs.Open "SELECT * FROM [ODBC;FileDSN=z:\docs\test.dsn].FromXL", cn
    Debug.Print rs.GetString
于 2012-10-01T21:41:31.567 に答える
0

MicrosoftのCOMオブジェクトに精通している必要があります。私のVBAは錆びているので、気を付けてください。

str t = Range("A1:A4").Value

多くの動的処理を実行している場合は、いくつかのMicrosoftスタブのラッパーメソッドを作成する必要があります。

function getValue(str location)
    return Range(location + ":" + location).Value
end function

私は以前に大規模なVBAプロジェクトを実行しましたが、フロントエンドから値を読み取るのはコストのかかる操作です。同じ値を2回以上読み取る必要がないように、これらの値を保持するようにオブジェクトを設定する必要があります。

最後に、データベースをチェックしてユーザーが最新バージョンを使用していることを確認することから、スプレッドシートが印刷ビューにないことを確認することまで、多くの検証が必要です(これは読み取り可能な範囲に影響するため)。

修正をリリースする必要があり、それらの修正が使用されていることを確認する必要があるため、バージョンの確認は重要です。

于 2012-10-01T21:08:28.037 に答える