• ベストアンサー

VB2008プログラミング(データベース)

VB2008でプログラムをしています。 データベースのSQL文でエラーが解決できません。 どなたか教えてください。 -内容ー データベースにテーブルを追加したいのですが、フィールド名に半角(No)を使うとエラーになります。 全角(No)に変えるだけでエラーはなくなりますがその理由がわかりません。 <エラー> Com = New OleDb.OleDbCommand("CREATE TABLE 物件(No INTEGER), cn) Com.ExcuteNonQuery() <正常>    Com = New OleDb.OleDbCommand("CREATE TABLE 物件(No INTEGER), cn) Com.ExcuteNonQuery()

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

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

解決済みかもしれませんが。 select [No] from 物件 みたいに []とかで囲むと予約語でも使えるはずです。

intexjp
質問者

お礼

有難うございました。 []で囲んで実行できました。 助かりました!!

その他の回答 (1)

回答No.1

項目名(No) が予約語に引っかかっているのではないですか? それと、CREATE文の終わりの(")がありませんが、 <正常>もエラーしませんでした?

intexjp
質問者

お礼

ご回答ありがとうございました。 質問に記しました文には書き写し間違いで(")が抜けていました。 実際には(")を入れております。 ご指摘の様に予約語でエラーになっているようです。 実は既に"No"のフィールドがあるデータベースを使用しなくては なりません。テーブルの削除、作成というプログラムを作っていますが 他の方法で対処を考えています。 ご教授有難うございました。

関連するQ&A

  • VB2008データベース

    非接続型データベースでUpdateをする文を書いていますがUpdateでエラーが出てしまいます。  OleDbCommandBuilder の参照をネットで確認等していますがエラーの内容がわかりません。 データベース参考書等にも下記と同じ文例でかいてあります。 どなたか教えてください。 *VB2008で開発しています。 Dim cn As OleDb.OleDbConnection Dim Buf As String Dim dAdp As OleDb.OleDbDataAdapter Dim dSet As DataSet Dim dTbl As DataTable Dim cBuild As OleDb.OleDbCommandBuilder Buf$ = DefCnSt$ & X_SystemFile$ & ";Jet OLEDB:Database Password=" & XdtPs$ cn = New OleDb.OleDbConnection(Buf$) dAdp = New OleDb.OleDbDataAdapter("SELECT * FROM 物件", cn) dSet = New DataSet("物件") dAdp.Fill(dSet, "物件") dTbl = dSet.Tables("物件") dTbl.Rows(2)(1) = "ABC" cBuild = New OleDb.OleDbCommandBuilder(dAdp) dAdp.Update(dSet, "物件") <-ここでエラーが出ます。

  • SQLを連続発行する時の正しい(?)書き方は?

    Microsoft Visual Basic 2010 Express の質問です。 ExcelVBAや、AccessVBAで作成したプログラムを、VBに移そうと思っています。 ネットや本のサンプルを、自分のやりたいことに修正しつつ、一応、動作としては希望通りなのですが、元々VBAで簡易に作ったものだけに、本来なら注意すべきインスタンスの管理などがおざなりになっています。 動作は一応正常ですが、果たしてこれで良いのか不安でもありますので質問させていただきます。 大抵の本やサンプルには、複数のSQLを連続で発行するようなものは載っていませんが、いくつものSQLを順次発行していく処理をする時は、どのように記述するのが正しいでしょうか? 例えば、Access2010データベース、C:\test.accdb には、別のテーブルからリンクしたテーブル genpon があるとします。これをコピーしたテーブル、tb01を作る場合、 ------------------------------------ Dim com As OleDb.OleDbCommand Dim cn As OleDb.OleDbConnection = New OleDb.OleDbConnection( _ "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source=C:\test.accdb;") cn.Open() ''現在のデータを削除 com = New OleDb.OleDbCommand("DROP TABLE [tb01];", cn) com.ExecuteNonQuery() ''現在のデータを削除 com = New OleDb.OleDbCommand("SELECT * INTO [tb01] FROM [genpon];", cn) com.ExecuteNonQuery() ------------------------------------ SQLとしては、現テーブルをDROPして、SELECT * INTO を発行すれば希望通りで、上記もその通り動きますが、NEWでインスタンス作成を繰り返しているのは、やってはいけない事ではないでしょうか? さらに、例えばこのコードの続きとして、FOR~NEXTや、DO~LOOPで繰り返しを設け、その中でINSERT INTO を発行しながら、データを登録するような処理を加える場合、このままでは NEWをループの回数分、繰り返す事になります。 プロシージャの中で、ループなどで複数のSQLを発行する場合、記述として正しい作法がありましたら、教えてください。

  • データベースの考え方で。

    データベースの考え方、で教えてください。 路線検索と、路線にひもづく駅名の時刻表を表示させる、データベースを作りたいと思っているのですが、 その場合、考え方としては、以下のような感じになるのでしょうか? 路線名のtbl sql文: create table transit ( id integer not null, name varchar(20) not null ); 路線名tblにひもづく、駅名tbl sql文: create table station ( id integer not null primary key, transit_id integer not null, name varchar(20) not null ); 駅名tblにひもづく、時刻表tbl sql文: create table timetable ( id integer not null primary key, station_id integer not null, hour integer not null, minute integer not null ); 表示パターンとしては、 ================================= ○○線: XX駅 6:10 20 7:30 55 . . . . . . 22:15 36 ================================== のような感じです。 よろしくお願いします。

  • 【VB】データグリッドコントロールにデータベースを表示させたい

    お世話になります。 フォーム上にMicrosoft DataGrid Control 6.0(OLEDB)を置いて、 データベースと接続し、データベースを表示させたいのですが、 データベースエンジンがMicrosoft.Jet.OLEDB3.51だとうまく表示してくれますが 4.0だとなぜか表示してくれません。 原因、対策などわかるでしょうか? ソースは以下のように単純なものです。 Private cn As ADODB.Connection Private rs As ADODB.Recordset Private Sub Form_Load() Set cn = New ADODB.Connection cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\パスワード管理.mdb" cn.Open Set rs = New ADODB.Recordset rs.Open "パスワード", cn, adOpenStatic, adLockReadOnly Set DataGrid1.DataSource = rs End Sub

  • .NET MDBデータベース更新について質問です

    DataGridViewで表示するところまでできたのですが DataGridView上で編集したものを更新ボタンで MDBデータベースに上書き保存という形で 行いたいのですがいろいろ調べてもわかりませんでした。 VBを初めて日が浅いのでこつこつ勉強中なのですが 業務上の都合でDBの作成を行っています。 基本的に書き直したもの 'データベース取得 Dim Cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=保存場所" ) Dim Cm As OleDbCommand = Cn.CreateCommand Dim Adapter As New OleDbDataAdapter(Cm) Dim Table As New DataTable Cn.Open() Cm.CommandText = "SELECT * FROM Aテーブル" Adapter.Fill(Table) DataGridView1.DataSource = Table DBにはこのように接続しております。 ここまでも手探りで行ったので熟練の方から見ればへんかもしれませんが指導おねがいします。

  • VB でExcelファイルの行を削除したのですが?

    VB歴はまだ浅く素人レベルではございますがよろしくお願いします。ご質問内容も不鮮明な点もあるかもしれませんがご指導お願い致します。 SQL Server & VB2008EEを使用しております。 身近なExcelファイルをデータベースもどきで使用できないかと思いまして、今挑戦しています。 現在、読み込み、ソート、UPDATEなどのクエリも順調に動作しました。 しかし、DELETEで 「ISAMではリンクテーブル内のデータを削除することは出来ません」 というエラーが出てしまい困っております。 UPDATE [会社$] SET 氏名='' などで空白には出来るのですが行が残ります。行削除が出来ると理想なのですが.. よろしくお願いいたします。 【参考ソースコード】************************************* Dim row As Integer Dim name As String 'データグリッドビューの行番号を取得する row = DataGridView1.CurrentRow.Index '行番号から社員名を取得する name = DataGridView1.Item(0, row).Value.ToString() 'コネクションを指定する cn = New System.Data.OleDb.OleDbConnection("Provider=Microsoft.jet.OLEDB.4.0; " & _ "Data Source=C:\DATA\TEST.xls; " & _ "Extended Properties=Excel 8.0") 'Excelブックの接続 cn.Open() com = New OleDb.OleDbCommand("DELETE FROM [会社$] WHERE 氏名='" & name & "'", cn) com.ExecuteNonQuery() 'コネクションを閉じる cn.Close() '正常終了のメッセージ MsgBox("1件の社員データを削除しました") 'データグリッドビューの再表示 DataLode() *****************************************************

  • VB.NETでテーブルを作成

    VB.NETとAcceseを使用してフォームの入力内容に基にボタンをしてDBにテーブルを作成するプログラムを作成していますが上手くいきません。 どのようにすれば上手くいくのか教えてください。 よろしくお願いします。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Cn As New OleDb.OleDbConnection() Cn.ConnectionString = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=" & Application.StartupPath & "\products.mdb" Cn.Open() Dim mysql As New OleDb.OleDbCommand() mysql.Connection = Cn mysql.CommandText = "CREATE TABLE '" & TextBox1.Text & "' ('" & TextBox2.Text & "' '" & ComboBox1.Text & "' NOT NULL,'" & TextBox2.Text & "' '" & ComboBox2.Text & "','" & TextBox3.Text & "' '" & ComboBox3.Text & "',PRIMARY KEY('" & TextBox1.Text & "'))" Cn.Close() End Sub

  • 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.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の型の定義 を複数用意してもエラーが表示。

  • VB6+SQLServer2005 DBの新規作成

    VB6+ADOを使用してSQLサーバーの新規データベースファイルを 作成しようと思っております。下記のようなプログラムを つくりましたがうまく動きません。お知恵を貸してください。 catDB.Createのところで 「インターフェイスがサポートされていません」 とエラーが出ます。 いままでAccess2000で動かしていたものをSQL2005に移設している ところです。 SQLサーバーは、はじめて触ります '--------------------------------------------- 'Const ADO_VERSION ="Microsoft.Jet.OLEDB.4.0;" Const ADO_VERSION ="SQLOLEDB;" '--------------------------------------------- Set catDB = New ADOX.Catalog catDB.Create "Provider=" ADO_VERSION & _ "Data Source=" & "d:\test"