質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Q&A

解決済

1回答

1229閲覧

Ruby→SQLServer2016への接続[ODBC接続]

HisanoriSato

総合スコア67

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

0グッド

0クリップ

投稿2022/05/02 06:04

実現したいこと

RubyでSQLServerのDBよりODBC接続にて情報を取得・更新したい。

問題

しかし接続ができない状態にあり、改善したいです。
知恵を貸していただけないでしょうか。

試したこと

・接続先サーバ名をIPアドレス直接指定
・接続先サーバ名の大文字小文字統一
・接続先サーバ名のみ、ディレクトリ無しでの指定
・接続先サーバ名/DB/テーブルの指定
→全て同一のエラーを出力

環境

PC:Windows10
Server:Windows2012 Server 64bit
言語:ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x64-mingw-ucrt]
使用ライブラリ: dbi, dbd-odbc
ODBCドライバ:ODBC Driver 11 for SQL Server
※EXCELマクロでは同ODBCドライバにて読み書き可能

実行コード(一部代替テキスト)

ruby

1require 'rubygems' 2require "dbi" 3require 'dbd/ODBC' 4dbh = DBI.connect("DBI:ODBC:Driver={ODBC Driver 11 for SQL Server};Server=(servername\directory);DATABASE=dbname", "username", "password") 5sth = dbh.prepare("SELECT 'Hello, DBI World' AS Message") 6sth.execute() 7while row = sth.fetch do 8 print "Message", "n"; 9 print "-------------------n"; 10 print row[0] 11end 12sth.finish 13dbh.disconnect

実行結果(エラーコード)

cmd

1PS D:\SQLtest> ruby odbc.rb 2C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/dbd-odbc-0.2.5/lib/dbd/odbc/driver.rb:36:in `rescue in connect': 08001 (53) [Microsoft][ODBC Driver 11 for SQL Server]Named Pipes Provider: Could not open a connection to SQL Server [53]. (DBI::DatabaseError) 3 from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/dbd-odbc-0.2.5/lib/dbd/odbc/driver.rb:15:in `connect' 4 from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/dbi-0.4.5/lib/dbi/handles/driver.rb:33:in `connect' 5 from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/dbi-0.4.5/lib/dbi.rb:148:in `connect' 6 from odbc.rb:11:in `<main>' 7C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/dbd-odbc-0.2.5/lib/dbd/odbc/driver.rb:28:in `drvconnect': 08001 (53) [Microsoft][ODBC Driver 11 for SQL Server]Named Pipes Provider: Could not open a connection to SQL Server [53]. (ODBC::Error) 8 from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/dbd-odbc-0.2.5/lib/dbd/odbc/driver.rb:28:in `connect' 9 from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/dbi-0.4.5/lib/dbi/handles/driver.rb:33:in `connect' 10 from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/dbi-0.4.5/lib/dbi.rb:148:in `connect' 11 from odbc.rb:11:in `<main>'

マイクロソフトでのエラーコード[53]記述

provider: Named Pipes Provider, error: 40 - SQL Serverへの接続Microsoft SQL Server開けMicrosoft SQL Serverエラー: 53)ネットワークに関連するエラーまたはインスタンス固有のエラーが発生し、ネットワークへの接続を確立SQL Server。 サーバーが見つからないか、アクセスできません。 インスタンス名が正しく、リモート接続を許可SQL Server構成されていることを確認します。

仮説

サーバー再度で別途設定が必要なのかもしれない。
(EXCELマクロからは接続可能であるが、別の設定が存在するかも・・・)

参考

rubyでのODBC接続(TinyTDSを使用しない)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

ODBC接続の記述の問題でした

下記にDBの呼出方式を変更したところ、ODBC接続が実現しました。

Ruby

1#ODBC 2#参考URL 3#http://katate.blog80.fc2.com/blog-entry-2698.html 4#使用GEM:dbi 5 6#文字コード(指定しないと全角文字化け&文字数超過エラーを起こす) 7require "odbc_utf8" 8#ライブラリ呼出 9require "dbi" 10 11servername = 'servername\directory' 12username = 'username' 13password = 'password' 14 15dbh = DBI.connect("DBI:ODBC:Driver={ODBC Driver 11 for SQL Server};Server=#{servername};UID=#{username};PWD=#{password}") 16#接続確認テスト用 17# sth = dbh.prepare("SELECT 'Hello, DBI World' AS Message") 18#SQLの実行 19sth = dbh.prepare( 20 "SELECT TOP(10) 21 EMP_CODE, 22 EMP_ENG_NAME, 23 EMP_LAST_NAME, 24 EMP_FIRST_NAME, 25 EMP_SHORT_NAME 26 FROM DBNAME 27 ORDER BY EMP_CODE" 28) 29sth.execute() 30n=1 31# while row = sth.fetch do 32sth.each do |colum| 33 p "社員コード--------(#{n})"; 34 p colum[0]#emp_code(社員コード) 35 # p row[1]#emp_eng_name 36 # p row[2]#emp_last_name 37 # p row[3]#emp_first_name 38 p colum[4]#emp_short_name(社員名) 39 n+=1 40end 41 42#終了処理 43sth.finish 44dbh.disconnect 45

投稿2022/05/02 08:05

HisanoriSato

総合スコア67

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問