過去の桐井戸端BBS (桐ver.9)
24554 外部データベース機能でACCESSに接続しようとするとエラーになる 長門孝雄 2004/02/03-10:36
いつもお世話になっております。
桐V8 sp7 windows200 access2000を使用しています。
桐の外部データベース接続でaccessに接続しようとしたのですが、
accessのテーブルには接続表示できるのですが、クエリーに接続して
項目をしていして結合表を表示しようとすると以下のエラーがでます。
 
KD1672:ODBC エラー

データソース固有エラー : -3010
SQLSTATE : 07001
[Microsoft][ODBC Miicrosoft Access Driver] パラメータが少なすぎます。
2 を指定してください。

K3にも問い合わせたのですが、accessのドライバーエラーとのことで、
解決には至りませんでした。
どなたか、どこに2を設定すればよいのか。対処法等ありましたら
よろしくお願いいたします。
                        長門孝雄
24555 Re:ACCESSに接続について 長門孝雄 2004/02/03-10:44
記事番号24554へのコメント
桐 V9 SP7の間違いです。
申し訳ありません。訂正いたします。
24557 Re:ACCESSに接続について hidetake 2004/02/03-11:15
記事番号24555へのコメント
>桐V8 sp7
>桐 V9 SP7

桐ver9 には sp1 までしかないので,桐ver9 sp1 なのかな? (^^)


さて,これはドライバの出すエラーですので,桐が対応しなければ
そう簡単にエラーを回避する方法は無いと思いますが,考えられる事を書いておきます。

この外部DB で定義されている内容は Access2000 のテーブルを
複数表示させ結合したものを,桐に取り込もうとされているのでは無いでしょうか?

外部DB 側の表を取り扱う場合に,桐は?テーブルの別名として 1 とか 2 とか別名(エリアス)を使って表現するようです。
(Access やSQL Server に対する接続の場合,PostgreSQL に対しては何故か別名を使わない)
その別名としての 2 の取り扱いが,どうもうまく行っておらずエラーが
発生しているような気がします。(推測に過ぎません)

桐ver8 があるならば kiri8.ini の [Query] セクションに SQLOutput=1
という行を追加して,接続を実行しようとすれば,桐が ODBC に渡す
SQL文を,.XVW と同じフォルダに書き出すので解析が可能です。
作成されるファイル名は外部DB の名前 + .SQL というファイル名です。
この中にある SQL文をご自分で解析して見るなり,ここにアップして見て下さい。
なお,桐ver9 では SQLOutput の機能は無くなりましたので,
エラーが発生した時などの解析は困難になります。ODBC のログを取って
膨大な中から該当箇所を探し出す必要があります。 (;_;)
だから,私は桐ver9 でエラーが発生したら,桐ver8 でわざわざ桐は
どんな処理をしているのか?なんて,いちいち見てみる事もあります。 (;_;)

以上が解析の1つ目です。



次に試してみるべき内容ですが,桐の外部DB の定義で実際に抽出する項目は
どのように設定されているでしょうか?

もし,上にあるテーブルから「すべて」という項目を下の欄にある
抽出項目に持ってきているのなら,「すべて」を使った抽出を行わず
必ず,実際の項目名を1つずつ下の欄にドラッグして設定してみて下さい。
もし全ての項目を指定する場合も,上の欄で全ての項目を選択した上で
下の設定箇所にドラッグし,項目名1つ1つが直にはいるように設定した上で,
結合表を開いてみて下さい。

その結果,どのようになるか?です。


# たゆーさんのところにも「桐の外部DB」に関してはいろいろあります! (;_;)


24558 Re:ACCESSに接続について hidetake 2004/02/03-11:18
記事番号24557へのコメント
>kiri8.ini の [Query] セクションに SQLOutput=1

なお,この機能は公な機能では無く,この設定を行った場合
どのような動作を桐が行うのかわかっていません。
従いまして,動作確認した後は設定を取り消し,オリジナルの状態に戻しておいて下さい。
(事故自己責任対象です)
24569 Re:ACCESSに接続について 長門孝雄 2004/02/04-05:46
記事番号24558へのコメント

>>kiri8.ini の [Query] セクションに SQLOutput=1
>
>なお,この機能は公な機能では無く,この設定を行った場合
>どのような動作を桐が行うのかわかっていません。
>従いまして,動作確認した後は設定を取り消し,オリジナル
>の状態に戻しておいて下さい。(事故自己責任対象です)

hidetakeさん早速のレスありがとうございます。
また、hidetakeさんにはdos桐のときより、いろいろご指導いただき
感謝いたしております。
いよいよ、ボケてきたのか確かに桐V9 SP1でした。
しかし、昨日2004に入れ替えてみました。
今回の件は、ACCESSで2つのテーブルをつないだクエリーで2と表示し、
会社にて3個つないだクエリーでは3と表示します。
要するに桐では表だけ接続することにします。
ACCESSでORACLEにリンク接続したときに速かったので、ちょつと欲をだしたのですが、
印刷がまったく桐におよばないので、桐にもってきて
印刷だけしようと思ってことが、はじまりなので別の方法を考えたい
と思っています。ありがとうございました。
                     長門孝雄

24571 Re:ACCESSに接続について hidetake 2004/02/04-09:10
記事番号24569へのコメント
>今回の件は、ACCESSで2つのテーブルをつないだクエリーで2と表示し、
>会社にて3個つないだクエリーでは3と表示します。
>要するに桐では表だけ接続することにします。

やはり複数のテーブルを結合した時のエラーのようですね!

これはおそらく,桐の作成するクエリ(SQL文)に何か不具合が
あって,実現不可能な SQL文になっているのだと思います。

もしこのままほっておくと,また次に同じような事をしよう
とされた方が(自分かも知れない?),あるいは本当に必要に
なった時,同じ現象で使えない状況が発生し,困る事になる
かも知れません。

もし可能なら,その Access の最小限のテーブル(構造)と
ダミーデータ,それに桐で設定した外部DB を管理工学研究所
様のサポートにおくって調べてもらった方が良いかと思います。
(その時にできれば ODBC の設定で表示される Access
ドライバのバージョンも添えて)

桐の外部DB は使っている人が少ないのか,まだまだいろいろな問題があるようです。
ですので,問題が発生した時はその時にサポートに細かく連絡して
直してもらっておいた方がよろしいかと思います。
24574 Re:ACCESSに接続について hidetake 2004/02/04-12:53
記事番号24571へのコメント
あとついでに書いておきますと,桐側で結合を行う方法で無く
Access 側で(あるいは Oralce側で) クエリ(ビュー)を作っておき,
桐からは,そのクエリなりビューを開くという方法でも
同じ結果は得られると思いますよ!

おそらくこの方法だとドライバエラーは回避できると思います。
24588 Re:ACCESSに接続について 長門孝雄 2004/02/05-06:14
記事番号24571へのコメント
>桐の外部DB は使っている人が少ないのか,まだまだいろいろ
>な問題があるようです。ですので,問題が発生した時はその
>時にサポートに細かく連絡して直してもらっておいた方が
>よろしいかと思います。

この件にかんしては、先に管理工学に電話で問い合わせたせて、
桐のエラーではないかとがんばったのですが、桐は単にSQLをなげ
かけているだけなのでACCESS側のドライバーのエラー表示だといわれ
問題にされませんでした。
私も桐のエラーだとまったく自信がなかったし、なにか釈然としないまま
ここに投稿した次第です。
私は桐とORACLEがメインなので、他の方法を考えようと思いました。
それで、昨日作成クエリーでテーブルを作り、それに桐で接続して
初期の目的は達成いたしました。
ACCESSでのクエリーの接続テーブルがすべてリンクなので、
こんどインポートしたテーブルでクエリーを作って試してみようと思います。
いろいろとありがとうございました。
                       長門孝雄
24591 Re:ACCESSに接続について hidetake 2004/02/05-08:46
記事番号24588へのコメント
>桐は単にSQLをなげかけているだけなのでACCESS側のドライバーの
>エラー表示だといわれ問題にされませんでした。

単にSQLをなげかけるだけですか・・・

確かに Accessドライバにバグがあって,そのバグによりSQLが通らない!
って事もあり得る事でしょうが,桐が吐き出すSQLに管理工学諸研究所様は,
それを調べる必要も無いほどの質?や間違った構文を吐き出す事等は無い!
という自身を持たれているのですかね?

どんなODBCドライバだって間違ったSQL文を投げかければ,
それはエラーになってしまうと思います。

昔はサポートも担当した人の名前が入っていたので,その名前を見て
傾向や対応状況がわかったものです。でも,メールでサポートを受け付ける時代になってから担当者の名前が
入らないようになり,だれがどのよう
に対応しているのかわからなくなってしまいました・・・

(続く)

24592 Re:ACCESSに接続について hidetake 2004/02/05-08:47
記事番号24591へのコメント
(続き)

さて,Access側に問題があったとした場合の確認ですが,使用している
Accessドライバや MDAC のバージョンは何ですか?
MDAC にはセキュリティホールもあり,対策したものやいろいろなバージョンがあります。

http://www.microsoft.com/japan/msdn/data/default.asp

Microsoft Jet 4.0 SP8 や MDAC 2.8 などが出ています。



次に桐側の吐き出すSQL文の問題の可能性ですが,先に書いたとおり
桐ver8で調べるのが手っ取り早いです。(細かいところでは桐9と異なる部分も
あるかも知れませんが傾向的には同じだと私は感じています)

今回のものとは直接は関係ありませんが桐はテーブル名などのオブジェクト名が,
相手のDBが大文字・小文字を区別するシステムでは,
どうもうまく機能しないようなSQL文を吐き出すようです。
テーブル名をあるところでは大文字に変換しSQL文として投げかけたり,
あるところでは小文字のまま投げかけたりするところがあるようです。
大文字・小文字を区別するシステムでは,それを明示的に指定する場合は
そのオブジェクト名を " " で括る必要があるのですが,ある部分では括ったり,
ある部分では括らなかったり,いいかげんな処理の部分があるようです。

例えば,ある1つのテーブルから全ての項目のデータを取ってくるSQL文で

Access に対しての場合は
---------------------------------------------------
SELECT 1.* FROM "hogehoge" AS 1 /* +UNDEFZERO */
**** ODBC SQL Statement ****
SELECT A1.* FROM `hogehoge` A1
---------------------------------------------------
と処理しています。

SQL Server に対しての場合は
---------------------------------------------------
SELECT 1.* FROM dbo."hogehoge" AS 1 /* +UNDEFZERO */
**** ODBC SQL Statement ****
SELECT A1.* FROM "dbo"."hogehoge" A1
---------------------------------------------------
と,別名を指定して処理しているのに対し,

PostgreSQL に対しては
---------------------------------------------------
SELECT 1.* FROM "hogehoge" AS 1 /* +UNDEFZERO */
**** ODBC SQL Statement ****
SELECT hogehoge.* FROM "hogehoge"
---------------------------------------------------
と,実際に投げかけられるSQL文で,取り出すべきフィールド名を指定する部分が別名ではなく,
指定された実テーブル名で処理されてしまいます。
そして,後ろの方の FROM では "hogehoge" と " " で括って小文字だと
明示的に指定した扱いになっていますが,前の SELECT では hogehoge.*と " " なしになっています。
もし,ここでDB側のテーブル名がデフォルトで大文字で処理するシステムだと
SELECT "HOGEHOGE".* FROM "hogehoge"
と指定されたのと一緒になり,HOGEHOGE なんていう大文字のテーブルなんて無いよ!
という事になります。だから,桐は本来吐き出すべきSQL文は
SELECT "hogehoge".* FROM "hogehoge"
と," " で括るなら括って処理すべき内容だと思います。あるいは,
他のと同じように別名を使うようにするとか?

私は外部DB で最近は PostgreSQL を使う事が多いのですが,上記以外でも
表の書き出しで「外部DB」書き出しを行うと,1発目の書き出しはできても
2度目の「追加」の書き出しはできない(エラーになる)とか! あるいは
「追加」では無く上書きされる!とか・・・
(これもテーブル名の大文字小文字の取り扱いの問題だと思われます)

あるいは,表の書き出しで「外部DB」書き出しで,表の状態によって外部DB
側に作成されるテーブルの状態が異なる!
これは,索引が作られる場合と作られない場合があり,書き出す時の表の状態で
「索引を使った並べ替え状態」だと,外部DB側に索引が作られません。

とか,まぁ〜いろいろ問題を抱えています。 (;_;)


24609 Re:ACCESSに接続について 長門孝雄 2004/02/06-06:59
記事番号24592へのコメント
>さて,Access側に問題があったとした場合の確認ですが,使用している
>Accessドライバや MDAC のバージョンは何ですか?
>MDAC にはセキュリティホールもあり,対策したものやいろいろなバージョ
>ンがあります。

恥ずかながらMDACがどんなものかわからないのですが、ODBCのドライバーの
バージョンは3.520.・・・・とか表示されています。
それにしてもSQLでの問い合わせは難しいですね。
"はじめてのSQL"という本を読んでいますが、ACCESSとORACLEでは違う部分が多いですね。
桐のV8のグラフ・結合表という本のSQLを使用した副問い合わせ P86をみているのですが、私には難しくて
だんだん桐の話題から離れていくようなので、この辺でいろいろとありがとうございました。       
                           長門孝雄

戻る