it-swarm-ja.com

MS Access 2007、文字を検索して改行に置き換えます

Access 2007では、文字(「〜」など)を新しい行に置き換えるにはどうすればよいですか。 [置換]ボックスをALT + 010で使用しようとしましたが、改行として受け入れられません。

助言がありますか?

1
Muleskinner

VBAソリューションの代替手段は、かなり単純なSQLクエリです。
(私はVBAソリューションを投稿したことを認識していますが、何らかの理由でこれについて1秒しか考えていませんでした)。

データベースでテストできなければ安全性は保証できませんので、試す前にバックアップしてください。必要に応じてテーブル名とフィールド名を置き換える必要があります。

UPDATE Table1 
SET data = Replace([data],"~~",Chr(13) + Chr(10));

実際、必要に応じてクエリビルダーを使用してこれを作成および実行できる必要があります。更新クエリで作業していることを確認し、上からReplace()関数をupdate to値として入力してください。関連する列。

1
DMA57361

これがあなたが望むことをするはずの簡単なVBA関数です。データベース内の新しいコードモジュールにドロップし、必要に応じて微調整してから実行します。

明らかに、データベースでテストせずにこれが完全に安全であることを保証することはできないので、これを試す前に本当に良いバックアップを作成してください!そして、私は関数を一般化するための努力をしていません。与えられた要件に合わせて調整するだけです。

これは、フィールドIDdataTable1だけで、IDがPKでdata変更したいメモフィールドです。ローカルのテーブル名とフィールド名を考慮して、以下のコードを調整する必要があります(これらの行にコメントを付けました)。

Function SearchReplace()
    Dim db As DAO.Database, rs As DAO.Recordset, sSQL As String, sData As String

    'Get the record set we wish to modify
    Set db = CurrentDb
    sSQL = "SELECT * FROM Table1"                     '[replace table name]
    Set rs = db.OpenRecordset(sSQL)

    'iterate through each record
    While Not rs.EOF

        'check for the matching sub string in the field "data"
        sData = rs![Data]                             '[replace target field]
        If InStr(1, sData, "~~") Then

            'modify the data string, replacing "~~" with a line break
            sData = Replace(sData, "~~", vbCrLf)

            'escape any ' characters to avoid errors and/or injection
            sData = Replace(sData, "'", "''")

            'update the table with the modified string'
            sSQL = "UPDATE Table1" & _                '[replace table name]
                   " SET data='" & sData & "'" & _     '[replace target field]
                   " WHERE [ID] = " & rs![ID]          '[replace PK field]
            db.Execute sSQL

        End If

        rs.MoveNext
    Wend

    'destroy record set to be tidy
    rs.Close
    Set rs = Nothing

End Function
0
DMA57361