tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルファイルレイアウトを印刷したいのですが
記事No3970
投稿日: 2006/07/12(Wed) 11:21
投稿者松本
お世話になっております。

MSDEの任意のテーブルをエクセルでファイルレイアウトとして
印刷するツールを作成しようとしています。

しようと思っただけで、全く先に進みません。

VB.NETでSQLServerの全てのデータベース名を取得する方法が分からず
止まっています。

データベースの一覧を表示させ、そのデータベースを指定すると、
テーブル一覧を表示し、指定されたテーブルのファイルレイアウトを印刷したいのです。

SQLServerの全てのデータベース名を取得する方法がお分かりでしたら
お教え願えませんでしょうか?

また、今までアクセスをデータベースとして使っていたので、接続は

OleCn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source = " & Application.StartupPath & "\TEMP.mde;" &
amp; _
                   "Persist Security Info=False"
OleCn.Open()

OleCmd = New OleDb.OleDbCommand("SELECT * FROM Master_Tbl")
OleReader = OleCmd.ExecuteReader

このような感じで接続していました。

MSDEに接続する場合、ConnectionStringはどのように記述したら良いのでしょうか?

MSDEを使おうとインストールしただけで、その先、全く分からず、
申し訳ありません。

[ツリー表示へ]
タイトルRe: ファイルレイアウトを印刷したいのですが
記事No3971
投稿日: 2006/07/12(Wed) 12:09
投稿者松本
お世話になります。

投稿後も引き続き調べていたらなんとか
接続文字だけはわかりました。
        OleCn.ConnectionString = _
               "Provider=SQLOLEDB.1;" & _
               "Persist Security Info=False;" & _
               "User ID=sa;" & _
               "Password=0000;" & _
               "Initial Catalog=TEMP;" & _
               "Data Source=MATUMOTO01;" & _
               "Workstation ID=MATUMOTO01;"

ただ、ここでまた疑問なのですが、Data SourceやWorkStaion IDは
私のコンピュータ名になっています。

VB.NETでMSDEを同包して客先に配布した場合、客先のMSDEは
このData SourceやWorkStaion IDはどうなるのでしょうか?
客先のものになるのか、MATMOTO01になるのか?
客先のものになるなら動的にしなくてはいけませんので。

そもそも、MSDEを同包する場合でも別途、客先にMSDEのインストールの
必要があるのでしょうか?

登録したデータベースやテーブルはどこに保存されているのでしょうか?
MSDEのフォルダーを見ても見当たらないので・・

初歩的な質問ばかりで申し訳ありません。
自分でも引き続き調べます。

[ツリー表示へ]
タイトルRe: ファイルレイアウトを印刷したいのですが
記事No3972
投稿日: 2006/07/12(Wed) 13:30
投稿者魔界の仮面弁士
環境が書かれていなかったので、現行バージョン(2005) という前提で回答します。

> VB.NETでSQLServerの全てのデータベース名を取得する方法が分からず
> 止まっています。

'参照設定として、Microsoft.SqlServer.Smo.dll が必要です。
Imports Microsoft.SqlServer.Management.Smo
Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, _
                              ByVal e As System.EventArgs) Handles Button1.Click
        DataGridView1.DataSource = SmoApplication.EnumAvailableSqlServers()
    End Sub
End Class

[ツリー表示へ]
タイトルRe^2: ファイルレイアウトを印刷したいのですが
記事No3973
投稿日: 2006/07/12(Wed) 15:02
投稿者松本
有難うございます。

説明不足ですみません。
私の環境なのですが、VB.NET2003 MSDE2000です。

ご教授のとおり参照設定をしようとしたら、
Microsoft.SqlServer.Smo.dllが見当たりませんでした。
MSDE2000では方法が違うのでしょうか?

更に、自分でも調べているのですが、VB.NETにMSDEを同包して配布したら、
配布先のMSDEはやはり、MATUMOTO01ではなくなってしまうのでしょうか?

配布先でもMSDEを別途インストールが必要なのでしょうか?

再三の質問、申し訳ありません。

[ツリー表示へ]
タイトルRe^3: ファイルレイアウトを印刷したいのですが
記事No3975
投稿日: 2006/07/12(Wed) 17:00
投稿者魔界の仮面弁士
> Microsoft.SqlServer.Smo.dllが見当たりませんでした。
SQL Server 2005 の SDK に付属しています。規定のインストール先は、
C:\Program Files\Microsoft SQL Server\90\SDK\Assemblies\ です。


> MSDE2000では方法が違うのでしょうか?
MSDE2000 / SQLServer 2000 のインスタンスも列挙できます。

しかし、Microsoft.SqlServer.Smo.dll は、.NET Framework 2.0 を要求します。
http://msdn2.microsoft.com/ja-jp/library/ms210350.aspx
一方、Visual Studio.NET 2003 は、.NET Framework 1.1 ベースの開発環境なので、
今回は使えないということになりますね。


この場合は、SmoApplication.EnumAvailableSqlServers の代わりに、
SQL-DMO を使うことができるかと思います。VBScript でいえば、こんなコードです。

 For Each Svr In CreateObject("SQLDMO.Application").ListAvailableSQLServers()
  MsgBox Svr
 Next


> 私の環境なのですが、VB.NET2003 MSDE2000です。
同じ環境を持っていないので自信はありませんが…おそらく、
VB.NET 2003 + SQLDMO のイメージで書くと、こんな感じになるかと。
# VBScript + SQLDMO や VB2005 + SMO に比べると、聊か冗長的なのが難点。

'COM参照: C:\Program Files\Microsoft SQL Server\80\Tools\binn\SQLDMO.DLL
Imports System.Runtime.InteropServices
Public Module Module1
    Public Sub Main()
        Dim App As SQLDMO.ApplicationClass = Nothing
        Dim List As SQLDMO.NameList = Nothing
        Console.Write("使用可能な SQL Server を列挙します。")
        Try
            App = New SQLDMO.ApplicationClass()
            List = App.ListAvailableSQLServers()
            For I As Integer = 0 To List.Count - 1
                Dim Server As String = List.Item(CObj(I))
                Console.WriteLine(Server)
            Next
        Finally
            If Not IsNothing(List) AndAlso Marshal.IsComObject(List) Then
                Marshal.ReleaseComObject(List)
            End If
            If Not IsNothing(App) AndAlso Marshal.IsComObject(App) Then
                Marshal.ReleaseComObject(App)
            End If
        End Try
        Console.Write("Enter を押してください:")
        Console.ReadLine()
    End Sub
End Module


これらは、SQLServer インスタンスの列挙方法ですが、SMO / SQLDMO を使うことで、さらに
Database を列挙したり、さらに Database 内の Table を列挙したりすることもできます。


> 配布先のMSDEはやはり、MATUMOTO01ではなくなってしまうのでしょうか?
MSDE 2000/Rel.A は、通常は自分自身(ローカル PC 上) にインストールされるわけですから、
接続先は "(local)" もしくは "(local)\インスタンス" になるかと思います。

[ツリー表示へ]
タイトルRe^4: ファイルレイアウトを印刷したいのですが
記事No3976
投稿日: 2006/07/12(Wed) 18:21
投稿者松本
回答を拝見し驚きました。

こんなにご丁寧にお教えいただけるなんて・・・

感謝の極みです。疑問に思っている事が解決したばかりでなく、

誠実なお人柄の方に接する事ができた事をうれしく思っております。

本当に有難うございます。

[ツリー表示へ]
タイトルRe^5: ファイルレイアウトを印刷したいのですが
記事No3977
投稿日: 2006/07/12(Wed) 18:45
投稿者松本
ご教授をいただいたことを吟味し、今後の事も考えると
Frameworkを2.0にしてSQL Server2005Express, VB.net2003で開発しようと思います。

FrameWork2.0をダウンロードしようと思ったのですが、
x86 プラットフォームとか、プラットホーム別のダウンロードとなっていました。

そもそもプラットフォームということすらよく分からないのですが、
自分のPCがX86なのか何なのかがわかりません。

どうしたら、X86とかが分かるのでしょうか?

質問ばかりで申し訳ありません。

[ツリー表示へ]
タイトルRe^6: ファイルレイアウトを印刷したい
記事No3978
投稿日: 2006/07/12(Wed) 21:54
投稿者魔界の仮面弁士
> Frameworkを2.0にしてSQL Server2005Express, VB.net2003で開発しようと思います。

.NET 2.0 の開発を試してみたいのであれば、Visual Basic 2005 Express Edition を
ダウンロードされると良いでしょう。
http://www.microsoft.com/japan/msdn/vstudio/express/vbasic/


.NET 2.0 を採用するなら、VB.NET 2003 では開発できません。
Visual Basic/Visual Studio の開発環境は、

 VB.NET 2002 …… .NET Framework 1.0 専用
 VB.NET 2003 …… .NET Framework 1.1、.NET Compact Framework 1.0 専用
 VB     2005 …… .NET Framework 2.0、.NET Compact Framework 2.0 専用

のように限定されているためです。

# なお、これはあくまで開発時の話です。ランタイムには下位互換性がありますので、
# .NET Framework 2.0 上で .NET Framework 1.1 のアプリを実行させたりする事は可能です。
# http://www.microsoft.com/japan/msdn/net/deployment/netfxcompat.aspx


> x86 プラットフォームとか、プラットホーム別のダウンロードとなっていました。
> そもそもプラットフォームということすらよく分からないのですが、
『x86』『x64』『IA64』の 3 種類ですね。
どの種類の CPU 向けの Windows で動作させるかによって分類されています。


> 自分のPCがX86なのか何なのかがわかりません。
.NET Framework 1.x を動かしていたなら、『x86』でしょう。
Windows XP や Windows 2000 シリーズ、あるいは Windows Server 2003 などの
32bit 版 Windows を使っているのであれば、『x86』という事になります。
残り 2 種は、64bit 版環境で使うものなので、今回は無視してかまいません。

http://ja.wikipedia.org/wiki/Pentium#.E9.96.A2.E9.80.A3.E9.A0.85.E7.9B.AE
http://www.trycut.com/win64.htm

[ツリー表示へ]
タイトルRe^7: ファイルレイアウトを印刷したい
記事No3979
投稿日: 2006/07/12(Wed) 22:12
投稿者松本
魔界の仮面弁士様、重ね重ね有難うございます。

毎回、ご回答を拝見するたびに恐縮致します。

印刷し、私の大事なマニュアルとさせて頂きます。

本当に有難うございます。心から感謝致します。

[ツリー表示へ]
タイトルRe^8: ファイルレイアウトを印刷したい
記事No4018
投稿日: 2006/07/25(Tue) 23:10
投稿者松本
たびたび申し訳ありません。
Frameworkは1.1と2.0をインストールしました。
SQLサーバーは2000と2005をインストールし、確かにサービスが開始になっています。
その後、魔界の仮面弁士様のご教授の通りにVB.net2003とVB2005で試して見ました。
しかしながら、サーバーのインスタンス名等全く表示されず終了してしまいます。
10日以上、何故なのかどうしても分からず再度投稿してしまいました。

ご教授頂いたソースは

***VB.NET 2003 + SQLDMOの場合

'COM参照: C:\Program Files\Microsoft SQL Server\80\Tools\binn\SQLDMO.DLL
Imports System.Runtime.InteropServices
Public Module Module1
Public Sub Main()
Dim App As SQLDMO.ApplicationClass = Nothing
Dim List As SQLDMO.NameList = Nothing
Console.Write("使用可能な SQL Server を列挙します。")


Try
App = New SQLDMO.ApplicationClass()
List = App.ListAvailableSQLServers()
For I As Integer = 0 To List.Count - 1
Dim Server As String = List.Item(CObj(I))
Console.WriteLine(Server)
Next
Finally
If Not IsNothing(List) AndAlso Marshal.IsComObject(List) Then
Marshal.ReleaseComObject(List)
End If
If Not IsNothing(App) AndAlso Marshal.IsComObject(App) Then
Marshal.ReleaseComObject(App)
End If
End Try


Console.Write("Enter を押してください:")
Console.ReadLine()


End Sub


End Module



***VB2005 + SMOの場合

'参照設定として、Microsoft.SqlServer.Smo.dll を追加しました。
Imports Microsoft.SqlServer.Management.Smo

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles Button1.Click

DataGridView1.DataSource = SmoApplication.EnumAvailableSqlServers()

End Sub

End Class

[ツリー表示へ]
タイトルファイルレイアウト...
記事No4023
投稿日: 2006/07/26(Wed) 21:05
投稿者魔界の仮面弁士
> SQLサーバーは2000と2005をインストールし、確かにサービスが開始になっています。
> その後、魔界の仮面弁士様のご教授の通りにVB.net2003とVB2005で試して見ました。
> しかしながら、サーバーのインスタンス名等全く表示されず終了してしまいます。

う〜ん、なぜでしょうね。
データリンクダイアログや、SQL Server 2000 Enterprise Manager の接続画面などで、
ネットワーク上の SQL Server インスタンスが列挙されるかどうかを確認してみてください。



一応当方では、

DataGridView1.DataSource = Microsoft.SqlServer.Management.Smo.SmoApplication.EnumAvailableSqlServers()

DataGridView2.DataSource = System.Data.Sql.SqlDataSourceEnumerator.Instance.GetDataSources()

のいずれのコードでも、SQL Server のインスタンスを取得できています。

[ツリー表示へ]
タイトルRe:ファイルレイアウト..
記事No4036
投稿日: 2006/07/31(Mon) 11:42
投稿者松本
何度も回答有難うございます。

ご教授の通りに調べて見ます。
色々とご指導いただいたので、
あとは自力でなんとかやってみます。

本当に有難うございました。

[ツリー表示へ]