• ベストアンサー

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