• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:指定したExcelをSQLテーブルに呼び込むには)

指定したExcelをSQLテーブルに呼び込む方法

このQ&Aのポイント
  • VB.Netを使用して、指定したExcelファイルを指定したSQLテーブルに呼び込む方法を教えてください。
  • AccessのVBAでは、DoCmd.TransferSpreadsheetというメソッドを使用してExcelファイルをテーブルに呼び込むことができましたが、VB.Netで同様の処理を行う方法がわかりません。
  • VB.Net初心者ですので、詳しい手順やコードの説明をお願いします。

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

  • ベストアンサー
回答No.8

>これで何とか書き込めました。 なんとかできて安心しました(汗) 気になったのは、 以下の部分の3行目 ____________________For_Each_obect_As_Object_In_DR.ItemArray ________________________If_obect_IsNot_DBNull.Value_=_True_Then ________________________________DataPub(順番)_=_"'"_&_Convert.ToString(obect)_&_"'" ←ここが気になる ____________________________'MsgBox(順番_&_Data(順番)) ____________________________str確認メッセージ_+=_"|"_+_Convert.ToString ________________________End_If ________________________順番_=_順番_+_1 ____________________Next 「←ここ」の行でSQLを用いて文字列をインサートする時に必要な「'」を付加していますが、氏名以外の 項目のデータ型はINT型ですよね。INT型のデータをインサートする時は「'」を付加する必要は ありません。 例 ○) INSERT INTO test SELECT 1,'山田太郎',100,100,100,300 ×) INSERT INTO test SELECT '1','山田太郎','100','100','100','300'

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (7)

回答No.7

こんにちは。 前回のソースの >Fill(DT) >End With の直下に以下のソースをコピーしてください。(*最後に重要な説明が書きましたので必ず読んでください。 '↓ここから '変数宣言 Dim DB接続クラス As System.Data.SqlClient.SqlConnection = Nothing Dim SQL実行クラス As System.Data.SqlClient.SqlCommand = Nothing Dim トランザクション As System.Data.SqlClient.SqlTransaction = Nothing '※データベースに接続するためのUser IDとPasswordを指定してください。 Dim strDB接続情報 As String = "Data Source=WS70;" & _ "Initial Catalog=勤怠管理;" & _ "Persist Security Info=True;" & _ "User ID=ID;" & _ "Password=Pass;" Try 'DB接続クラスインスタンス作成 DB接続クラス = New SqlConnection(strDB接続情報) 'DB接続 DB接続クラス.Open() 'トランザクション開始 トランザクション = DB接続クラス.BeginTransaction 'SQLコマンド実行クラス作成 SQL実行クラス = New SqlCommand With SQL実行クラス 'パラメータ初期化 .Parameters.Clear() 'DB接続情報設定 .Connection = DB接続クラス 'トランザクション指定 .Transaction = トランザクション 'コマンドタイプ設定 .CommandType = CommandType.Text 'SQLコマンド設定 .CommandText = "INSERT INTO SELECT @No,@氏名,@国語,@数学,@英語,@合計点" 'I/Oパラメータ定義 .Parameters.Add("@No", SqlDbType.Int).Direction = ParameterDirection.Input .Parameters.Add("@氏名", SqlDbType.NVarChar, 8).Direction = ParameterDirection.Input .Parameters.Add("@国語", SqlDbType.Int).Direction = ParameterDirection.Input .Parameters.Add("@数学", SqlDbType.Int).Direction = ParameterDirection.Input .Parameters.Add("@英語", SqlDbType.Int).Direction = ParameterDirection.Input .Parameters.Add("@合計点", SqlDbType.Int).Direction = ParameterDirection.Input 'SQL実行ループ For Each DR As DataRow In DT.Rows Try 'エクセルのデータをSQL実行パラメータに設定 .Parameters.Item("@No").Value = DR(0) .Parameters.Item("@氏名").Value = Convert.ToString(DR(1)) .Parameters.Item("@国語").Value = DR(2) .Parameters.Item("@数学").Value = DR(3) .Parameters.Item("@英語").Value = DR(4) .Parameters.Item("@合計点").Value = DR(5) 'SQL実行 .ExecuteNonQuery() Catch ex As SqlException 'SQL例外処理部 'SQL実行時にエラーが発生した場合、このブロックに飛びます。 'エラーメッセージ出力 MsgBox(ex.Message & ex.StackTrace, MsgBoxStyle.Critical) End Try Next End With 'コッミト トランザクション.Commit() Catch ex As Exception '例外処理部 'ロールバック トランザクション.Rollback() 'エラーメッセージ出力 MsgBox(ex.Message & ex.StackTrace, MsgBoxStyle.Critical) Finally If DB接続クラス IsNot Nothing AndAlso DB接続クラス.State <> ConnectionState.Closed Then 'DB接続切断 DB接続クラス.Close() End If End Try '↑ここまで ※-------------------------------- ※ ※----------- 重要 ---------------- ※ ※-------------------------------- ※ ソースの前半で >'※データベースに接続するためのUser IDとPasswordを指定してください。 > Dim strDB接続情報 As String = "Data Source=WS70;" & _ > "Initial Catalog=勤怠管理;" & _ > "Persist Security Info=True;" & _ >"User ID=ID;" & _ >"Password=Pass;" の >"User ID=ID;" & _ >"Password=Pass;" の 「ID」と「Pass」をデータベース「勤怠管理」に接続するためのIDとPassに書き換えてください。

10071007
質問者

お礼

NoMusicNoLife49 さん続いてありがとうございます。 本当に細かく教えていただいてありがとうございます。 私も私なりに考えてNoMusicNoLife49のプログラムを下敷きに作ってみました。 <--- 追加 という所が追加したプログラムです。 勤怠管理DataSetをフォームに貼付けテーブルとつながった状況で With OleAdapter .SelectCommand = New OleDb.OleDbCommand .SelectCommand.Connection = OleConnection .SelectCommand.CommandType = CommandType.Text .SelectCommand.CommandText = "SELECT * FROM [sheet1$]" 'エクセルファイルのデータをメモリーテーブルに読込む .Fill(DT) Dim str確認メッセージ As String = String.Empty If DT.Rows.Count = 0 Then MsgBox("エクセルのデータを取得できませんでした。") Else 'テーブルデーター削除 Call テーブルデーター削除() <---追加 'データーを取込 For Each DR As DataRow In DT.Rows str確認メッセージ = String.Empty Dim 氏名 As String = "" 順番 = 1 For Each obect As Object In DR.ItemArray If obect IsNot DBNull.Value = True Then DataPub(順番) = "'" & Convert.ToString(obect) & "'"  <--- 追加 'MsgBox(順番 & Data(順番)) str確認メッセージ += "|" + Convert.ToString(obect) End If 順番 = 順番 + 1 Next MsgBox(str確認メッセージ) 'テーブルデーター書込 Call テーブルデーター書込() <---追加 Next End If End With 追加したプロシージャーは2つあります。 1つ目のプロシージャー Private Sub テーブルデーター削除() 'コネクション指定 Using Connection As New _ SqlClient.SqlConnection(My.Settings.処理数ConnectionString) 'コマンド定義 Dim command As SqlClient.SqlCommand = Connection.CreateCommand() 'コネクションを開く Connection.Open() 'コマンド定義と実行 command.CommandText = _ "TRUNCATE TABLE dbo.test" 'commandを実行 command.ExecuteNonQuery() 'コネクションをclose Connection.Close() End Using End Sub 2つ目のプロシージャー Private Sub テーブルデーター書込() 'コネクション指定 Using Connection As New _ SqlClient.SqlConnection(My.Settings.処理数ConnectionString) 'コマンド定義 Dim command As SqlClient.SqlCommand = Connection.CreateCommand() 'コネクションを開く Connection.Open() 'コマンド定義と実行 command.CommandText = _ "INSERT INTO dbo.test(NO,氏名,国語,数学,英語,合格点) SELECT" & DataPub(1) & "," & DataPub(2) & "," & DataPub(3) & "," & DataPub(4) & "," & DataPub(5) & "," & DataPub(6) 'commandを実行 command.ExecuteNonQuery() 'コネクションをclose Connection.Close() End Using End Sub これで何とか書き込めました。 このプログラムでどこかアドバイスなりありましたらお願いいたします。 本当に細かく教えていただいてありがとうございます。 よろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。
回答No.6

こんにちは、 テーブルtestのカラム No 氏名 国語 数学 英語 合計点 のそれぞれのデータ型を教えてください。

10071007
質問者

お礼

NoMusicNoLife49 さん続いてありがとうございます。 SQLのデータ型は次の通りです。 No INT 氏名 nvarchar(8) 国語 INT 数学 INT 英語 INT 合計点 INT です。 よろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。
回答No.5

> 'エクセルファイルのデータをメモリーテーブルに読込む >.Fill(DT) この記述の直下に以下の処理を追加してください。そのままコピペしてください。 ここから↓ Dim str確認メッセージ As String = String.Empty If DT.Rows.Count = 0 Then MsgBox("エクセルのデータを取得できませんでした。") Else For Each DR As DataRow In DT.Rows str確認メッセージ = String.Empty For Each obect As Object In DR.ItemArray If obect IsNot DBNull.Value = True Then str確認メッセージ += "|" + Convert.ToString(obect) End If Next MsgBox(str確認メッセージ) Next End If ここまで↑ これ、読込んだエクセルファイルのデータを1行毎に表示します。

10071007
質問者

お礼

NoMusicNoLife49 さん続いてありがとうございます。 指示された通りやりました。 読み込まれたDataがMsgBoxに表示されました。 |1|浅野 純子|63|69|87|219| です。 実際にExcelFは No 氏名 国語 数学 英語 合計点 1 浅野 純子 63 69 87 219 で入っています。 詳しくおしえていただいてありがとうございます。 それで大変甘えて申し訳ないんですが SQLでtestという名前のテーブルが No 氏名 国語 数学 英語 合計点 というフィールドで作られていてそのテーブルに このデーターを書き込みたいのですが、 続いて教えていただけませんでしょうか。 尚、サーバー名は WS70 データーベース名は 勤怠管理 テーブル名は test フィールド名は前述の通りです。 何から何まですいませんが よろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。
回答No.4

なるほど。 >VB.netのModule1.vbに貼り付けました。 >Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click ><-----ここの書き方が判りません。 >End Sub モジュールクラスに貼り付けるのではなく、フォームクラスに貼り付けましょう。 ※画面(Form1)にボタン(Button2)を作成してください。 Imports System.Data Imports System.Data.SqlClient Public Class Form1 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click '変数宣言 Dim OleConnection As OleDb.OleDbConnection = Nothing Dim OleAdapter As OleDb.OleDbDataAdapter = Nothing Dim DT As DataTable = Nothing Try 'クラスインスタンス作成 OleConnection = New OleDb.OleDbConnection OleAdapter = New OleDb.OleDbDataAdapter DT = New DataTable() '接続情報設定 OleConnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\フォルダ名\読込むエクセルファイル.xls;" & _ "Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1""" With OleAdapter .SelectCommand = New OleDb.OleDbCommand .SelectCommand.Connection = OleConnection .SelectCommand.CommandType = CommandType.Text .SelectCommand.CommandText = "SELECT * FROM [読込むエクセルファイルのシート名$]" 'エクセルファイルのデータをメモリーテーブルに読込む .Fill(DT) End With Catch ex As Exception MsgBox(ex.Message) End Try End Sub End Class >下記の2ヶ所は書換えました。 >"SELECT * FROM [sheet1$]" >"Data Source=C:\test.xls;" OKです。 >又、"Provider=Microsoft.Jet.OLEDB.4.0;"となっているんですが >サーバーはSQL2000なんですがこの設定でよろしいのでしょうか。 >教えてください。 "Provider=Microsoft.Jet.OLEDB.4.0;"はクライアントPCに保存 しているエクセルを読込むための宣言です。SQL Serverに接続 するための宣言ではありません。 説明が足りなくて申し訳ないですが、上記のサンプルはローカル PCに保存しているエクセルファイルからデータを取得する所まで です。 SQLServer2000は使用したことがないので、自信もって回答する ことができません。それでもよろしければ、お答えします。

10071007
質問者

お礼

NoMusicNoLife49 さん続いてありがとうございます。 Button2に '変数宣言 Dim OleConnection As OleDb.OleDbConnection = Nothing Dim OleAdapter As OleDb.OleDbDataAdapter = Nothing Dim DT As DataTable = Nothing Try 'クラスインスタンス作成 OleConnection = New OleDb.OleDbConnection OleAdapter = New OleDb.OleDbDataAdapter DT = New DataTable() '接続情報設定 OleConnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\test.xls;" & _ "Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1""" With OleAdapter .SelectCommand = New OleDb.OleDbCommand .SelectCommand.Connection = OleConnection .SelectCommand.CommandType = CommandType.Text .SelectCommand.CommandText = "SELECT * FROM [sheet1$]" 'エクセルファイルのデータをメモリーテーブルに読込む .Fill(DT) End With Catch ex As Exception MsgBox(ex.Message) End Try で貼り付けました。 デバッグにはひっかかりませんでした。 そのボタン2を押したんですが 何も出てきません。 MsgBox(ex.Message) で、何かメッセージが出てくると思っていたんですが、 VB.net 全くの初心者です。 これでexにデーターが呼込まれているのでしょうか すいませんが 続けて教えてください。

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

こんにちは。 下記のように書けば、PCに保存したエクセルファイルを読込めます。 Public Overloads Function GetExcelData() As Boolean '変数宣言 Dim OleConnection As OleDb.OleDbConnection = Nothing Dim OleAdapter As OleDb.OleDbDataAdapter = Nothing Dim DT As DataTable = Nothing Try 'クラスインスタンス作成 OleConnection = New OleDb.OleDbConnection OleAdapter = New OleDb.OleDbDataAdapter DT = New DataTable() '接続情報設定 ※Data Sourceにエクセルファイルの保存先絶対パスを指定 OleConnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\フォルダ名\読込むエクセルファイル.xls;" & _ "Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1""" With OleAdapter .SelectCommand = New OleDb.OleDbCommand .SelectCommand.Connection = OleConnection .SelectCommand.CommandType = CommandType.Text .SelectCommand.CommandText = "SELECT * FROM [読込むエクセルファイルのシート名$]" 'エクセルファイルのデータをメモリーテーブルに読込む .Fill(DT) End With Return True Catch ex As Exception MsgBox(ex.Message) Return False End Try End Function

10071007
質問者

お礼

NoMusicNoLife49 さんありがとうございます。 早々に VB.netのModule1.vbに貼り付けました。 するとOverloadsの所が緑の波線になりました。 デバッグにはひっかかりません。 下記の2ヶ所は書換えました。 "SELECT * FROM [sheet1$]" "Data Source=C:\test.xls;" それでまったくの初心者なのでButton2_ClickでこのFunctionを動かすにはどう書いたらいいのでしょうか。 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click <-----ここの書き方が判りません。 End Sub 又、"Provider=Microsoft.Jet.OLEDB.4.0;"となっているんですが サーバーはSQL2000なんですがこの設定でよろしいのでしょうか。 教えてください。 引き続きよろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。
  • singlecat
  • ベストアンサー率33% (139/418)
回答No.2

手元にDelphiのものしかなかったので.... StrProvider := 'Provider=Microsoft.Jet.OLEDB.4.0;'; StrDBFile := 'Data Source=' + ExcelFileName +';'; StrExtended := 'Extended Properties=Excel 8.0;'; ADO.ConnectionString := StrProvider + StrDBFile + StrExtended; ※ADOこのコネクションストリングのデータソースをエクセルのファイル名(フルパス) ※この設定で、ADOを宣言して ADO.SQL.Text := 'SELECT * FROM [Sheet1$]'; ※シート名+"$"をテーブル名のようにSELECTしてみてください。

10071007
質問者

お礼

早々の返信ありがとうございます。 初心者で全く判りません。 Delphi用ということでVB化しようとしたのですが・・・ Dim StrProvider, StrDBFile, StrExtended As String StrProvider = "Provider=Microsoft.Jet.OLEDB.4.0" StrDBFile = "Data Source=' + ExcelFileName +" StrExtended = "Extended Properties=Excel 8.0;" ADO.ConnectionString = StrProvider + StrDBFile + StrExtended; '※ADOこのコネクションストリングのデータソースをエクセルのファイル名(フルパス) '※この設定で、ADOを宣言して ADO.SQL.Text = "SELECT * FROM [Sheet1$]" デバッグするとADOは宣言できません。 となります。 全く手がでません。 それとこれはJetではないかと思うのですが? 何から何まですいません。 VBで何か資料があれば教えていただけませんでしょうか。

全文を見る
すると、全ての回答が全文表示されます。
  • singlecat
  • ベストアンサー率33% (139/418)
回答No.1

ExcelのデータはADOで普通に"TABLE"と同様に扱えます。 なので、SQLでTABLEとしてSELECTすれば読めます。 ※シート名の指定とか詳細は調べてみてください。 SQLサーバへは通常にSQLでINERTすればOKです。

10071007
質問者

お礼

すいません まったくVB.Net初心者で、判りません。 >ExcelのデータはADOで普通に"TABLE"と同様に扱えます。 の部分が良く判っていないのですが・・ SQLでは簡単には SELECT AAA FROM DATABASE ですが、これはSQL(MS SQL2000)のテーブルに対して ですよね。 何か参考になる例かサイトでもあれば 教えていただければ幸いです。 よろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • アクセス2000→エクセル2010へエクスポート

    Private Sub cmd出力ボタン_Click() DoCmd.SetWarnings False DoCmd.TransferSpreadsheet acExport, 8, "出力クエリ", "C:データ.xlsx", True, "" DoCmd.SetWarnings True End Sub 実行すると 外部テーブルのフォーマットが正しくありません と出てしまいます。 エクセル97の形式にエクスポートする際は大丈夫でした。 spreadsheettypeの引数が違うのかとは思いますが適切な数値がわかりません。 他のやり方等もあれば教えて下さい。

  • access一部のフィールドを他のテーブルへVBA

    先日 https://okwave.jp/qa/q10245651.html において > table2の新しいデータとして > table1のデータをコピーしたい、 単に追加で ということであれば、という 御回答: Sub Test() Dim StrSQL As String StrSQL = "INSERT INTO table2 SELECT table1.* FROM table1;" DoCmd.SetWarnings False DoCmd.RunSQL StrSQL DoCmd.SetWarnings True End Sub ---------------------- 上記の 回答をいただき うまく稼働しました 部分的にフィールドを別テーブルに 移動するとき ここでは table1のフィールド名 IDに table2のフィールド名 bに 入っている数値 にい 1を加えた数値を 移動したいのですが Public Function Test() Dim tb1 As Table Dim tb2 As Table tb1 = table1 tb2 = table2 Dim strSQL As String strSQL = "INSERT INTO table2![ID]SELECT"("[b]"FROM tablel)+1" (table1のフィールド[b]の数値に1を加えた数値を table2のフィールド[ID]に移行する、というつもりです) DoCmd.SetWarnings False DoCmd.RunSQL strSQL DoCmd.SetWarnings True End Function 稼働しません すみません 宜しくお願い致します (ついでながら ここで でてくるb というのは テーブル table3 の IDの総和 すなわち SELECT Count(table3.ID) AS b FROM table3; 要は table3の最後のレコードの次のレコードの 番号の数値を table2のIDに移動したい というわけであります) (いずれのIDや bについても 数値型 長整数型 重複あり です)

  • EXCELファイルからACCESSへインポート

    質問させていただきます。 ACCESSのフォームから、EXCELファイルを選択してEXCELの内容を、 テーブルにインポートさせたいのですが。以下の方法で行って いるのですが、テーブルに反映されません。 Private Sub cmd_Import_Click() Dim InitialFileName As String Dim varTitle As Variant Dim FileName As String InitialFileName = "hoge.xls" varTitle = "ファイルを開く" FileName = GETHOGEOPEN(varTitle, InitialFileName) DoCmd.SetWarnings False DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "T_HOGE", FileName, True DoCmd.SetWarnings True MsgBox "完了しました" End Sub ACCESS → ACCESS2003 SP3 EXCEL →EXCEL2003 SP3 よく見ると、すでにEXCELのバージョン指定が違う(汗) これが原因かも・・・・(汗) わかる方がいらっしゃったら教えてください。

  • アクセス2007 テーブルの全削除とデータ移動

    アクセス2007 テーブルの全削除とデータ移動 全テーブルを削除して、データをインポートしようとしています。 質問1. 下記のコードで、リレーションの張ってあるテーブルの削除でエラーになります。 でも、DoCmd.SetWarnings Falseの状態で、手動で削除するとエラーになりません。 だったらと思い、コードにDoCmd.SetWarnings Falseを追加したのですが、やはりエラーになります。 対処法はないでしょうか? 質問2. テーブルの中に「~TMP******」という勝手に作られたテーブルは、削除してもいいものなのでしょうか? 質問3. 削除後にインポートをしたいのですが。 手動でアクセスメニュー>外部データ>アクセス(のインポート)>現在の~~>すべて選択(テーブル)>OK これを実現するVBの記述は、どんなコードになるのでしょうか? --------------------------------------------------------------------- Private Sub 旧バージョンからデータ移動_Click() Dim i As Integer Dim tbls As DAO.TableDefs Dim tbl As DAO.TableDef '開いているフォーム全てを閉じる For i = Forms.Count - 1 To 0 Step -1 DoCmd.Close acForm, Forms(i).Name Next i Set tbls = CurrentDb.TableDefs DoCmd.SetWarnings False  '追加-------------------    ’全テーブル削除 For Each tbl In tbls If InStr(1, tbl.Name, "MSys", vbBinaryCompare) = 0 And InStr(1, tbl.Name, "~TMP", vbBinaryCompare) = 0 Then tbls.Delete (tbl.Name) End If Next DoCmd.SetWarnings True   '追加----------------   ’旧バージョンからのデータインポート   ’VBコードがわかりません End Sub ------------------------------------------------------------------------- ※旧バージョンとはアクセス本体ではなく、自分でつくったDBの旧バージョンです。 複数質問で申し訳ありませんが、よろしくお願い致します。

  • Accessクエリ実行時のメッセージ表示について

    クエリ実行時にメッセージが表示されるのが面倒なので以下のようにしました DoCmd.SetWarnings False クエリ実行 DoCmd.SetWarnings True こうするとメッセージが表示されなくなりますが、他の箇所 (テーブルを開いてデータを削除とか、フォームの削除とか) でもメッセージが出なくなってしまいます。 他のところではメッセージが出るようにしたいのですが… また、一度mdbを閉じて開きなおすと、ちゃんと出ます

  • sqlについて

    SQLについて質問です。 VBからMDBにSQLでデータの参照をしたいのですが ("select * from abc where No = " & No & " ;") テーブル内の数ある項目の中で一つだけまたは複数除いて参照する場合のSQL文を教えてください。 項目が60個ほどありますので一つ一つ指定していくとすごく長いSQLになってしまいそうですのでお知恵をお貸しください><

  • VBA内でSQL(UPDATEをループ処理)したいのですが

    アクセスを使って UPDATE 在庫計画 SET 在庫計画.2 =[1]-[2]; 在庫計画・・・テーブル名 1・・・フィールド名  ・・・1の在庫数 2・・・フィールド名  ・・・2の払出し数 上記のSQLで 2の払出し数を在庫数に更新して 在庫予測をします。 テーブルには、3,4,5・・・30,31のフィールド(払出し数)があります。 UPDATE 在庫計画 SET 在庫計画.3 =[2]-[3]; のように更新クエリを次々作って3,4,5・・・の在庫予測数に 更新して行くのは大変なので VBA内でSQLを実行する方法を教えてください。 FOR NEXT を用いてループを組んでいけば良いのでしょうが VBAの知識が無く困っています。

  • oracle(SQL)のHINT指定について

    性能問題について対応しています。 約2000万件のマスタと付随する各テーブルを結合して、検索条件に一致するデータを抽出するSQLを開発していますが、これらのパターン(曖昧検索:前方一致)において、前述の2000万件のマスタが駆動表となり、且つフルスキャンが走るものがあり、改善策を検討しています。 つきましては、HINT指定で駆動表を強制的に各テーブルに変更する方法(SQLのHINT指定内容)についてお教え願います。  →曖昧検索条件にもっとも絞られる対象のテーブルを駆動表とし、マスタテーブルはその駆動表とプライマリーキーで結合した形でアクセス(フルスキャンを避ける)ような実行計画となるSQLに改善をしようとしています。 以上です。 

  • SendKeyで解決できないでしょうか?

    こんにちは。どうぞ、よろしくお願いします。 テーブル作成のクエリに関することです。 コマンドボタンのクリック時のイベントに テーブル作成クエリを指定しています。 其の場合、以下のような確認のダイアログボックスが出ますが、 これを出ないように、出来ないものでしょうか? (2つのダイアログボックス共に、"Y"を押下します。)   テーブル作成クエリを実行すると、   新しくテーブルが作成されます。   **** 件のレコードが新規テーブルにコピーされます。 -------------- クリック時のイベントに付いてですが、 SendKeyを使ってみましたが、上手く行きませんでした。 SendKeyはアクティブウィンドウについて作用するとのことなので、 フォームを閉じて…、などを考えて、次のような感じでやりました。 DoCmd.Close acForm, "フォーム名" DoCmd.DeleteObject acTable, "テーブル名" DoCmd.OpenQuery "作成クエリ", acNormal, acEdit SendKeys "y", True SendKeys "y", True DoCmd.OpenForm "フォーム名" DoCmd.DeleteObjectは、 テーブルを削除していないと上書きするかどうかを聞いてくるので、 削除しておこうと思い書きました。SendKeyでは、可能に出来ないのでしょうか? DoCmd.SetWarnings False も少し試しましたが、違うようですし。 それとも、簡単には解決できないようなことでしょうか。どうぞ、お願いします。

  • アクセスVBAのSQLについて

    (1)テキストファイルに記述したSQL文のセットをVBAで実行するコマンドはありますか? (2)テーブルを作成する際の、DB指定は 「create table "DB名"."テーブル名"…」としたらよいでしょうか (3)"DB名". を省略できるのはどのような場合ですか? (4)Docmd.RunSQL "" で一度に複数のSQL文を実行できますか? よろしくお願いします。m(_ _)m