VBAをVBで焼き直しする方法とは?

このQ&Aのポイント
  • access2003のVBAプログラムをVB2010に焼き直す方法について教えてください。
  • 具体的には、(1)クエリー名のつけ方、(2)クエリーの実行方法、(3)テーブルへの更新方法が分からないです。
  • もし知っている方がいらっしゃれば、教えていただきたいです。
回答を見る
  • ベストアンサー

VBAをVBで焼き直ししたい

access2003 VBAで下記のように、クエリー(qqq00)を作成し、 そのクエリー元に再処理をし、テーブル(tb0)にupdateしています。 このVBAを、VB2010に焼き直しをしたいのですが、 分かりませんので教えて頂けませんか。 (access2003のプログラム) sql00 = " SELECT xren.*" _ & " FROM xren ; " sql01 = " SELECT Avg(qqq00.kei04) AS avkei04," _ & " FROM qqq00 ; " Set qrdef_0 = db.CreateQueryDef("qqq00", sql00) Set tb = db.OpenRecordset("qqq00") Do nsu = nsu + 1 tb0.AddNew tb0!ren_no = tb!ren_no tb0!avkei04 = tb!avkei04 tb0.Update tb.MoveNext Loop Until tb.EOF DoCmd.DeleteObject acQuery, "qqq00" qrdef_0.Close: Set qrdef_0 = Nothing (VB2010のプログラム) Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load     Dim Cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Database\xxxxxs.mdb")     Dim SQLCm As OleDbCommand = Cn.CreateCommand     Dim Adapter As New OleDbDataAdapter(SQLCm)     Dim Table As New DataTable     SQLCm.CommandText = "SELECT * xren"     Adapter.Fill(Table) ここからが分かりません。      (1)クエリー(qqq00)名のつけ方      (2)qqq00の実行方法      (3)テーブル(tb0)へのupdate方法     Table.Dispose()     Adapter.Dispose()     SQLCm.Dispose()     Cn.Dispose() End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • ky2605
  • ベストアンサー率100% (2/2)
回答No.1

AccessやExcelのVBAと、VB2010はいろいろ違って大変ですね… 私も移植でいろいろ苦労しています。 さて、クエリを作成して発行する以外の方法は、絶対ダメですか? クエリは、結局はSQLですから、データを選択してくるSELECTのSQLの結果を元に、UPDATEのSQLを制作して、接続しているデータベースに発行してはどうでしょうか? -------------------- Dim sql_01 As String Dim sql_02 As String Dim com As OleDb.OleDbCommand Dim cn As OleDb.OleDbConnection = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Database\xxxxxs.mdb") Cn.Open() sql_01 = "SELECT * FROM xren;" Dim command As System.Data.OleDb.OleDbCommand = Cn.CreateCommand command.CommandText = sql_01 Dim reader As System.Data.OleDb.OleDbDataReader = command.ExecuteReader() If reader.HasRows = True Then While reader.Read() sql_02 = "UPDATE [tb0] SET [avkei04] = " sql_02 = sql_02 & reader(1) sql_02 = sql_02 & " WHERE [ren_no] =" sql_02 = sql_02 & reader(0) sql_02 = ";" com = New OleDb.OleDbCommand(sql_02, Cn) com.ExecuteNonQuery() com.Dispose() End While Else ' レコードが取得できなかった時の処理 MessageBox.Show("レコードがありません") End If -------------------- SELECT * FROM xren; でいくつフィールドが返ってくるのか判らないので、とりあえず、IDともう一つしか返ってこない前提です。 reader(0) reader(1) は、SQLのフィールド番号になります。 ハズしているかもしれませんが、いかがでしょうか?

関連するQ&A

  • Vb2010にアクセスのデータを出力

    前回、似たような質問をさせて頂いたのですが、私の説明が悪く、解決には至らなかったので、再度練った説明で質問させていただきます。 ・visual basic 2010 設置コントロール TextBox1、TextBox2、TextBox3 Button1 ・アクセスのテーブル  ID(数字)、氏名(テキスト)、性別(テキスト) TextBox1にアクセスのID入力し、その横に設置したButtomを押したら、そのIDのデータ(名前、性別)がTextBox2,TextBox3に出力される、というプログラムを書き方のヒントを教えていただけないでしょうか。 Imports System.Data.OleDb Public Class Form1 Private Sub Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Enter '▼データの取得 Dim Cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Database\Animals.mdb") Dim SQLCm As OleDbCommand = Cn.CreateCommand Dim Adapter As New OleDbDataAdapter(SQLCm) Dim Table As New DataTable SQLCm.CommandText = "SELECT * FROM T_akusesu" Adapter.Fill(Table) '▼データの連結 textbox.DataBindings.Add("Text", Table, "名前") textbox2.DataBindings.Add("Text", Table, "性別") Table.Dispose() Adapter.Dispose() SQLCm.Dispose() Cn.Dispose() End Sub End Class また、Buttonのイベントには何を書くべきなのでしょうか? 以上、よろしくお願い致します。

  • VBでSQL文のUPDATE構文を使った時のエラーについて

    こんにちは。全くのVB初心者ですが回答、ご指摘のほうよろしければお願いします。 Microsoft Visual Studio 2005でデータベース管理のアプリケーションを制作しているんですが、エラーが出て困っています。 本フォームの各Textboxの編集した値を、 利用者カルテフォーム(別フォーム)のDataGridViewとデータベースに反映させるというプログラミングにしようとしています。 以下のコードでデバッグしようとしても「UPDATE ステートメントの構文エラーです。」というエラーメッセージが出てきて実行できない状態です。 VB中学校というサイトのデータベース講座を参考にしました。 ------------------------------------------------------------ Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:xxxx.mdb") Dim SQLCm As OleDbCommand = Cn.CreateCommand Dim Table As DataTable = DirectCast(利用者カルテDataGridView1.DataSource, DataTable) Dim Row As DataRow Dim Adapter As New OleDbDataAdapter(SQLCm) Row = Table.NewRow Row("No") = NotextBox.Text Row("名前") = 名前TextBox.Text Row("フリガナ") = フリガナTextBox.Text Table.Rows.Add(Row) Dim SQL As String = "" SQL = "UPDATE 患者データ SET " SQL &= " No = " & Row("No") & "', " SQL &= " 名前 = '" & Row("名前") & "', " SQL &= " フリガナ= " & Row("フリガナ") & "', " SQL &= " WHERE " SQL &= " No = " & NotextBox.Text SQLCm.CommandText = SQL Cn.Open() ※SQLCm.ExecuteNonQuery() Cn.Close() 利用者カルテ.Show() Table.Dispose() Adapter.Dispose() SQLCm.Dispose() Cn.Dispose() End Sub ---------------------------------------------------------- 以上が実際にエラーがでる部分になります。 ※の部分で「UPDATE ステートメントの構文エラーです。」というエラーが指摘されています。 ちなみに他のフォームでINSERT文も使っているのですが、そちらは問題なく実行できる状態です。 初歩的な質問で申し訳ないですが、よければ回答のほうよろしくお願いします。

  • VBでSQLを使い検索をしたいのですが。

    VBでSQLを使い検索をしたいのですが、SELECT文の使い方が分かりません。 下記の記述で、番号、氏名、電話番号をそれぞれのTEXTBOX1,TEXTBOX2,TEXTBOX3の ように各容器にいれたいのでが分かりません。 文をその文増やせばいいのでしょうか、SELECT文1行で複数の結果を受け取る方法を教えて下さい。 宜しくお願い致します。 Dim Adapter As New OleDbDataAdapter(SQLCm) Dim Table As New DataTable Dim name As String Dim selcomd As String Dim Value As String name = TextBox11.Text selcomd = "SELECT 番号,氏名,電話番号  FROM meishi WHERE 氏名 like '" & name & "' " SQLCm.CommandText = selcomd

  • VB2010とアクセスの接続方法

    textboxにID入力し、ENTERを押したらそのIDのデータがアクセスのデータベースから出力される、というプログラムを書き方のヒントを教えていただけないでしょうか。 Imports System.Data.OleDb Public Class Form1 Private Sub Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Enter '▼データの取得 Dim Cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Database\Animals.mdb") Dim SQLCm As OleDbCommand = Cn.CreateCommand Dim Adapter As New OleDbDataAdapter(SQLCm) Dim Table As New DataTable SQLCm.CommandText = "SELECT * FROM T_akusesu" Adapter.Fill(Table) '▼データの連結 textbox.DataBindings.Add("Text", Table, "名前") textbox2.DataBindings.Add("Text", Table, "フリガナ") Table.Dispose() Adapter.Dispose() SQLCm.Dispose() Cn.Dispose() End Sub End Class ・アクセスデータ  ID、名前、氏名 以上、よろしくお願い致します。

  • SQLServerデータをDataGridに表示時にエラーが発生

    SQLServerデータをDataGridに表示時にエラーが発生 visual Studio2008を使用し、SQLServerから条件を指定しそれをDataGridに一覧表示するvbを組んでいますが、エラーが解消しなく困っております。対応方法について教えてください。 【状況】 1 Dim St As String 2 Dim Cn As New System.Data.SqlClient.SqlConnection 3 Dim SQL As System.Data.SqlClient.SqlCommand 4 Dim ServerName As String = "Server名"  5 Dim UserID As String = "id" 6 Dim Password As String = "×××" 7 Dim DatabaseName As String = "Dbname" 8 Dim Adapter As New SqlClient.SqlDataAdapter(SQL, Cn) 9 Dim table As New DataTable 10 St = "Server=" & ServerName & ";" 11 St &= "User ID=" & UserID & ";" 12 St &= "Password=" & Password & ";" 13 St &= "Initial Catalog=" & DatabaseName 14 Cn.Open() 15 Cn.ConnectionString = St 16 SQL = Cn.CreateCommand 17 SQL.CommandText = ("SELECT * FROM CUSTOMER_M WHERE CUSTOMER_NAME LIKE " & "'%' & TextBoxName.Text & '%'") 18 Adapter.Fill(table) 19 DataGrid1.DataSource = table 20 Cn.Close() 21 SQL.Dispose() 22 Cn.Dispose() 8行目の「Adapter」がエラーになり、オーバーロードの解決に失敗しましたとメッセージが出ています。8行目の(SQl、Cn)を省くとコンパイルエラーはなくなりますが、14行目でエラーになります。 宜しくお願いします。

  • ACCESS VBA

    ACCESSで検索フォームを作りたいと思っています。 VBAを使って行きたいと思うのですが、うまくいきません。 希望としては、該当するレコードのデータを抽出したいです。 よろしくお願いいたします。 ※現段階でのソースを書いてみました。 最終的に行いたい処理とは違うのですが、根本的に間違っているようなので簡略化しました。 /------------------------------------------------/ Private Sub コマンド1_Click() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim sql As String '接続 Set cn = CurrentProject.Connection 'レコードセットを取得 Set rs = New ADODB.Recordset sql = "SELECT * FROM 従業員データ " & _ "WHERE 年齢=30" rs.Open sql, cn, adOpenDynamic, adLockReadOnly rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub /------------------------------------------------/

  • VBタイムアウト

    タイムアウト、プールサイズの制限値 VB2010で業務アプリケーションの集計ツールを作成しています。 仕組みは単純で、下記の様にDateTimePicker(カレンダー)から日付を選び ボタンクリックでフォーム内のデータグリッド内に集計値が入っていく仕組みです。 'カレンダー日付選択 Sub Aggregate() '日付の取得 DateTimePicker1.Format = DateTimePickerFormat.Custom DateTimePicker1.CustomFormat = "yyyy-MM-dd 1つのフォームにデータグリッドが10個ほどあるので画面遷移までに5秒くらいかかってしまいます。 1度目の表示は問題ないのですが、日付を選択し直し2度、3度と実行すると ”タイムアウトに達しました。プールから接続を制限する前にタイムアウト期間が過ぎました。 プールされた接続がすべて使用中で、プールサイズの制限値に達した可能性があります。” と表示されてしまいます。開放も行っているつもりで原因がわかりません。 原因がわかれば教えていただきたいです。処理をスピードアップできる方法があればそれもお願いします。 接続文字は以下の通りです。 Function CONNECT(ByVal SqlText As String) As String Dim St As String Dim Cn As New System.Data.SqlClient.SqlConnection Dim SQL As New System.Data.SqlClient.SqlCommand Dim ServerName As String = "AAAAAAAAA" Dim UserID As String = "BBBBBBBBB" Dim Password As String = "CCCCCCC" Dim DatabaseName As String = "DB" Dim Adapter As New System.Data.SqlClient.SqlDataAdapter Dim Table As New DataTable Adapter.SelectCommand = SQL SQL.Connection = Cn SQL.CommandTimeout = 120 St = "Server=" & ServerName & ";" St &= "User ID=" & UserID & ";" St &= "Password=" & Password & ";" St &= "Initial Catalog=" & DatabaseName Cn.ConnectionString = St SQL.CommandText = SqlText Cn.Open() Return SQL.ExecuteScalar SQL.Connection = Nothing SQL.Transaction = Nothing SQL.Dispose() Cn = Nothing Cn.Dispose() Cn.Close() End Function データグリッドの転記は下記の様なコードをずらっと書いています。 DataGridView10(2, 3).Value = CONNECT("SELECT COUNT(*)" & _ " FROM dbo.IOTBL, dbo.APLTBL" & _ " WHERE APLTBL.APLID=IOTBL.APLID" & _ " And (APLTBL.APLTYPE='JA01')" & _ " And (APLTBL.DELETED<>'1')" )

  • 抽出条件のあるクエリにADOで新規にレコードを追加

    抽出条件のあるクエリにADOで新規にレコードを追加する事は不可能でしょうか? フォーム1にテキスト0を配置し SELECT テーブル1.色 FROM テーブル1 WHERE (((テーブル1.色)=[Forms]![フォーム1]![テキスト0])); というクエリを作成しました。 テーブル1のデータは 色 黄 黒 青 赤 です。 ADOでクエリにデータを追加したいのですが Public Sub Exsample() Dim CN As ADODB.Connection Dim RS As ADODB.Recordset Dim SQL As String Set CN = CurrentProject.Connection Set RS = New ADODB.Recordset SQL = "SELECT * FROM クエリ1" ここの時点で 「実行時エラー:'-2147217904 (80040e10)': 1つ以上の必要なパラメータの値が設定されていません。」 と表示されてしまいます。 「クエリ1」を「テーブル1」にしたらうまくいきます。 だったらテーブルに追加したら?と思われると思いますが 今回は例であり、実際はクエリに追加したいです。 回避方法があれば教えてください。 よろしくお願い致します。 (ヴァージョンはアクセス2003です)

  • ACCESSのVBAで

    Dim rcd As New ADODB.Recordset Sql = "SELECT * FROM 社員テーブル" rcd.Open Sql, CurrentProject.Connection If rcd.EOF Then Else 社員コード = rcd!社員コード 社員名称 = rcd!社員名称 end if のような記述で、Sqlのところをテーブルからのselectではなくクエリからデータの取得って出来るのでしょうか?(sqlのところがクエリ名になる) よろしくお願いします。

  • アクセス クエリ-について

    テーブルには、 フィールド1 ------------------ エクセルaaa aaaエクセルaaa aaaエクセル ------------------ というレコードが入っていて、 ------------------------------------------------------ UPDATE テーブル1 SET テーブル1.フィールド1 = "Excel" WHERE (((テーブル1.フィールド1) Like "*エクセル*")); ------------------------------------------------------ という更新クエリ作り、実行すると、テーブルのデータが フィールド1 ------------------ Excel Excel Excel ------------------ になってしまいます。 やりたい事は、 フィールド1 ------------------ Excelaaa aaaExcelaaa aaaExcel ------------------ にしたいのですが、更新クエリじゃ無理なのでしょうか? 手動でテーブルで検索ダイアログを開いてフィールドの一部分のみ置換するしかないのですか? 最終的には、 ------------------------------------------------------ Sub 更新クエリ() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim 置換前 As String Dim 置換後 As String Dim SQL As String cn.Open "Provider = Microsoft.ACE.OLEDB.12.0;" & "Data Source= " & CurrentProject.FullName rs.Open "T置換", cn, adOpenKeyset, adLockOptimistic For i = 1 To rs.RecordCount 置換前 = rs("置換前") 'エクセル 置換後 = rs("置換後") 'Excel SQL = "UPDATE テーブル1 SET テーブル1.フィールド1 = ""Excel"" WHERE (((テーブル1.フィールド1) Like ""*エクセル*""));" DoCmd.RunSQL SQL rs.MoveNext Next rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub ------------------------------------------------------ のようにして、置換用テーブルのレコードを一つ一つ取得して、 テーブル1の値を置換していきたいのです。 何か対策があればご回答よろしくお願いします。