(1)VisualBasic6.0を用いて、Access2000のデータベースに接続します。
(2)データベースの中のテーブル(テーブル名:T-カレンダー)にあるフィールド(フィールド名:コード)に保存されているデータの一部分を置換したい。(⇒途中のアルファベットを変更したい。)(例;置換前:123FFF789 置換後:123III789)
テーブルを直接開いて、フィールドにカーソルをあわせて、”編集メニュー”の『検索と置換』から行っても出来るのですが、Accessを触らないでVBから作ったフォームから変更(置換)をさせたい。
◇フォームに2つテキストボックスを作って、「検索する文字列」と「置換後の文字列」を入力し、『変換』ボタンを押したら、データが置換される、という流れ。
一回きりの置換でなくて、何回でも同じフィールド内のデータを置換したい。
SQLのREPLACE関数を用いて出来るかな、とは思っているのですが、どのように作成すればよろしいのでしょうか。
また他のやり方でシンプルな方法があればお教えください。
No.2ベストアンサー
- 回答日時:
ファンクションを使用せずにDAOで接続する方法もあります。
参照設定でMicrosoft DAO ○.○ Object Libraryにチェック
Dim WS As DAO.Workspace
Dim DB As DAO.Database
Dim RS As DAO.Recordset
Dim FileName As String
Dim TableName As String
FileName = "(ファイルのパス)"
TableName = "(テーブル名)"
Set WS = DBEngine.Workspaces(0)
Set DB = WS.OpenDatabase(FileName)
Set RS = DB.OpenRecordset(TableName, dbOpenDynaset)
RS.MoveFirst
Do Until RS.EOF
RS.Fields(0) = Replace(RS.Fields(0),Text1.Text,Text2.Text)
RS.MoveNext
Loop
RS.Close
DB.Close
WS.Close
Set RS = Nothing
Set DB = Nothing
Set WS = Nothing
これでテキストボックス1に入れた文字列をテキストボックス2に入れた文字列に変換できます。
途中のRS.Fields(0)はテーブルの1列目を指します。
2列目なら(1)です。
ご解答、ありがとうございます。
先のプログラムでMicrosoft DAO 3.6 Object Libraryにチェックが入っていましたので、お教えいただいたプログラムで作成しています。
途中でエラーが出るのですが、
RS.Fields(0) = Replace(RS.Fields(0),Text1.Text,Text2.Text)
のところで、
実行時エラー3020 UpdateまたはCancelUpdateメソッドには、対応するAddNewまたはEditメソッドが必要です。
というメッセージが出ます。
イミディエイトウィンドウで参照すると、希望しているテーブル内のフィールド名が見えてますし、テキストボックス内の任意で入力した文字列も見えます。
もう少しで完成しそうなのですが、お力を貸していただけませんでしょうか。
No.4
- 回答日時:
#2です。
すいません。抜けがありました。
RS.Fields(0) = Replace(RS.Fields(0),Text1.Text,Text2.Text)
を
RS.Edit
RS.Fields(0) = Replace(RS.Fields(0), Text1.Text, Text2.Text)
RS.Update
に変えてください。
うっかりしてました。
No.3
- 回答日時:
#1の補足です。
ADOを使いますので、VBのメニューから[プロジェクト]-[参照設定]を選び、Microsoft ActiveX Data Objects *.* Libraryにチェックを入れてください。
No.1
- 回答日時:
まず、標準モジュールで以下のようにAccessに接続するためのFunctionを作成してください。
Public adCN As New ADODB.Connection
Public Function Connection() As Boolean
Dim ConnectString As String
On Error GoTo Error_Enumerator
ConnectString = "DRIVER={Driver do Microsoft Access (*.mdb)};" _
& "DefaultDir=C:\(MDBのあるフォルダ名);" _
& "DBQ=****.mdb;"
adCN.Open ConnectString
Connection = True
Exit Function
Error_Enumerator:
Connection = False
End Function
次にForm_Loadイベントなどで以下のようにしてコネクションを確立させてください。
If Not Connection Then MsgBox "接続に失敗しました", vbCritical:End
そして、コマンドボタンのクリックイベントなどで、以下のようにしてSQL文を作成し実行させてください。
Dim strVar as String
strVar = "Update テーブル名 Set フィールド名 = Replace(フィールド名, '" & Text1 & "','" & Text2 & "')" ←必要であればWhere句も追加してください。
adCN.Execute strVar
※Text1 置換前文字列,Text2 置換後文字列
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Accessで、『"A"以外の場合"--"に置き換える』という作業をしたいのですが、良い方法はありま 1 2022/06/07 19:30
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Visual Basic(VBA) Excel VBA 教えてください。 VBA初心者です。 詳しい方がいましたら教えてください。 下記 3 2023/04/25 11:22
- Word(ワード) ワードフォント 一括置換の方法 4 2022/12/31 00:27
- Excel(エクセル) 数式の置換がうまく行かない 6 2022/05/04 15:51
- Visual Basic(VBA) Excel VBAでAA(BBB) → BBB.AA に置換したい 2 2022/10/30 13:59
- Visual Basic(VBA) EXCEL VBA 単語置き換え について質問です ブック名 ぶぶぶ シート名 ししし セル V3〜 3 2023/03/08 01:41
- その他(コンピューター・テクノロジー) 正規表現の置換で一部の文字列をそのまま残したい 2 2022/05/03 19:19
- その他(データベース) IT用語について質問です。 以前ITパスポートの試験を受けた際にデータベースが何の集まりかについての 2 2022/12/10 12:29
- Access(アクセス) Accessのクエリで、replace関数を使い、データの中にある”をブランクに置き換えたいのですが 6 2022/06/15 14:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessでテーブルの値をテキス...
-
ACCESSで400以上のフィールドが...
-
ACCESSで和暦を西暦に・・・
-
Accessのフィールド数が255しか...
-
INSERT INTO ステートメントに...
-
Access 昇順・降順で並び替え...
-
アクセス エラーを数値「0」に...
-
アクセスで複数行の一括入力す...
-
accessで重複を防ぎたい
-
ACCESS2000「定義されているフ...
-
アクセスのテーブルデータをCSV...
-
【Access】フォームで自動計算...
-
ACCESSで表が作りたく、そのた...
-
SQLで特定の文字を含むものを削除
-
ExcelのデータをコピーでACCESS...
-
ACCESSでの改行コード
-
アクセス メモ型 255文字...
-
固有レコード識別子の選択とは??
-
アクセスでの時間の並びかえに...
-
フィールド数の多すぎる・フィ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでテーブルの値をテキス...
-
アクセス エラーを数値「0」に...
-
ACCESSでの改行コード
-
Accessのフィールド数が255しか...
-
accessのレポートで元になるテ...
-
Accessで、固定アルファベット+...
-
INSERT INTO ステートメントに...
-
Access 昇順・降順で並び替え...
-
ExcelのデータをコピーでACCESS...
-
SQLServer2005のSQL文での別名...
-
ACCESSで400以上のフィールドが...
-
アクセス VBAで列の入れ替...
-
IT用語について質問です。 以前...
-
【Access】フォームで自動計算...
-
accessで重複を防ぎたい
-
ACCESSでテーブルのチェックを...
-
ACCESSで和暦を西暦に・・・
-
アクセス メモ型 255文字...
-
主キーはオートナンバー型のID...
-
ACCESSでオートナンバーを任意...
おすすめ情報