VB.netでACCESSに接続しデータベースを参照する際にN_MAXKEYの値を取得できない

このQ&Aのポイント
  • VB.netでACCESSに接続しデータベースを参照している際、N_MAXKEYの値をGetInt32(0)で取得できませんでした。
  • N_MAXKEYの値をどのように取得するか方法をご教授ください。
  • [項目1]は整数型で設定されています。
回答を見る
  • ベストアンサー

 お世話になっています。SQLについての質問です。

 お世話になっています。SQLについての質問です。  VB.netでACCESSに接続しデータベースを参照しているのですが "select max([項目1]) AS N_MAXKEY from [テーブル1]" を実行した際、N_MAXKEYの値をGetInt32(0)で取得できませんでした。 N_MAXKEYの値をどのように取得するか方法をご享受ください。宜しくお願いします。 以下、作成したソースコードの一部です。尚、[項目1]は整数型で設定されています。 ======================== Public G_DATABASES As System.Data.OleDb.OleDbConnection  ~(省略)~ Dim wrk_sql As String 'SQL 文字列変数 Dim cmnd As New System.Data.OleDb.OleDbCommand Dim dr As System.Data.OleDb.OleDbDataReader Dim intTest As Integer = 0  ~(省略)~  wrk_sql = "select max([項目1]) AS N_MAXKEY from [テーブル1]"    cmnd.Connection = G_DATABASES  cmnd.CommandType = CommandType.Text  cmnd.CommandText = wrk_sql  dr = cmnd.ExecuteReader()  intTest = dr.GetInt32(0) ’値を取得できない(´・ω・`) ========================

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

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

drはSystem.Data.OleDb.OleDbDataReaderですよね。 ならば、Readを実行後、列を指定しないとデータは取得できないのでは? 単一の数値を取得したいだけであれば、ExecuteScalarでいいと思いますけど。

west_field
質問者

お礼

ありがとうございました。無事解決しました!! 列を指定せずに悩んでいた自分が恥ずかしい。。。

関連するQ&A

  • vb.netでデータベース(Access)を複数アクセス(編集)する方

    vb.netでデータベース(Access)を複数アクセス(編集)する方法について いつも大変お世話になっています。 vb.netでデータベース(Access)を複数アクセス(編集)する方法についてご教授願います。 'SQL文 Dim wrk_sql As String 'データベース Dim G_DATABASES As New System.Data.OleDb.OleDbConnection 'DBの型を定義 Dim dr As System.Data.OleDb.OleDbDataReader 'SQLの型を定義 Dim cmnd As New System.Data.OleDb.OleDbCommand 'データベースを開く G_DATABASES = DBOpen(D:\test\db1.mdb") 'データ抽出 ※1 wrk_sql = "SELECT * FROM TEST" wrk_sql &= " WHERE N_DATA = 0" cmnd.Connection = G_DATABASES cmnd.CommandText = wrk_sql 'コマンドの実行 dr = cmnd.ExecuteReader() While dr.Read() = True ' ………← ※2 End While <目的> [※1]で抽出した結果(複数行存在します)を保持したまま [※2]の中で同じDB(G_DATABASES)にアクセスし SELECT文で抽出した結果を保持したまま処理を続けたい。 <問題> ・実行時「指定したデータベースは既に開いている」とのエラーが表示。 ・DBの型の定義、SQLの型の定義 を複数用意してもエラーが表示。

  • 初歩的なSQLですが・・・

    私の環境はOS:Xp      ACCESS2000です。 宜しくお願いします 今AccessVBAで作業をしているのですが、 Dim ws As DAO.Workspace Dim DB As DAO.Database Dim rs As DAO.Recordset Dim sql As String Set ws = DBEngine.Workspaces(0) Set DB = ws.Databases(0) sql = "select MAX(銀行コード) from 銀行テーブル ;" Set rs = DB.OpenRecordset(sql) Me.合計 = rs このSQL文で銀行テーブルに入っている銀行コードの最大値を取得したいのですが、取得した後どのように記述したら「rs」から値を引っ張り出せるのでしょうか? 宜しくお願いします。

  • ASP.NET

    VBで作成しています。 下記はSQLサーバーのデータベースを使ったプログラムですが、Microsoft Office Accessのデータベースを使う場合は、どのように変更すればいいでしょうか?教えて下さい。 お願いします。 <プログラム> Dim strSQL As String Dim sqlDa As SqlClient.SqlDataReader Dim dr As DataRow 'SQL文 strSQL = "SELECT * FROM Data1 Dim cmdSQL As New SqlClient.SqlCommand With cmdSQL .Connection = Action .CommandType = CommandType.Text .CommandText = strSQL End With Try Action.Open() sqlDa = cmdSQL.ExecuteReader (以下省略)

  • ExcelにSQLの結果を表示

    ExcelVBAにてSQLで取得した値を貼り付けたいのですが どのようにコードを記入すればいいんでしょうか? ネットで調べたら下記のような参考コードを見つけたのですが dim SQL as String dim rs As Recordset SQL = " SELECT SUM(フィールド名) AS 名前 FROM テーブル名 " Set rs = CurrentDb.OpenRecordset(SQL) この後 RANGE("A1")=rs としても種々のエラーが出ます? どうしたらよいでしょうか? よろしくお願いします

  • VB2005でACCESSのADO.NETでのテーブル名取得

    VB2005 ACCESSのテーブル名を取得したいのですが、方法をご教示ください。以下のところで悩んでいます。 OpenFileDialog1.Filter = "アクセス ファイル (*.mdb)|*.mdb" OpenFileDialog1.ShowDialog() If OpenFileDialog1.FileName <> "" Then Dim St As String Dim Cn As New System.Data.OleDb.OleDbConnection Dim SQL As System.Data.OleDb.OleDbCommand Dim UserID As String = "Admin" Dim Password As String = "" Dim MDBFile As String = OpenFileDialog1.FileName Dim N As String = Microsoft.VisualBasic.Right(MDBFile, 9) St = "Provider=""Microsoft.Jet.OLEDB.4.0"";" St &= "Data Source=""" & MDBFile & """;" St &= "User ID=" & UserID & ";" St &= "Jet OLEDB:Database Password=" & Password Cn.ConnectionString = St SQL = Cn.CreateCommand    Cn.Open() この後テーブル名までたどり着けません DataTable  Cn.GetSchema Cn.GetOleDbSchemaTable( "restrictions") などヘルプなどから試みていますが、これらのコーディング法がわかりません。 テーブル名がわかっている(サンプルのPubs の "Publisher")場合はデータセットからはフィールド名が取得できたのですが・・・ よろしくお願いいたします。

  • コンボボックスのSelectedItemの使い方

    エリアテーブルを取得し コンボボックスの見える値は「値」にして コンボボックスを取得するときには「コード」を 取れるようにしたいと思っています。 どのように書くと取得できるのでしょうか? バインドするやり方が分からなくて 下記のようになっています。 Dim strSql As String Dim dr As SqlClient.SqlDataReader = Nothing Dim daAdp As New SqlClient.SqlDataAdapter Dim cmd As New SqlClient.SqlCommand Dim ds As DataSet = New DataSet() mConn = New SqlConnection 'DBのオープン  Conn.DbConnect()   Dim dbCmd As SqlCommand = Nothing 'SQL発行 strSQL = "SELECT コード,値 " strSQL = strSQL & "FROM エリア" Conn.ExecSqlSelect(strSql, dr)   ComboBox1.Items.Clear() Do While dr.Read ComboBox1.Items.Add(dr.GetString(1)) ComboBox1.SelectedItem = dr.GetString(0) Loop

  • SQLから取得した値をEXCELへ表示したい

    お世話になります。 お分かりになる方教えてください。 VB.NETでSQLに繋いで画面から入力されたテキストボックスの値をパラメータに 結果がワークテーブルに格納されるストアドを呼び出します。 ストアドの結果(ワークテーブルの値)をSELECTして 今はダイアログに仮に出している状態です。 それからOLEDB接続を使ってEXCELにデータを表示したい (セルに結果を貼り付けたい)のですが データのやり取りがうまくいきません。 System.Data.SqlClient.SqlDataReaderで取得した値をSystem.Data.OleDb.OleDbDataReaderに移したいのですが よくわかりません。 どなたか教えていただけませんでしょうか。 よろしくお願いします。

  • SQLサーバのデータベース名表示について

    SQLサーバ初心者です。 わからないことがあり、ご存知の方いらっしゃいましたらご教示ください。 SQLサーバ2008 を使用しています。 SQLサーバのデータベース名の一覧を取得する方法として、 sys.databasesをselectしたり、sp_databasesを使用してDB名を取得できることは確認できたのですが、 master/msdbなどのシステムデータベース以外の自分で作成したユーザーデータベースのみリストする方法があればご教示いただけないでしょうか?

  • アクセスDbのテーブル名の取得(VB2005)

    再度の質問です アクセスDBのテーブル名を取得したのですが、方法をご教示ください。DAOでは tabledefsでとれたのですが・・ 以下のコードで先に進めません。 OpenFileDialog1.Filter = "アクセス ファイル (*.mdb)|*.mdb" OpenFileDialog1.ShowDialog() If OpenFileDialog1.FileName <> "" Then Dim St As String Dim Cn As New System.Data.OleDb.OleDbConnection Dim SQL As System.Data.OleDb.OleDbCommand Dim UserID As String = "Admin" Dim Password As String = "" Dim MDBFile As String = OpenFileDialog1.FileName Dim N As String = Microsoft.VisualBasic.Right(MDBFile, 9) St = "Provider=""Microsoft.Jet.OLEDB.4.0"";" St &= "Data Source=""" & MDBFile & """;" St &= "User ID=" & UserID & ";" St &= "Jet OLEDB:Database Password=" & Password Cn.ConnectionString = St SQL = Cn.CreateCommand Cn.Open() Dim tbl As DataTable tbl = Cn.GetOleDbSchemaTable(OleDb.OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"}) ここでtblを見ると TABLE_CATALOG _SCHEMA _NAME _TYPE ・・・DATE_MODIFIED などは見えるのですが、これがDB内のテーブル数だけ繰り返されます。 取得したいのは、TABLE_NAME に ある 例えば "Pub-ID"に相当する内容なのですが、HELPで探しても、その方法がわかりません、ぜひ教えてください。よろしくお願いいたします。

  • datagridviewからexcelへエクスポートしたい

    datagridviewからexcelへエクスポートしたい アクセス2000に接続をして、クエリから得られる結果をdatagridviewに表示は出来たのですが、 それをエクセルに吐き出す事が出来ずに苦慮しております。 Public Class form1 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim cn As OleDb.OleDbConnection _ = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=C:\VB2008\xxxxx.mdb;") Dim cmd As New OleDb.OleDbCommand("Q1") cmd.CommandType = CommandType.TableDirect Dim da As New OleDb.OleDbDataAdapter() da.SelectCommand = cmd da.SelectCommand.Connection = cn Dim dt As New DataTable da.Fill(dt) DataGridView1.DataSource = dt End Sub 上記のコードでdatagridviewに表示は出来ました。 webで色々調べたのですが、サンプルとなるコードが見つからずの状態です。 サンプルとなるコードはありますでしょうか? そもそも、エクセルに吐き出す事は可能でしょうか? 可能であれば、どのようなコードを書けばよいでしょうか? 環境ですが、 XP(SP3)、 VB2008EXPRESS EDITION Access2000(SP3) Excel2007(SP2) 以上になります。 お忙しい所お手数をお掛けしますが、 ご教授下さい。 以上、宜しくお願いします。