Microsoft Access Club Access超初心者対象Forum Access初級者対象Forum Access VBA Tips Forum DAO、ADO、SQL Forum

     

リストへもどる

投稿記事の一括表示

タイトルSQLサーバー上のデータの参照
記事No42849
投稿日: 2017/11/21(Tue) 16:36
投稿者TKM
解決済: ON
OS:windows7
Access Version:2007

SQLサーバー上のテーブルを参照してExcelにフィールドをコピーするために以下のコードを作りました。

---------------------------------------------------------------------------
Public db As ADODB.Connection
Public Sub DbOpen()
 Dim openFl As Boolean
 Set db = Nothing
 openFl = False
 If db Is Nothing Then
  Set db = New ADODB.Connection
  openFl = True
  Else
  If db.State = adStateClosed Then
   openFl = True
  End If
 End If
 If openFl = True Then
  db.Open "Provider=SQLOLEDB;" & _
  "Data Source=ホスト名;" & _
  "Initial Catalog=データベース名;" & _
  "User Id=ユーザー名;" & _
  "Password=パスワード;"
 End If
 Call GetTestData
End Sub

Public Sub GetTestData()
 Dim rs As ADODB.Recordset
 Dim strSQL As String
 Application.ScreenUpdating = False
 Set rs = New ADODB.Recordset

 strSQL = "SELECT * FROM テーブル名"
 rs.Open strSQL, db ←ここでエラー

 Dim i As Integer: i = 1
 rs.MoveFirst
 Do Until rs.EOF
  ThisWorkbook.Sheets("Sheets2").Cells(i, 1) = rs!フィールド名
  ThisWorkbook.Sheets("Sheets2").Cells(i, 2) = rs!フィールド名2
  i = i + 1
  rs.MoveNext
 Loop
 rs.Close: Set rs = Nothing
 db.Close: Set db = Nothing
End Sub
--------------------------------------------------------------------------------

これを実行すると
「実行時エラー '3001':
引数が間違った型、許容範囲外、または、競合しています」
とエラーが出てきます。
引数のSQL文はとても単純なものですし、Connectionオブジェクトのdbも接続できています。
一体なにが原因なのでしょうか?

タイトルRe: SQLサーバー上のデータの参照
記事No42852
投稿日: 2017/11/22(Wed) 08:20
投稿者TKM
解決済: ON
すみません、自己解決しました。
Callで呼び出したのが原因でした。

> OS:windows7
> Access Version:2007
>
> SQLサーバー上のテーブルを参照してExcelにフィールドをコピーするために以下のコードを作りました。
>
> ---------------------------------------------------------------------------
> Public db As ADODB.Connection
> Public Sub DbOpen()
>  Dim openFl As Boolean
>  Set db = Nothing
>  openFl = False
>  If db Is Nothing Then
>   Set db = New ADODB.Connection
>   openFl = True
>   Else
>   If db.State = adStateClosed Then
>    openFl = True
>   End If
>  End If
>  If openFl = True Then
>   db.Open "Provider=SQLOLEDB;" & _
>   "Data Source=ホスト名;" & _
>   "Initial Catalog=データベース名;" & _
>   "User Id=ユーザー名;" & _
>   "Password=パスワード;"
>  End If
>  Call GetTestData
> End Sub
>
> Public Sub GetTestData()
>  Dim rs As ADODB.Recordset
>  Dim strSQL As String
>  Application.ScreenUpdating = False
>  Set rs = New ADODB.Recordset
>
>  strSQL = "SELECT * FROM テーブル名"
>  rs.Open strSQL, db ←ここでエラー
>
>  Dim i As Integer: i = 1
>  rs.MoveFirst
>  Do Until rs.EOF
>   ThisWorkbook.Sheets("Sheets2").Cells(i, 1) = rs!フィールド名
>   ThisWorkbook.Sheets("Sheets2").Cells(i, 2) = rs!フィールド名2
>   i = i + 1
>   rs.MoveNext
>  Loop
>  rs.Close: Set rs = Nothing
>  db.Close: Set db = Nothing
> End Sub
> --------------------------------------------------------------------------------
>
> これを実行すると
> 「実行時エラー '3001':
> 引数が間違った型、許容範囲外、または、競合しています」
> とエラーが出てきます。
> 引数のSQL文はとても単純なものですし、Connectionオブジェクトのdbも接続できています。
> 一体なにが原因なのでしょうか?

- 以下のフォームから自分の投稿記事を修正・削除することができます -
処理 記事No パスワード

ページの先頭へ 前ページへ戻る