- PR -

VB6からSQLServer2005への接続(DMO)

1
投稿者投稿内容
ベテラン
会議室デビュー日: 2006/11/10
投稿数: 64
投稿日時: 2007-12-26 12:54
お世話になっております。

現行VB6アプリからSQL6.5へOLEで接続していたのですが、今回DBをSQL2005にすることとなり
接続方法を変更しようとしています。

SQL2005はSMOというオブジェクトがOLEの後継に近いのかと思いましたが、
VB6の参照設定ではSMOのDLLが登録できないとのエラーが出てしまいました。

http://www.microsoft.com/japan/sql/prodinfo/overview/whats-new-in-sqlserver2005.mspx
上記URLで、DMOは使えるとの記述がありましたので、試してみましたが、
「このサーバーに接続するには、SQL Server Management Studio または SQL Server Management Objects (SMO) を使用してください。」
とエラーが出てしまいました。

http://www.microsoft.com/downloads/details.aspx?FamilyID=df0ba5aa-b4bd-4705-aa0a-b477ba72a9cb&DisplayLang=ja
の「Microsoft SQL Server 2005 下位互換コンポーネント」もサーバー、クライアントに
インストールし、かつDMOのDLLもregsvr32で登録してみましたが、
結局上記のエラーが出てしまい、手詰まりの状態です。

他に設定が必要なのでしょうか?
ご存知の方、よろしくお願いします。
OakBow
ベテラン
会議室デビュー日: 2007/09/15
投稿数: 51
投稿日時: 2007-12-26 23:18
>現行VB6アプリからSQL6.5へOLEで接続していたのですが

SMOとかDMOとか仰ってますが、「SQL 管理オブジェクト」と言われる通り、これってSQL Server Management StudioのようなDB管理機能を提供するものじゃないでしょうか。
普通にデータベースに接続してテーブルのデータを参照したりっていう一般的な接続には使用しないと思うのですが。。。

そういった一般利用での接続を行いたいのであれば、OLEDBでもODBCでも接続できますけれど。
ただしデフォルトのセキュリティ設定では接続できないと思いますが。

当方はSQL6.5を使用した経験はなく、SQL 管理オブジェクトも使ったことがないので的確なアドバイスは致しかねますが、SMOやDMOのことを勘違いしているような気がしたもので。OLEの後継ではないんじゃないかなあ。
ベテラン
会議室デビュー日: 2006/11/10
投稿数: 64
投稿日時: 2008-01-07 14:19
ひでぽんさん、
遅くなりすみません。回答ありがとうございます。

既存アプリの接続プログラムが、
「Set SQ_Srv = CreateObject("SQLOLE.SQLServer")」
といった形で接続しておりまして、ODBCにするとソースの修正が大きくなってしまう為
今のところ候補から外しています。

DBが2000の場合は、
「Set SQ_Srv = CreateObject("SQLDMO.SQLServer")」
で接続することが可能でしたので、DMOに変わるSMOを使用できればと考えました。
セキュリティ設定もTCP/IP、名前つきパイプも有効にしているのですが。。。

ちなみに6.5のとき同様、SQLOLEで接続しようとすると、
「[DB-Library] 接続できません。SQL Server が利用できないか、存在しません。
 一般的なネットワーク エラーです。マニュアルを調べてください。」
と出てしまいます・・・

他にやるべき事があれば、試してみたいのですが
ご存知の方、いらっしゃいませんでしょうか?



[ メッセージ編集済み 編集者: Q 編集日時 2008-01-07 14:26 ]
OakBow
ベテラン
会議室デビュー日: 2007/09/15
投稿数: 51
投稿日時: 2008-01-09 02:58
>「Set SQ_Srv = CreateObject("SQLOLE.SQLServer")」

ん〜?ADOも使ってないのかな?
そういうやり方はやったことがないので途端に自信がなくなってくるのですが、OLEDB自体は普通に使えるはずなので、接続文字列がおかしいか、SQLServer2005で厳しくなったデフォルトのセキュリティが原因じゃないでしょうか。
そのあたりはこの掲示板でもかなり質問が立っていますし、SQLServer2000のノリでやった人はたいていハマってますので(私も)。

ある程度はチェックされたようですが、デフォルトで無効になっているSQLServer認証で接続しようとしているとか。
ベテラン
会議室デビュー日: 2006/11/10
投稿数: 64
投稿日時: 2008-01-11 19:58
実のところ、私もこのように接続したことがないので、使い方を調べながらなのですが、、

接続文字列はこんな感じで2000までは接続できました。※2000ではSQLDMOです。
Set SQ_Srv = CreateObject("SQLOLE.SQLServer")
SQ_Srv.Connect ServerName:=サーバー名, Login:=ユーザーID, _
                         Password:=パスワード


接続文字含め、ポートのチェックやインスタンス再作成などもう少し試してみます。
OakBow
ベテラン
会議室デビュー日: 2007/09/15
投稿数: 51
投稿日時: 2008-01-12 19:30
SQL Server 2005では、SQLサーバ認証は既定で無効になってます。
設定を確認してみてください。
簡単に確認する方法としては、そのVBのプログラムが動作しているマシン上でManagement Studioを起動し、接続文字列で指定されているユーザーIDとパスワードでログインできるか確認します。
これで繋がるなら接続文字列がおかしいってことになると思います。
SQL Server側のログも確認してみましょう。

また、MSDNあたりに書いてあったと思いますが、DMOはそのうちサポートを打ち切る予定なので、代わりにSMOを使用するように、ってのがあったと思います。
DMOもまだ使えるけど既定で無効になってるとかじゃなかったかな?
調べたり動かしたりする環境は会社にしかなく、書き込みできるのは自宅だけなので軽くうろ覚えのお返事になってしまいますが。。

とにかくOLEはDMOやSMOとは別物で、後継とかそういうものじゃないと思います。
私はASPで接続に利用しています。
VB6はわからないので具体的な接続文字列などのアドバイスはできないのですが、
http://homepage1.nifty.com/rucio/main/database/db1.htm
この辺とか参考にならないでしょうか。
ベテラン
会議室デビュー日: 2006/11/10
投稿数: 64
投稿日時: 2008-01-15 19:58
ご回答ありがとうございます。

現在、2005サーバーを再構築中です。
で、ためしに2000のDMOでアプリを動作検証していますが
おっしゃるとおり、OLEとは別物のようで、SELECTの結果など、
形式が全然異なっていました。

DMOでもSMOでも、結局ソースの直しが大きくなりそうなので、
ADOでの接続も検討せざるをえないかな、と思い始めています。

クリーンインストール完了後、アドバイスを参考に試してみます。
1

スキルアップ/キャリアアップ(JOB@IT)