- ベストアンサー
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"
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
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で差異があって通用しない時は、まあ、勘弁して下さい。
その他の回答 (4)
cnn.ConnectionString = conCNNSTRING cnn.Open With cnn .Errors.Clear は、 With cnn .ConnectionString = conCNNSTRING .Open .Errors.Clear です。
'On Error GoTo Err_CnnExecute コピペした場合、このREMを外して下さい。 テストのためコメントアウトしたままでした。
- redfox63
- ベストアンサー率71% (1325/1856)
ADOXのカタログオブジェクトのCreateメソッドは SQLServarではサポートされていないようです 下記URL等を読んでみてください # ADO2.6辺りのちょっと古い情報ですけど ...
- 参考URL:
- http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpado260/htm/adobjcatalog.asp
お礼
サポートされないのですか・・ 情報ありがとうございます
- himajin100000
- ベストアンサー率54% (1660/3060)
http://support.microsoft.com/kb/198535 仕様(by Design)とか書いてあるがDB未経験で良く解らん。
補足
せっかく探していただきましたが、私もよくわかりません
お礼
サンプルまで作成していただきありがとうございます。 一度コネクションをしてから、SQL文でDBを作成する方法に 変更するわけですね。