• ベストアンサー

VB6+SQLServer2005 DBの新規作成

VB6+ADOを使用してSQLサーバーの新規データベースファイルを 作成しようと思っております。下記のようなプログラムを つくりましたがうまく動きません。お知恵を貸してください。 catDB.Createのところで 「インターフェイスがサポートされていません」 とエラーが出ます。 いままでAccess2000で動かしていたものをSQL2005に移設している ところです。 SQLサーバーは、はじめて触ります '--------------------------------------------- 'Const ADO_VERSION ="Microsoft.Jet.OLEDB.4.0;" Const ADO_VERSION ="SQLOLEDB;" '--------------------------------------------- Set catDB = New ADOX.Catalog catDB.Create "Provider=" ADO_VERSION & _ "Data Source=" & "d:\test"

質問者が選んだベストアンサー

  • ベストアンサー
noname#140971
noname#140971
回答No.3

VB6.0 + SQL Server 2000 でデータベースを作成してみました。 まあ、CnnExecute 関数さえ開発すれば VB で書くコードは1行です。 [イミディエイトウィンドウ] ? CnnExecute("CREATE DATABASE TESTSQL") True この結果をエンタープライズ・マネージャで確認すると、確かにTESTSQLが作成されています。 なお、CnnExecute関数で CreateTable文も実行できるでしょう。 その場合、ConnectionString は次のようだと思います。 INITIAL CATALOG が加わります。 まあ、ConnectionString も引数に加えれば良いでしょう。 Public Const conCNNSTRING = "Provider=SQLOLEDB.1;" & _               "DATA SOURCE=(local);" & _               "INITIAL CATALOG=TESTSQL;" & _               "User Id=sa;" & _               "Password=login007;" さて、以下にCnnExecute 関数は、今、10分程で書いたもので検証不十分です。 質問者で十分に検証して下さい。 【特定のユーザー名とパスワードを使用する場合】 【Windows NTの統合セキュリティを使用する場合】 なお、conCNNSTRING は、当然に2通りの書き方があり、ここでは前者を採用しています。 Option Explicit Public Const conCNNSTRING = "Provider=SQLOLEDB.1;" & _               "DATA SOURCE=(local);" & _               "User Id=sa;" & _               "Password=login007;" Public Sub ErrMessage(ByVal CnnErrors As ADODB.Error, ByVal strSQL As String)    MsgBox "ADOエラーが発生しましたので処理をキャンセルします。" & Chr$(13) & Chr$(13) & _       "・Err.Description=" & CnnErrors.Description & Chr$(13) & _       "・Err.Number=" & CnnErrors.Number & Chr$(13) & _       "・SQL State=" & CnnErrors.SQLState & Chr$(13) & _       "・SQL Text=" & strSQL, _       vbExclamation, " ADO関数エラーメッセージ" End Sub Public Function CnnExecute(ByVal strSQL As String) As Boolean 'On Error GoTo Err_CnnExecute    Dim isOK As Boolean    Dim cnn As ADODB.Connection       isOK = True    Set cnn = CreateObject("ADODB.Connection")    cnn.ConnectionString = conCNNSTRING    cnn.Open    With cnn      .Errors.Clear      .BeginTrans      .Execute strSQL      .CommitTrans    End With Exit_CnnExecute: On Error Resume Next    cnn.Close    Set cnn = Nothing    CnnExecute = isOK    Exit Function Err_CnnExecute:    isOK = False    If cnn.Errors.Count > 0 Then      ErrMessage cnn.Errors(0), strSQL      cnn.RollbackTrans    Else      MsgBox "プログラムエラーが発生しました。システム管理者に報告して下さい。(CnnExecute)", _         vbExclamation, " 関数エラーメッセージ"    End If    Resume Exit_CnnExecute End Function SQL Sever 2000 と 2005で差異があって通用しない時は、まあ、勘弁して下さい。

momoturbo
質問者

お礼

サンプルまで作成していただきありがとうございます。 一度コネクションをしてから、SQL文でDBを作成する方法に 変更するわけですね。

その他の回答 (4)

noname#140971
noname#140971
回答No.5

   cnn.ConnectionString = conCNNSTRING    cnn.Open    With cnn      .Errors.Clear は、    With cnn      .ConnectionString = conCNNSTRING      .Open      .Errors.Clear です。

noname#140971
noname#140971
回答No.4

'On Error GoTo Err_CnnExecute コピペした場合、このREMを外して下さい。 テストのためコメントアウトしたままでした。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

ADOXのカタログオブジェクトのCreateメソッドは SQLServarではサポートされていないようです 下記URL等を読んでみてください # ADO2.6辺りのちょっと古い情報ですけど ...

参考URL:
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpado260/htm/adobjcatalog.asp
momoturbo
質問者

お礼

サポートされないのですか・・ 情報ありがとうございます

回答No.1

http://support.microsoft.com/kb/198535 仕様(by Design)とか書いてあるがDB未経験で良く解らん。

momoturbo
質問者

補足

せっかく探していただきましたが、私もよくわかりません

関連するQ&A

  • SQL Server 2005 CLR VB2005 DBアクセス方法

    SQL Server 2005 CLR ですが VB2005でOleDbConnection.Openできないのですが、、、 VB2005のWinAppから呼び出すとちゃんとOPENするのですが、 SQL Server 2005 から呼び出すとOPENでこけます。 ソースは以下です ---- Imports System.Data.OleDb connStr = "Provider=SQLOLEDB.1;Password=xxxxxxx;Persist Security Info=True;User ID=sa;Initial Catalog=tbl_1;Data Source=SV01" m_conn = New OleDbConnection(connStr) m_conn.Open() ---- System.Data.OleDb が使えないのでしょうか? OS:WinXPSP2 VS2005Developer

  • ADOXでmdbファイルにオートナンバー型フィールド作成するとエラー

    ADOXを使ってmdbファイルを作るときに、オートナンバー型フィールドを作るステートメントを入れると 「Microsoft JET Database Engine (0x80040E21) 複数ステップの OLE DB の操作でエラーが発生しました。各 OLE DB の状態の値を確認してください。作業は終了しませんでした。」 というエラーになります。 試しにオートナンバーにしないと、正常にmdbファイルが作成されます。 対処法をご存知の方、是非とも教えてください。 以下がソースの一部です。 Set catDB = CreateObject("ADOX.Catalog") catDB.Create "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\hoge.mdb" Set tbl = CreateObject("ADOX.Table") With tbl .Name = "Contacts" Set .ParentCatalog = catDB With .Columns .Append "ContactId", adInteger ' ContactId フィールドをオートナンバー型に設定します。 .Item("ContactId").Properties("AutoIncrement") = True .Append "CustomerID" .Append "Phone" End With End With catDB.Tables.Append tbl←ここでエラーになります。 Set catDB = Nothing

  • ADO&mdbで、リンクテーブルの作り方

    お世話になっています。 行き詰って困っています。 あるmdb(Access2000形式)内のテーブルを別のmdb(同)から見られるようリンクテーブルを作りたいのですができません。 VB.NET 2005 でやっています。 いろいろ調べてMSDN等からサンプルを引っ張り、以下のように作っても、 Dim catDB As ADOX.Catalog = New ADOX.Catalog Dim tblLink As ADOX.Table = New ADOX.Table catDB.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Mdb_Link With tblLink .Name = "TEST_TBL" .ParentCatalog = catDB .Properties("Jet OLEDB:Create Link") = True <---ここと .Properties("Jet OLEDB:Link Provider String") = Mdb_Test <---ここと .Properties("Jet OLEDB:Remote Table Name") = "TEST_TBL" <---ここ End With catDB.Tables.Append(tblLink) catDB = Nothing .Propertiesの3行でエラー(プロパティ'Item'は'ReadOnly'です。)になってしまい、サンプル通りに行きません。 これについて何か心当たりありましたら教えてくださると嬉しいです。

  • VB6.0とaccessのDBを接続する

    初めまして。 件名のようなことを実行する際、 以下のソースを参考にしようと思ったのですが、 ******************************************* Dim cn As New ADODB.Connection Dim rc As New ADODB.Recordset ' 接続を確立する cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\My Documents\db1.mdb;" ' テーブル名を指定してレコードセットを作成する rs.Open "Table1", cn, adOpenKeyset, adLockOptimistic ************************************* > cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ > "Data Source=C:\My Documents\db1.mdb;" この部分の接続文字はどのようにしたら取得できるのでしょうか? SQLserverのときは、コンポーネントから Microsoft ADO Data Control 6.0(AP4)(OLEDB) を追加し、プロパティでOLE DBプロバイダを選択して接続文字を取得したのですが、accessに繋ぐのは初めてで、わかりません。 どなたか宜しくお願いいたします!!

  • VB2013でVB6でのDBは利用可能?

    VB4.0で作成してましたMicrosoft.Jet.OLEDB.4.0のDBをSQLSERVER2012で作成したDBに移行したいのですが VB2013では読み込めないのでしょうか? データーベースエクスプローラーでは中身の確認はできるのですが プログラムで走らせるとSqlDataAdapter(sql, cnStr)のところでエラー下記[エラー結果]とになります Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Dim cnStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\SERVER\DB名.mdb" Dim sql As String sql = "SELECT * FROM テーブル名" Dim dt1 As New DataTable Dim da1 As New SqlDataAdapter(sql, cnStr) Try da1.Fill(dt1) DataGridView1.DataSource = dt1 Catch ex As Exception End Try End Sub [エラー結果] 型 'System.ArgumentException' のハンドルされていない例外が System.Data.dll で発生しました 追加情報:キーワードはサポートされていません : 'provider' 以前のmdbファイルが読み込める方法はないのでしょうか?

  • VBScriptでAccessMDBにテーブルを作成時、値要求はいのフィールドが作成できない。

    Access97で使用しているデータベースに、 スクリプトでテーブルを作成する必要が出てきたので、 作成してみたのですが、プロパティで値要求を「はい」に設定しているにも関わらず、 設定する事が出来ませんでした。 設定の仕方が悪いのでしょうか? 下記にサンプルソースを上げました。 教えて頂けると助かります。 よろしくお願い致します。 -------------------------------------- Option Explicit 'データベースパス Dim strDBPath Dim strDBName strDBName = "db1.mdb" Dim strDBFullPath 'ファイルが存在する場所 strDBFullPath = Replace(WScript.ScriptFullName,WScript.ScriptName, "") 'FileSystemObject Dim objFS 'SQL文 Dim strSQL 'テーブル名 Const strTBL = "テスト" 'ADOX用定義 Const adBoolean = 11 'ブール値型 Const adColFixed = 1 '値要求 はい Const adColNullable = 2 '値要求 いいえ Dim objCat Dim objTbl Dim objCol 'ADOオブジェクトを作成します Set objCat = WScript.CreateObject("ADOX.Catalog") Set objTbl = WScript.CreateObject("ADOX.Table") Dim strJoin strJoin = "" strJoin = strJoin & "Provider=Microsoft.Jet.OLEDB.4.0;" strJoin = strJoin & "Data Source=" & strDBFullPath & strDBName & ";" strJoin = strJoin & "Jet OLEDB:Engine Type=5;" objCat.ActiveConnection = strJoin 'テーブル名を定義します objTbl.Name = strTBL objCat.Tables.Append objTbl '■列の設定 'フラグ Yes/No型 はい - Set objCol = WScript.CreateObject("ADOX.Column") With objCol ' フィールド名 .Name = "フラグ" ' データ型 .Type = adBoolean ' 値要求 はい .Attributes = adColFixed End With objCat.Tables(strTBL).Columns.Append objCol Set objCol = Nothing Set objTbl = Nothing Set objCat = Nothing

  • VB2005でDB接続後、DBを後からパスワードを付けた時のVB設定を教えて下さい。

    VB2005が超初心者ですがよろしくお願いいたします。 VB2005でACCESSのDBに接続後、後からパスワードをDBにつけた時のVB設定を教えて下さい。 -------------------------------- Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Accessファイルの絶対パス;Persist Security Info=False;Jet OLEDB:Database Password=パスワード 上記の事もやりましたが下記のエラーが出ます。 If (Me._connection Is Nothing) Then Me.InitConnection End If -------------------------------- 初心者の私ではこれ以上はいじれません。 簡単に設定出来ないでしょうか? よろしくお願いいたします。

  • MSDE インストールと外部からADO接続できないのです

    MSDEをインストールしました C:\SQL2KSP4\MSDE>setup SAPWD="a" INSTANCENAME="a" DISABLENETWORKPROTOCOLS=0 SECURITYMODE=SQL ADOから接続で Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=a;Data Source=192.168.0.10 としますが接続できず Data Source=マシン名\インスタンス名 とすれば接続できました Data Source=IPアドレス で接続できる方法無いでしょうか? MSDEのインストール方法が間違っているのでしょうか?

  • サーバOS、SQLserver及びVB6の質問です

    サーバ入替に伴い、以下のようなスペックの新サーバが納品されており、 現状、新サーバで検証作業中です。      <現 行>             →     <新> ・サーバOS:Windows server 2003(32bit) → Windows server 2008R2(64bit) ・CPU:Xeon X 5260 3.33GHz(2コア)   → Xeon E5-2403 1.80GHz(4コア) ・メモリ:4GB                 → 32GB ・データベース:SQL server 2005(32bit) → SQL server 2008R2(64bit) データベースは現行のコピーをアタッチしております。 このサーバにテキストファイルを使用して、データベースの特定のテーブルに 追加更新を行う、VB6.0(SP6)のプログラムがあり、テストを行っております。 プログラムは、現行のWindows server 2003(32bit) +SQL server 2005(32bit) 環境下で使用していたものをそのまま使用しております。 プログラムから、SQL serverへの接続は、ADO接続を使用し、接続文字列は、 "Provider=SQLOLEDB.1;User ID=[ ];Password=[ ];Initial Catalog=[ ];Data Source=[ ]" と記述しております。 ここで質問ですが、現行サーバと新サーバで、同じプログラム、同じテキストファイルを 用いてテストすると、不思議なことにスペックがいいはずの新サーバの方がプログラム 処理時間が倍~3倍程度かかります。 プログラム実行時のCPU使用率やメモリ使用率は、新しいサーバの方がかなり余裕が あるのですが、何故か処理が遅いです。 Windows server 2008R2、SQL server 2008R2、VB6、接続文字列等どこに原因があり そうでしょうか? (何か原因及び対応策らしきものを調べる術はありますでしょうか?) よろしくお願いいたします。

  • 他のPCのSQLサーバーに接続したい

    2台のPCはLANに繋がれていて、同じワークグループです。 PC1をサーバーとして PC2からPC1のSQLサーバーへ接続したいのですが どうすればいいのでしょうか? (エクセル→SQLサーバーです。) PC1は Dim cn As New ADODB.Connection cn.Open "Provider=SQLOLEDB;Data Source=○○○○\SQLEXPRESS; " & _ "Initial Catalog=" & サーバー名 & ";" & _ "Integrated Security=SSPI" rs.Open "Tテーブル", cn, adOpenStatic, adLockOptimistic と言うように接続しています。 PC2から同じようにコードを書いてみましたがやはりエラーになってしまいました。 多分、 「cn.Open "Provider=SQLOLEDB;Data Source=○○○○\SQLEXPRESS;」 の部分だと思うのですが どうすればPC2からPC1のSQLサーバーへ接続することができるのでしょうか? どちらも環境は OS:2000、オフィス:2003、 PC1のみSQLサーバー2005がインストールされています。 IPアドレスは固定です。 ご教授よろしくお願い致します。