• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C#、ora-00933エラーについて)

C#のora-00933エラーについて

このQ&Aのポイント
  • C#のプログラムでグリッドビューにSQL文で取得したデータを表示する際、ora-00933エラーが出ています。具体的には、oraAdp.Fill(this.m_dsGridBind,"MEISAI")の行でora-00933:式がありませんというエラーが表示されます。
  • エラーメッセージ「ora-00933:式がありません」とは、SQL文の構文に誤りがあることを示しています。この場合、strSQLのSQL文に間違いがある可能性があります。指定したテーブルやカラムが存在しない、演算子や条件式の記述が間違っている、間にスペースが必要な箇所でスペースが抜けているなど、構文エラーが発生している可能性があります。
  • ora-00933エラーを解決するためには、以下の点をチェックしてみてください。まず、strSQLのSQL文が正しく記述されているかを確認してください。テーブルやカラムの名前のスペルミスや抜け漏れがないか、演算子や条件式の記述が正しいかを確認しましょう。また、SQL文の実行時に必要なパラメータ(dateTimePicker1.TextやdateTimePicker2.Textなど)が正しく指定されているかも確認してください。もし間違いがないのにエラーが発生する場合は、データベースの接続情報や環境設定に問題がある可能性も考えられますので、それらも確認してみてください。

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

  • ベストアンサー
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.4

#3は、betweenが対象とする列(Kounyurireki.Hiduke?)の記述が欠けたままなので 適宜修正してください。

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

その他の回答 (3)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.3

> ora-00905:キーワードが見つかりませんと 「解決した」とは「betweenの後ろに列を追加した結果、正常動作に至った」ですか? その後別な問題が生じた?正常動作に至ってないでしょ。 ora-00905は、対を成すキーワードが見つからないといっている。 bewteenには範囲のfromとtoを示すためのandが必要だが、それが欠けてる。 今回の場合、betweenの後に出てくる and は"'and'"が正しい。 構文はbewtten <列名> <範囲from> and <範囲to>だけど、 文字列である範囲from・範囲toを括るシングルクォートの記述が足りない。 誤)between<列名>'2010/10/01and2010/11/30' 正)between <列名> '2010/10/01' and '2010/11/30' strSQL を編集し終わった段階でデバッグ表示させ、SQL*Plusにでも貼り付けて 試験する習慣つけたほうが良いと思います。 また無駄なようでも、strSQLの編集を分けて書くと可読性と移植性が向上します。 #1の通り、適宜半角スペースを入れること。特にカンマの次。ピリオドとの誤読が減らせます。 strSQL = "select Kounyurireki.Hiduke, SyohinHyo.Syouhinmei, SyouhinHyo.Tanka, Kounyurireki.Suryou " strSQL = strSQL & "from SyohinHyo, Kounyurireki " strSQL = strSQL & "where Kounyurireki.Syohinbago = SyohinHyo.Syouhinbangou " strSQL = strSQL & "and between '"+ dateTimePicker1.Text + "' and '" + dateTimePicker2.Text+"'"; aliasも研究してね。記述しやすいので間違いが少なくなりますよ。 strSQL = "select K.Hiduke, S.Syouhinmei, S.Tanka, K.Suryou " strSQL = strSQL & "from SyohinHyo S, Kounyurireki K " strSQL = strSQL & "where K.Syohinbago = S.Syouhinbangou " strSQL = strSQL & "and between '"+ dateTimePicker1.Text + "' and '" + dateTimePicker2.Text+"'";

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

投稿が二重になってたらすみません。 SQL文に誤りがあります。 where Kounyurireki.Syohinbago = SyohinHyo.Syouhinbangou and between'"+ dateTimePicker1.Text + "and" + dateTimePicker2.Text+"'"; where Kounyurireki.Syohinbago = SyohinHyo.Syouhinbangou までは良いのですが、 その次の and とbetween の間に列が記述されていませんよ。(Kounyurireki.Hidukeかな?)

huuuuuuuuuuu
質問者

補足

解決しました!!がora-00905:キーワードが見つかりませんと出たのですがどうすればよいでしょうか?質問とは別ですが回答していただければとてもありがたいです。

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

SQL文のWhereで、betweenがおかしいように思います。 (Betweenの前に列名が無い) カンマの後ろに半角スペース入れる習慣つけると読みやすいですよ。

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

関連するQ&A

  • C#についてです

    DataGridViewにSQLで検索した情報を表示させるプログラムを作っています。 ora-00905というエラーが oraAdp.Fill(this.m_dsGridBind, "RIREKI");で出るのですがなぜでしょうか??色々調べてみましたがわかりません。  private void button1_Click(object sender, EventArgs e) { string strSQL = string.Empty; OleDbDataAdapter oraAdp; strSQL = "select Kounyurireki.Hiduke,SyohinHyo.Syouhinmei,SyouhinHyo.Tanka,Kounyurireki.Suryou from SyohinHyo,Kounyurireki where Kounyurireki.Syohinbago = SyohinHyo.Syouhinbangou and Kounyurireki.Hiduke between'" + dateTimePicker1.Text + "and" + dateTimePicker2.Text + "'"; oraAdp = new OleDbDataAdapter(strSQL, this.m_oDbConn); oraAdp.Fill(this.m_dsGridBind, "RIREKI"); if (this.m_dsGridBind.Tables["RIREKI"].Rows.Count == 0) { MessageBox.Show("該当データがありません"); return; } else { this.dataGridView1.DataSource = this.m_dsGridBind; this.dataGridView1.DataMember = "RIREKI"; } } ご回答よろしくお願いします

  • SQLエラーについて

    ora-00907エラー:右かっこがありませんが出ます。なぜでしょうか?? strSQL = strSQL + "select K.Hiduke 日付,S.Syouhinmei 商品名,S.Tanka 単価,K.Suryou 数量,(S.Tanka * K.Suryou) 金額"; strSQL = strSQL + " from SyohinHyo S,Kounyurireki K"; strSQL = strSQL + " where K.Syouhinbangou = S.Syouhinbangou and K.Hiduke"; strSQL = strSQL + " between to_date(" + comboBox1 +",'YYYY-MM-DD') and "; strSQL = strSQL + " to_date(" + comboBox2 + ",'YYYY-MM-DD')";

  • DataSetの内容がDataGridViewに反映されない

    現在、VB2005でアプリケーションの開発をしているのですが DataSetの内容がDataGridViewに反映されなくて困っています。 表示させたいデータをデータセットにとってくるところは問題ないようで 1回目は上手く表示されるのですが、データセットの中身を変更して セットし直しても表示が変わりません。 以下がソースを抜き出したものになります。 Grid.DataSource = Nothing Grid.DataMember = Nothing Grid.DataSource = DataSet Grid.DataMember = "M_kbn" よろしくお願いします。

  • C#のDataGridViewにCheckBox

    VC#2013でソフトを作成しています. xmlに保存したデータをform上のdataGridViewに表示させたいと考えています. xmlのデータは下記のようになります. <?xml version="1.0" standalone="yes"?> <setting> <test> <No>1</No> <直径>43.1</直径> <全長>43.2</全長> <可>true</可> </test> </setting> xmlを読み込んでfrom上のdataGridViewに表示させるコードは下記のようになります. setting.ReadXml(Directory.GetCurrentDirectory() + "\\setting.xml"); dataGridView1.DataSource = setting; dataGridView1.DataMember = "test"; 上記コードを実行し、<可>の列だけ、checkBoxにしたいと考えていますが、 trueと表示されてしまいます. 多分ですが、string型であるからだと思いますが、どのようにすればcheckBoxを表示することが出来ますでしょうか? 何卒、ご教授宜しく御願い致します.

  • DataSetについて

    下記のようなDataSetを使用した処理質問致します。 TableAdapterのデザイン時にてSELECTCommandで SELECT 'AA' AS 名前 FROM M_マスタ と、記述してDataGridView1に反映しようとしても実際にテーブルに入っているデータがそのまま表示されてしまいます。 このように固定の値を取得する方法はどのようにしたらよろしいのでしょうか?そもそもできないのでしょうか? Dim ds As New DataSet1 Dim Ta As New DataSet1TableAdapters.M_マスタTableAdapter 'テーブルアダプタを利用してデータを読み込む Ta.Fill(ds.M_マスタ) Me.DataGridView1.DataSource = ds Me.DataGridView1.DataMember = "M_マスタ"

  • DataGridViewの列にコンボボックスを表示する方法

    言語:VB2005 データベース:SQLServer 非接続型のデータアクセスです。 .net勉強中の初心者です。件名の件について悩んでいますのでご教授お願いします。 http://dobon.net/vb/dotnet/datagridview/datagridviewcomboboxcolumn.html 上記HPを参考に勉強しています。 DataGridViewComboBoxColumnを使用する方法ではうまく表示できましたが、 DataSourceプロパティを使用する方法ではうまくできません。 (1)の処理を行うとまず、ID 所属コード 所属名称 がDataGridViewにバインドされます。 そこに(2)の処理を行い 所属名称を コンボボックスに変更したいのですが、所属名称の後に 列名が空白のコンボボックスが新たに追加作成されてしまいます。 そして下記のエラーが発生します。 System.FormatException: DataGridViewComboBoxCell の値が有効ではありません この既定のダイアログを置き換えるには、DataError イベントをハンドルしてください。 いったい何がおかしいのか???です。よろしくお願いします。 '**************************************** '(1)DataGridViewにデータをバインドする '**************************************** strsql = "SELECT ID, 所属コード, t1.名称 as 所属名称 FROM ATBL LEFT OUTER JOIN BTBL ON ATBL.所属 = BTBL.コード ORDER BY ID" Dim comm As SqlCommand = New SqlCommand(strsql, Con) Dim dataadapter As SqlDataAdapter = New SqlDataAdapter(comm) dataadapter.MissingSchemaAction = MissingSchemaAction.AddWithKey Dim ds As DataSet = New DataSet() dataadapter.Fill(ds, "テーブル") dgrview.DataSource = ds dgrview.DataMember = "テーブル" '---------------------------------------------------------------------- '(2)DataGridViewにComboBoxを設定する(DataSourceプロパティを使用した例) '---------------------------------------------------------------------- Dim DataSource As New DataTable("DataSource") DataSource.Columns.Add("Value", GetType(String)) DataSource.Columns.Add("code", GetType(Integer)) DataSource.Rows.Add("", 0) DataSource.Rows.Add("小学校", 1) DataSource.Rows.Add("中学校", 2) DataSource.Rows.Add("高校", 3) Dim column As New DataGridViewComboBoxColumn() column.DataPropertyName = "所属名称" column.DataSource = DataSource column.ValueMember = "code" column.DisplayMember = "Value" dgrview.Columns.Add(column)

  • OleDbDataAdapterのエラー

    OS:Windows7 Visual Studio2012Professional いつもこちらでお世話になっています。 OleDbプロバイダーのOleDbDataAdapterでAccessファイルからDataSetへデータを取込む作業をしています。 下記のコードで、一度はDataSetへデータを取り込めたのですが、接続文字列を変更したところ、変更前の接続文字列(パス)を参照に行ってしまいエラーになります。 リビルドしたり、プロジェクトを作成し直したりしましたが、やはり変更前の接続文字列を使用してしまいます。 【コード】 private void Form1_Load ( object sender, EventArgs e ) {  string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\hoge変更後\○○.mdb;"  string sql = @"SELECT * FROM Table;";  DataSet ds = new DataSet();  OleDbConnection cn = new OleDbConnection();  cn.ConnectionString = connectionString;  OleDbCommand cmd = new OleDbCommand();  using (OleDbDataAdapter da = new OleDbDataAdapter()) {  cmd.Connection = cn;  cmd.CommandText = sql;  da.SelectCommand = cmd;  da.Fill( ds ); ← ここで『System.Data.OleDb.OleDbException』エラー   } this.dataGridView.DataSource = ds.Tables[0]; } 【エラー】 System.Data.OleDb.OleDbException はハンドルされませんでした。 HResult=-2147467259 Message=パス 'D:\hoge前\○○.mdb' は正しくありません。パス名に間違いがないことと、ファイルが置かれたサーバーに接続していることを確認してください。 Source=Microsoft JET Database Engine ErrorCode=-2147467259 どなたか原因がおわかりになりますでしょうか。 どうぞよろしくお願いいたします。

  • Datagridviewのコンボボックスにつきまして

    vb2005です。 DataGridViewコントロールのデータセットにデータベースのテーブルをセットしています。 そのDataGridViewの1列目にコンボボックスを設定し、 そのコンボボックスのデータセットにも別のテーブルをセットしたいのです。 Dim dAdp As OleDb.OleDbDataAdapter Dim dSet As New DataSet Dim cn As OleDb.OleDbConnection = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=C:\DB.mdb;") dAdp = New OleDb.OleDbDataAdapter("SELECT * FROM 商品", cn) dAdp.Fill(dSet, "t_商品") DataGridView1.DataSource = dSet.Tables("t_商品") dAdp = New OleDb.OleDbDataAdapter("SELECT * FROM 品種", cn) dAdp.Fill(dSet, "t_品種") Dim col As System.Windows.Forms.DataGridViewComboBoxColumn = DataGridView1.Columns(1) ・・・・★ col.DataSource = dtSet.Tables("t_品種") col.DisplayMember = "品種名" col.ValueMember = "品種コード" 上記のように記述しているのですが、★の部分で、下記のエラーになります。 型 'System.Windows.Forms.DataGridViewTextBoxColumn' のオブジェクトを型 'System.Windows.Forms.DataGridViewComboBoxColumn' にキャストできません データソースを指定したDataGridViewの列にはコンボボックス等の設定は 出来ないのでしょうか?

  • DataGridViewの表示と他のコントロールとの連帯

    こんにちわ(^^) いつもお世話になっております。 現在、DataGridViewを用いてMDBファイル内のテーブルを表示しています。 下記にその部分のソースを抜粋します。 ※dgvDataList=DataGridView '--- Source ここから Dim objConnection As _ New OleDbConnection _ ("Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\test.mdb") Dim strSQL As OleDbCommand = Cn.CreateCommand Dim objAdapter As New OleDbDataAdapter(strSQL) Dim dtbTable As New DataTable strSQL.CommandText = "SELECT * FROM tblWorkTable" Adapter.Fill(Table) dgvDataList.DataSource = Table dtbTable.Dispose() objAdapter.Dispose() strSQL.Dispose() objConnection.Dispose() '--- ここまで 表示対象となるテーブル仕様は下記の通りです。 Name : tblWorkTable Column Type -------------------- colID Integer colDate Date colStartTime VarChar colEndTime VarChar さて本題ですが、 フォームには各フィールド入力用にTextBoxを配置しております。 DataGridViewのCellClickイベントで、CurrentRowの各フィールドを取得しています。 例えば、 (a) DataGridViewの一つのレコードを選択(CellClickイベント発生) (b) 選択したレコードの各列の値をTextBox.Textに設定。 といった感じです。 そこで、TextBoxの値を変更した際に、DataGridViewにも反映させるといった処理をしたいのですが、どうすればよいかわかりません。 具体的には、DataGridViewの選択レコードを変更した際に、もしTextBoxの値が変更されていればその値を反映させ、次にそのレコードが選択された時に、ちゃんと変更した値になっていればよいのです。 非常にわかりずらい日本語で恐縮です…。 どうかご教授願います m(_ _)m

  • OLE でACCESSデータを取得するとメモ型の内容255文字で切れてしまう

    お世話になります。 ■開発環境  VisualBasic2008 Express Edition  ACCESS2003(データ) ■質問内容  VBでaccessのmdbからデータを取得し、画面に表示しようと  しています。  ところが、メモ型の項目が255文字で切れてしまいます。  webでいろいろと調べましたが、jetエンジンの問題かなという  ところまではたどり着いたのですが、具体的にどうすれば改善  できるのかわかりません。  わかる方教えていただけないでしょうか。  よろしくお願いいたします。 ■ソース Dim SQL As String Dim Cn As OleDb.OleDbConnection = New OleDb.OleDbConnection( _ "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="c:\message.mdb;") Dim dAdp As OleDb.OleDbDataAdapter Dim dView As DataView Dim dSet As DataSet = New DataSet("Detail") SQL = "SELECT M_ID,M_Title,M_Detail FROM MESSAGE_TBL " dAdp = New OleDb.OleDbDataAdapter(SQL, Cn) dAdp.Fill(dSet, "Detail") dView = New DataView(dSet.Tables("Detail"), "", "", DataViewRowState.CurrentRows) DataGridView1.DataSource = dView M_ID : 数値型、M_Title : テキスト型、M_Detail : メモ型 DataGridView1に表示されるときには、M_Detailが255文字になっています。     また、 'MessageBox.Show(Len(dSet.Tables("Detail").Rows(1)(2)))     で見たときにすでに255文字に切れていました。

このQ&Aのポイント
  • ボルトの表面欠陥に関するJISB1041規格を調べていますが、対象がM4以下のねじには適用されていないようです。
  • M4ねじでの材料のロール傷起因と思われる傷が発生した場合、JISB1041では頭部の傷は認められない可能性があります。
  • なぜM5以上のねじに規格が限定されているのかは明確ではありませんが、規格制定時の検証や安全性の観点からの判断が考えられます。
回答を見る