• 締切済み

ExcelのVBAからoracleデータベースのデータ取り出しについて

ORACLEのデータベース内の列名称が英文字交じりとなり ユニコードの使用が必要みたいなのですがうまくいきません分かるかたがいらっしゃいましたら回答を御願いします。 現行 mySQL = "select 型式.仕様内容,型式.詳細内容 from A.品番 where(型式.仕様内容 like '検索内容%')" Set rec = cnn.Execute(mySQL) 変更内容 仕様内容-> 内容A 詳細内容-> 内容B 変更後 mySQL = "select 型式.内容N'C,型式.内容D from A.品番 where(型式.内容C like '検索内容%')" Set rec = cnn.Execute(mySQL) エラー表示 実行時エラー (80040e14) ORA-00923 :fromキーワードが指定の位置にありません。 と表示されます。 fromを認識させる為にはどうすればよいですか? ※N'の代わりにStrConv(対象文字,vbUnicode)を使用しても同じこととなります。

  • ohm
  • お礼率57% (4/7)

みんなの回答

  • yoshisuke
  • ベストアンサー率65% (19/29)
回答No.1

エラーメッセージの内容からすると文字コードでは無く、 FROM句の問題のように見えますね。。。 一度FROM句の前後に全角のスペースが混じっていないか など、ゴミが入っていないか調べてみてはいかがでしょうか? ちなみに同じSQLはSQL*Plusでは動いたんですか?

ohm
質問者

お礼

なぜか、変更後の列名の前後に"(ダブコーテションマークだっけな?)を入れると正常に取得できるようです。 アドバイス有難うございました。

ohm
質問者

補足

回答有難うございます from句の前後及び全体を確認しましたが、半角で入力されていました。 SQL*Plusについては、DB管理者ではないため、手持ちではありません。 半角英数字が無い列については、同様のSQL文で動作しました。 なぜだかが良く分かりません、ADO以外のモジュールを利用したほうが良いのでしょうか?oo4oは、有料だしなー。 質問文に間違いがありました。 変更内容 仕様内容-> 内容C (間違い:内容A) 詳細内容-> 内容D (間違い:内容B)

関連するQ&A

  • EXCEL VBAでADOを使ってEXCELファイルよりデータを取得し

    EXCEL VBAでADOを使ってEXCELファイルよりデータを取得しています。 その際のSQL実行結果が上手くいきません。 'Excel のバージョン 2003 SP3 'データ項目名 'ID,名前,,,,,,,,,,,長文1,長文2,,,,削除フラグ,削除日時,更新日時 ←こんな感じで20項目 上記の「削除フラグ」の値を抽出条件にしています。 文字列の項目で、''、' '、'1'などの値があります。 '1'が入っているデータは削除された古いデータなので、抽出対象外にしたいです。 mySql = "select * FROM Sample1 WHERE (名前 LIKE '%山%') AND (削除フラグ <> '1')" Set adoRS = adoCON.Execute(mySql) Debug.Print mySql 上記を実行すると、対象データはあるのに取得できません。 実行時エラーになることはなく、処理は正常に終了します。 mySql = "select * FROM Sample1 WHERE (名前 LIKE '%山%') AND (削除フラグ = '1')" だと、「削除フラグ」に'1'が入っているデータが取得できます。 mySql = "select * FROM Sample1 WHERE (名前 LIKE '%山%') AND (削除フラグ != '1')" これを試しましたが、構文エラー:演算子がありません となります。 SQL文が悪いのか、「削除フラグ」のデータが悪いのかわかりません。 解決していただけなしでしょうか?

  • Excel VBAコンボボックスについて

    いつもお世話になります。 現在ExcelのVBAを使用し、データベースより情報を取得しようと考えています。 データベースから情報の取得はできているのですが、 ボックスを開くたびにデータが下に追加されてしまいます。 ミスは理解できるのですが、どのようにすれば何度開いても同じ情報が 表示されるのか分かりません。 ご存知の方がいればご教授ください。 以下 コード Private Sub CbBox_sample_Change() mySQL = "select * from 情報 order by 日付 desc" Set rec = cnn.Execute(mySQL) Do While Not rec.EOF Form_main.CbBox_kaisei.AddItem (rec(2).Value) rec.MoveNext Loop End Sub ・これだとChangeするたびに増えていくんですよね。きっと。 Excel2002+WindowsXP+Oracle

  • 構文の省略について

    下記をもっと省略(短い構文で)して書きたいのですが、どのようなやり方があるでしょうか。 testというテーブルから指定したidのnameを取り出して並べたいだけなのですが、このような長々としたものしか思い浮かびませんでした。 <?php $n1 = 1; $n2 = 2; $n3 = 3; $rs1 = mysql_query("select * from test where id = '$n1';",$conn); $rec1 = mysql_fetch_array($rs1, MYSQL_ASSOC); echo $rec1['name']; echo <br>; $rs2 = mysql_query("select * from test where id = '$n2';"); $rec2 = mysql_fetch_array($rs2, MYSQL_ASSOC); echo $rec2['name']; echo <br>; $rs3 = mysql_query("select * from test where id = '$n3';"); $rec3 = mysql_fetch_array($rs3, MYSQL_ASSOC); echo $rec3['name']; mysql_free_result($rs1); mysql_free_result($rs2); mysql_free_result($rs3); mysql_close($conn); ?>

    • ベストアンサー
    • PHP
  • AccessのSQLで、レコード数の取得方法を教えてください。

    すみませんが、教えてください。 AccessをADO+SQLで操作しています。 cnn.Open **** sql="SELECT hoge FROM tabeleHoge;" set rec=cnn.Execute(sql) で、recオブジェクトから、レコード数を取得する方法ってあるのでしょか? sql="SELECT COUNT(*) FROM tableHoge;" を使わずに、できれば、嬉しいのですが。 以上、よろしくお願いいたします。

  • MySQL桁指定で値取り出しの簡略化

    現在桁指定での値取り出しはこうやっています。 mysqlテーブルのhogeの中にある1~3桁の値を取り出す。 SELECT hoge FROM mysql WHERE hoge LIKE '_' OR hoge LIKE '__' OR hoge LIKE '___'; これを1~8桁なんてことにすると*8も書くことになります。 何か省略の方法ありましたら御教授下さい。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • MySQLデータ検索クエリについて

    SELECT @num := "abcdef"; を実行すると +--------+ | @num | +--------+ | abcdef | +--------+ 結果はこうなります。 次に現在悩んでいる事なのですが、 SELECT @num := "abcdef" FROM @num WHERE @num LIKE '%a%'; これを実行すると ERROR 1064 (42000) ~省略~ at line 2 と、なります。 FROMの書式が悪いのかな?と色々と調べ (@num) ("@num") @num := "abcdef" 等々色々当て込めてみ、 SELECT @num := "abcdef" FROM (SELECT @num := "abcdef") WHERE @num LIKE '%a%'; ERROR 1248 (42000): Every derived table must have its own alias line2の書式はクリア?したのですがここから一歩も前に進まない状態です。 特に何に使うという訳ではなく実験的な試みです。 MySQLの仕様だったらそれはそれでスッキリするので投稿させて頂きました。 もしよろしければ回答いただけると幸いです。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • データベース接続エラー

    質問させて頂きます。 環境はWin98SE ACTIVEPERLです。 mysql4.0です。 次のコードなんですか、 DB接続の部分とSQL実行の部分のエラー処理を消すと正常に動作します。 Perlの場合、どのようにエラー処理を記入したらいいのでしょうか? [コード] #!c:\perl\bin\perl.exe # DBI利用宣言 use DBI; print "Content-type: text/html\n\n"; print "<html><body>\n"; # MySQLに接続 $db=DBI->connect('DBI:mysql:test:localhost','',''); if(!$db){  print "MySQL接続エラー\n";  exit; } # ステートメントハンドルの作成:SQL文の指定 $sth = $db->prepare("select * from test_t"); # SQL実行 if(!$sth->execute()){  print "SQL実行エラー\n";  exit; } # 検索結果を表示 while (@rec = $sth->fetchrow_array()) {  print "id=" . $rec[0] . "\n";  print "name=" . $rec[1] . "\n";  print "<BR>\n"; } # ステートメントハンドルクリア $sth->finish();

    • ベストアンサー
    • Perl
  • データ内の「\」や「'」を抽出するには

    データ内に「\」や「'」が含まれているデータを抽出するには SELECT * FROM table WHERE column LIKE '%\%' SELECT * FROM table WHERE column LIKE '%'%' で良いのでしょうか?

    • ベストアンサー
    • MySQL
  • データベースのワイルドカードは%ではないの?

    アクセスのテーブルに あ い う があり、 SQL文で *********************************************** SELECT テーブル1.フィールド FROM テーブル1 WHERE (((テーブル1.フィールド) Like "%あ%")); *********************************************** としてもエラーにならないけど、「あ」が抽出されません。 *********************************************** SELECT テーブル1.フィールド FROM テーブル1 WHERE (((テーブル1.フィールド) Like "*あ*")); *********************************************** にすると、「あ」が抽出されます。 アクセスなどのデータベースのワイルドカードは%だと思っていたのですが違うのですか?

  • phpとmysqlでデータの一覧表示をしたいと思っています。

    phpとmysqlでデータの一覧表示をしたいと思っています。 ずらーっと並べるだけでなく、1ページに100件した場合には 10行毎に<hr>や<br>などのタグを挿入して間隔を空けたいのですが どのようにしたらいいのか悩んでいます。 現在は下記のようにLIMITで何度もqueryを発行しています。 できれば1回のqueryで処理したいのですが 他にどのような方法があるでしょうか。 $rs = mysql_query("select * from data order by id desc LIMIT 0,10 ;",$conn); while($rec = mysql_fetch_array($rs, MYSQL_ASSOC)){ $site = $rec['site']; $url = $rec['url']; echo '<a href="'.$url.'">'.$site.'</a>'; } $rs = mysql_query("select * from data order by id desc LIMIT 10,10 ;",$conn); while($rec = mysql_fetch_array($rs, MYSQL_ASSOC)){ $site = $rec['site']; $url = $rec['url']; echo '<a href="'.$url.'">'.$site.'</a>'; } $rs = mysql_query("select * from data order by id desc LIMIT 20,10 ;",$conn); while($rec = mysql_fetch_array($rs, MYSQL_ASSOC)){ $site = $rec['site']; $url = $rec['url']; echo '<a href="'.$url.'">'.$site.'</a>'; } よろしくお願い致します。

    • ベストアンサー
    • MySQL

専門家に質問してみよう