人に聞けない痔の悩み、これでスッキリ >>

はじめまして。

現在、Tivoli(MAXIMO)で使用しているDB2を自分のクライアント端末からDB2に接続し、VBで帳票を作ろうとしています。

しかし、DB2へ接続しようとすると、エラーとなります。
エラー内容は。
実行時エラー'2147217887(80040e21)
CLI0124E 引き数の値が無効です。SQLSTATE=HY009となります。
DB2のランタイムクライアントをインストールしているので、ODBCには問題がないと思います。

接続のところで、エラーとなるようです。

コーディングは以下のようにしております。
strSQL = "select * From TICKET"
' 接続 cn.Open "Provider=IBMDADB2;DSN=MAXIMO.TICKET;UserID=user名;Password=password;"
Set rs = cn.Execute(strSQL)

DB2のバージョンは9

以上、よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

>ODBCの設定、うまくいっていない可能性があるようです。


(自分で設定をしたものなら)ODBCを設定しなおす必要があるようです。
前回のIBMのページを参考にして作り直してみてください。
ここで接続できなければ、ODBC接続は使えません。
    • good
    • 0
この回答へのお礼

ご連絡が遅くなりまして、申し訳ございませんでした。

ODBC設定に問題があったようです。
DB2の構成アシスタントからホスト名の指定を、サーバ名からIPアドレスに変更したら、接続ができるようになりました。

いろいろ、お手数をおかけいたしまして、申し訳ございませんでした。

ありがとうございます。

お礼日時:2008/12/04 17:07

>ODBCには問題がないと思います。


ODBC の設定のところで、接続テストをするところがありますが、接続はできますか?
DB2のCLPとか、コントロールセンターからDBに接続することはできますか?
できないなら、DSNを作り直す必要があるかもしれません。
接続できるなら、接続データベース名の可能性が一番高いと思います。

http://publib.boulder.ibm.com/tividd/td/TRM/GC32 …

f.別名と説明を入力する。
コネクションで利用するのは、この別名だと思います。

この回答への補足

早々のご回答ありがとうございます。

ODBCの設定、うまくいっていない可能性があるようです。
システムDSNの「構成」ボタンから、CLI/ODBC設定でユーザIDとパスワードをDB2インストール時に設定した、ユーザIDとパスワードで「接続」ボタンを押下しても、「「SQL1027N」ノードディレクトリが見つかりません」のエラーメッセージが出力されます。
CLI/ODBC設定の「詳細設定」タブのCLIパラメータは、「DBALIAS」、値「TICKET」、ペンティング値「TICKET」となっています。

あとは、何処を調べたら宜しいのでょうか。
ご教示の程、お願いいたします。

補足日時:2008/10/30 15:25
    • good
    • 0

よくわからないけれど、


>DSN=MAXIMO.TICKET;
TICKET ってテーブル名じゃないの?
DSN=MAXIMO;
でいいような気がしますが、
というかDSN名はあっていますか?

参考URL:http://www.ibm.com/developerworks/jp/db2/library …

この回答への補足

早々のご回答ありがとうございます。

>DSN=MAXIMO;
DSN名なのですが、コンパネのODBCデータソースアドミニストレータの「ユーザーDNS」の名前で宜しいのでしょうか?。
「ファイルDSN」の「.dsn」の名前の事でしょうか?。

「ユーザーDNS」だと「DB2」の名前です。
「ファイルDNS」だと、「TICKET.dsn」で作っており、
どちら行っても、実行時エラーとなってしまいます。

SQL1027N ノード・ディレクトリーが見つかりません。

申し訳ございませんが、ご教示の程お願いいたします。

補足日時:2008/10/29 18:03
    • good
    • 1

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q日付の加算・減算ってできますか?

DB2でのSQLで日付の加算・減算が出来なくて困っています。
DateAddのような関数はないんだとは思いますが、同じような機能を実現させることは出来ないんでしょうか?
ご回答をお願いします。

Aベストアンサー

できますよ。
例えば次のような感じ。

$ db2 values current date

1
----------
2005-04-01

1 レコードが選択されました。


$ db2 values current date + 1 day

1
----------
2005-04-02

1 レコードが選択されました。


$ db2 values current date - 1 day

1
----------
2005-03-31

1 レコードが選択されました。

QDB2のデーターベースに、ADOで接続して、レコードを取得していますが

DB2のデーターベースに、ADOで接続して、レコードを取得していますが、同じ事をして、取得出来るときと、できないときがあります。
できない時は、objRec.EOF=true
になり、処理が終了してしまいます。
誰が、この原因の探り方や、ヒントなどわかる人がいたら、教えていただけませんでしょうか。

以下、ソースの引用
Set objCon = WScript.CreateObject("ADODB.Connection")
strCon="DSN=mans;UID=admin;PWD=pass"

objCon.Open strCon

Set objRec=CreateObject("ADODB.Recordset")
objRec.Open strSQL, objCon, adOpenStatic

If objRec.EOF Then
Wscript.Echo "no data!"
WScript.quit
End If

後の処理に進む

Aベストアンサー

scriptから実行したことがないので、エラー内容がよくわかりませんが、
一度目でできなくてその後できるようになるというのは、timeoutを食らっている可能性があると思います。
objCon.ConnectionTimeout
の値を倍くらいに設定してみたら何か変わりますか?
若しくは、VB(A)から同じコードを投げたら、別のエラーメッセージが帰ってきますか?

QDB2のSQL(日付)について

文字列で8桁の日付(例:20041208)を持っている項目の条件に本日日付以上という条件をつけたいのですが、
(例:where NEN >= 本日日付の文字列8桁 )
※NEN:20041208
SQLでシステム日付を文字列8桁にする方法はありますか?
ご教授お願いしますm(_ _)m

Aベストアンサー

(前にも回答したと思うのですが、入っていないようなので再度入力します)

大小の比較をしたいのでしたら、DATE型を文字列にしても駄目で、文字列をDATE型に変換する必要があります。
8文字で表された日付をDATE型に変換する関数はDB2には用意されていないので、自分で用意する必要があります。

CREATE FUNCTION STR2DATE (dateString VARCHAR(8))

RETURNS DATE

SPECIFIC STR2DATE

LANGUAGE SQL

DETERMINISTIC

CONTAINS SQL

BEGIN ATOMIC

DECLARE ret VARCHAR(10);



IF (LENGTH(dateString) != 8) THEN

RETURN DATE('1970-01-01');

END IF;



set ret = LEFT(dateString,4) || '-' || SUBSTR(dateString,5,2) || '-' || RIGHT(dateString,2);



RETURN ret;

END@

という感じでSTR2DATE関数を用意しておいて、
SELECT ... WHERE STR2DATE(NEN) >= CURRENT DATE
とやればうまくいくのではないでしょうか。

(前にも回答したと思うのですが、入っていないようなので再度入力します)

大小の比較をしたいのでしたら、DATE型を文字列にしても駄目で、文字列をDATE型に変換する必要があります。
8文字で表された日付をDATE型に変換する関数はDB2には用意されていないので、自分で用意する必要があります。

CREATE FUNCTION STR2DATE (dateString VARCHAR(8))

RETURNS DATE

SPECIFIC STR2DATE

LANGUAGE SQL

DETERMINISTIC

CONTAINS SQL

BEGIN ATOMIC

DECLARE ret VARCHAR(10);



IF (LENGTH(...続きを読む

Qdb2にて数値を3桁文字にて出力したい

db2にて数値を3桁文字にて出力したい

例えば
(1) 1→001
(2) 25→025
(3) 674→674

このようにSQL文にて可能でしょうか?

Aベストアンサー

cast()でなく、varchar()で変換するとか>ANo.3

Qマクロの修正

今月同好会のパソコンを買いかえましたら下記問題点が発生し解決出来ません。
解決方法をご指導いただきたくお願い申し上げます。

  旧PC  WindowsXP  Excel 2002  Access 2002
  新PC  Windows 7  Excel 2010  Access 2010

問題点
 1・旧PCから新PCに移行しましたら、下記メッセージが表示され 
    'DB接続の ADCN.Open strDbConst でストップしてしまい更新出来ません。
    メッセージ
実行時エラー 3706
プロバイダーが見つかりません。正しくインストールされていない可能性があります。
 *尚その他のエクセル・ワードのファイルは、そのまま使用出来ます。

会員名札.xls に記述してあるマクロのコピー
  ’アクセスの会員管理.mdbからエクスポート
Public ADCN 'コネクト変数
Public ADRS 'レコードセット変数
Public ADCM 'コマンド変数

  ’DB接続
     Sub SpConnect()
Dim wMdb As String
Dim wPass As String
Dim UserName As String
UserName = Environ("USERNAME")
wMdb = "C:\Documents and Settings\" & UserName & "\My Documents\GGG
         \筆王\会員管理.mdb" '← Accessのデータべース


  wPass = "" '← データベースのパスワード
     strDbConst = "Provider=MicroSoft.Jet.OLEDB.4.0;Data Source=" & wMdb & ";Jet  OLEDB:Database Password=" & wPass
     Set ADCN = CreateObject("ADODB.Connection")
     Set ADCM = CreateObject("ADODB.Command")
     Set ADRS = CreateObject("ADODB.Recordset")
     ADCN.Open strDbConst
     ADCM.CommandType = 4
     ADCN.CommandTimeout = 0
     Set ADCM.ActiveConnection = ADCN
    End Sub

  'DB切断
Sub SpDisconnect()
ADCN.Close
Set ADRS = Nothing
Set ADCM = Nothing
Set ADCN = Nothing
End Sub

今月同好会のパソコンを買いかえましたら下記問題点が発生し解決出来ません。
解決方法をご指導いただきたくお願い申し上げます。

  旧PC  WindowsXP  Excel 2002  Access 2002
  新PC  Windows 7  Excel 2010  Access 2010

問題点
 1・旧PCから新PCに移行しましたら、下記メッセージが表示され 
    'DB接続の ADCN.Open strDbConst でストップしてしまい更新出来ません。
    メッセージ
実行時エラー 3706
プロバイ...続きを読む

Aベストアンサー

私自身はADOは使っていないのですが・・・(汗)

原因は、JET4.0を指定していることではないでしょうか。
【参考】
http://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=C06B8369-60DD-4B64-A44B-84B371EDE16D
(ページ下方『注意事項』の「2. OLEDBを使用する~」の部分)

とりあえず、パスワードの指定方法がわからないので(汗)
当該MDBファイルのパスワードを一旦解除した上で、
プロバイダの指定を「MicroSoft.Jet.OLEDB.4.0」から
「Microsoft.ACE.OLEDB.12.0」に変更して、確認して
みてください。

なお、もしかしたらですが、Passwordの方は今までと同じ
(但しJETの後ろのスペースが2つだったので1つ削除)、
「JET OLEDB:Database Password」のままでいいのかも
しれません(汗)
http://social.msdn.microsoft.com/Forums/ja-JP/csharpexpressja/thread/bcf40c9e-97c2-486e-867d-98877d0054e1/

私自身はADOは使っていないのですが・・・(汗)

原因は、JET4.0を指定していることではないでしょうか。
【参考】
http://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=C06B8369-60DD-4B64-A44B-84B371EDE16D
(ページ下方『注意事項』の「2. OLEDBを使用する~」の部分)

とりあえず、パスワードの指定方法がわからないので(汗)
当該MDBファイルのパスワードを一旦解除した上で、
プロバイダの指定を「MicroSoft.Jet.OLEDB.4.0」から
「Microsoft.ACE.OLEDB.12.0」に変更して、確認して
みてください...続きを読む

Q.VBSだとADODBのプロバイダが見つからない件

こんばんは

.vbsファイルからデータベースを操作しようとして躓いています。
エクセルvbaでは動いているのに、.vbsに移植するとエラーが出てしまいます。
エラーの内容は「プロバイダーが見つかりません。正しくインストールされていない可能性があります。」です。

次のスクリプトです。

'ここから
Dim ADO_CONNECT
Dim MDBName
Dim dbCon
Dim strSQL

ADO_CONNECT = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
MDBName = WScript.Arguments(0) 'エクセルVBAの場合はハードコード
Set dbCon = CreateObject("ADODB.Connection")
dbCon.Open ADO_CONNECT & MDBName & ";"
strSQL = "命令文"
dbCon.Execute (strSQL)

'ここまで

プロバイダーの場所、バージョン、32/64ビット、あたりに問題がのかもしれませんが、調べてもよくわかりません。エクセルVBAでは動作するので、参照設定?の違いなのかもしれません。どのように解決したら良いでしょうか。

Win 7 Pro 64bit
MS Accessなし
Excel 2007 あり

こんばんは

.vbsファイルからデータベースを操作しようとして躓いています。
エクセルvbaでは動いているのに、.vbsに移植するとエラーが出てしまいます。
エラーの内容は「プロバイダーが見つかりません。正しくインストールされていない可能性があります。」です。

次のスクリプトです。

'ここから
Dim ADO_CONNECT
Dim MDBName
Dim dbCon
Dim strSQL

ADO_CONNECT = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
MDBName = WScript.Arguments(0) 'エクセルVBAの場合はハードコード
Set dbCon = CreateOb...続きを読む

Aベストアンサー

スクリプトを32bit版ファイラーから試すと問題ありませんでした。
が、Explorer (64bitで動作)から試すと同じエラーになりました。
Explorer 64bit で動作

Wscript も64bitが呼ばれる

ADODB の64bit版は存在しないのでエラー発生の流れかと思います。
(Win7 64bit & Office 2010 64bit でもほんの少しだけ確認)

なので、
http://d.hatena.ne.jp/KenKens/20140312/1394641831
の中ほどにあるように32bit版で起動しなおすようにすれば解決するものと思われます。

QDB2の SQLSTATE (エラーコード)について。

こんばんは。

IBMのデータベースDB2のエラーコードで、SQLSTATE~ と出てきますが、

何番がどういうエラーを表しているのかということを、知りたいのですが、どこに載っているのですか?

誰か知っている人がいたら教えてください。よろしくお願いします。

Aベストアンサー

マニュアルの「メッセージ解説書」第2巻、第3章にコードの詳細な説明が載っています。IBMのHPにも、マニュアルがPDFで公開されていますので、見てみてください。

参考URL:http://www-6.ibm.com/jp/software/data/developer/library/manual/db2online/

QDB2で SQL1032N start database managerエラー

はじめまして。初めて書き込みさせていただきます。
WebSphereでDB2をデータベースとして行っているのですけど、今日起動してDB2にconnectしようと思ったら

COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver] SQL1032N start database manager コマンドが発行されていません。 SQLSTATE=57019

というエラーメッセージが出てきてconnectできなくなってしまいました。どなたか改善方法知っている方いらっしゃいましたら教えてください。よろしくお願いします。

Aベストアンサー

こんにちは。業務でDB2を使用しているものです。(でもまだ素人)

表示されたエラーは、インスタンスが開始されていない、という内容です。DB2は、インスタンスという単位を作成し、その中にデータベースを作成しています。そのため、インスタンスが開始されていない場合、その中にあるデータベースにCONNECTすることができなくなります。インスタンスを開始すれば、無事にデータベースに接続できるはずです。

DB2サーバーのOSは何でしょうか?UNIXであれば、OSのコマンド・プロンプト上から、Windowsであれば、DB2のコマンド・プロンプト(コマンド・ウィンドウ)上から、db2startというコマンドを実行することで、DB2を開始することができます。

もし、それ以外のOSを使用されているようであれば、手元に資料がないのですが、調べることも可能だと思いますので、補足にてお教えください。また、これでも解決しない場合も、補足にてご連絡くだされば、もう少しお答えできるかもしれません。

Qバッチファイルから直接db2コマンドに引数を持たせて実行したい

バッチファイルより、得たデータを引数としてdb2コマンドに私、実行したいのですが、そのようなことはできるでしょうか。
(詳細)
バッチファイルで、日付&時間を変数に格納します。これを、db2のテーブルにインポートしたい。
稚拙な質問で申し訳ありません。

Aベストアンサー

例えばバッチファイルの中でsub.batを以下のように呼び出すと良いと思います。

db2cmd sub.bat 引数

するとsub.batの中ではdb2コマンドを使用することが出来ます。
また、sub.batでは引数を%1%等で受け取ることが出来ます。

QDB2でのシステム日付のinsert、updateについて。

質問です。
DB2で、システム日付のinsert、updateを行うSQLを作成したいのですが、どのようにしたら良いでしょうか?

また、参考になるようなサイトなどありましたら教えてください。

どなたか宜しくお願いします。

Aベストアンサー

そうですか・・・。
DB2V8 FP2 on WinXPProのCLPではうまくいっていますが・・・。

(成功例)

db2 connect to sample
db2 create table hoge(no integer,date date)
db2 insert into hoge values (1,current date)
db2 update hoge set date=current date where no=1

ちなみに

db2 update hoge set date=current date where no='1'

⇒SQL0401N(SQLSTATE=42818)エラー

db2 update hoge set date=integer(current date) where no=1

⇒SQL0408N(SQLSTATE=42821)エラー

でした。
no列はINTEGER型で間違いないんですよね?
以下はどういうエラーになりますか?

db2 update hoge set date=current date

そうですか・・・。
DB2V8 FP2 on WinXPProのCLPではうまくいっていますが・・・。

(成功例)

db2 connect to sample
db2 create table hoge(no integer,date date)
db2 insert into hoge values (1,current date)
db2 update hoge set date=current date where no=1

ちなみに

db2 update hoge set date=current date where no='1'

⇒SQL0401N(SQLSTATE=42818)エラー

db2 update hoge set date=integer(current date) where no=1

⇒SQL0408N(SQLSTATE=42821)エラー

でした。
no列はINTE...続きを読む


人気Q&Aランキング