Доступ к базе данных SQL в Excel-VBA

Нет. Дополнительные методы требуют переменной экземпляра (значение) для объекта. Вы можете однако, писать статическую обертку вокруг эти ConfigurationManager интерфейс. При реализации обертки Вам не нужен дополнительный метод, так как можно просто добавить метод непосредственно.

 public static class ConfigurationManagerWrapper
 {
      public static ConfigurationSection GetSection( string name )
      {
         return ConfigurationManager.GetSection( name );
      }

      .....

      public static ConfigurationSection GetWidgetSection()
      {
          return GetSection( "widgets" );
      }
 }
26
задан lfrandom 7 May 2013 в 13:12
поделиться

5 ответов

Я добавил исходный каталог в строку подключения. Я также отказался от синтаксиса ADODB.Command в пользу простого создания собственного оператора SQL и открытия набора записей для этой переменной.

Надеюсь, это поможет.

Sub GetDataFromADO()
    'Declare variables'
        Set objMyConn = New ADODB.Connection
        Set objMyRecordset = New ADODB.Recordset
        Dim strSQL As String

    'Open Connection'
        objMyConn.ConnectionString = "Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=MyDatabase;User ID=abc;Password=abc;"
        objMyConn.Open

    'Set and Excecute SQL Command'
        strSQL = "select * from myTable"

    'Open Recordset'
        Set objMyRecordset.ActiveConnection = objMyConn
        objMyRecordset.Open strSQL            

    'Copy Data to Excel'
        ActiveSheet.Range("A1").CopyFromRecordset (objMyRecordset)

End Sub
25
ответ дан 28 November 2019 в 07:22
поделиться

Is that a proper connection string?
Where is the SQL Server instance located?

You will need to verify that you are able to conenct to SQL Server using the connection string, you specified above.

EDIT: Look at the State property of the recordset to see if it is Open?
Also, change the CursorLocation property to adUseClient before opening the recordset.

0
ответ дан 28 November 2019 в 07:22
поделиться

Предлагаемые изменения:

  • Не вызывать метод Execute объекта Command;
  • Установить свойство Source объекта Recordset как ваш объект Command;
  • Вызвать метод Open объекта Recordset с помощью без параметров;
  • Удалите круглые скобки вокруг объекта Recordset при вызове CopyFromRecordset ;
  • Фактически объявите свои переменные :)

Исправленный код:

Sub GetDataFromADO()

    'Declare variables'
        Dim objMyConn As ADODB.Connection
        Dim objMyCmd As ADODB.Command
        Dim objMyRecordset As ADODB.Recordset

        Set objMyConn = New ADODB.Connection
        Set objMyCmd = New ADODB.Command
        Set objMyRecordset = New ADODB.Recordset

    'Open Connection'
        objMyConn.ConnectionString = "Provider=SQLOLEDB;Data Source=localhost;User ID=abc;Password=abc;"    
        objMyConn.Open

    'Set and Excecute SQL Command'
        Set objMyCmd.ActiveConnection = objMyConn
        objMyCmd.CommandText = "select * from mytable"
        objMyCmd.CommandType = adCmdText

    'Open Recordset'
        Set objMyRecordset.Source = objMyCmd
        objMyRecordset.Open

    'Copy Data to Excel'
        ActiveSheet.Range("A1").CopyFromRecordset objMyRecordset

End Sub
16
ответ дан 28 November 2019 в 07:22
поделиться

Я сижу за компьютером без соответствующей части программного обеспечения, но с памяти этот код выглядит неправильно. Вы выполняете команду, но отбрасываете RecordSet , который возвращает objMyCommand.Execute .

Я бы сделал:

Set objMyRecordset = objMyCommand.Execute

... а затем потеряю «открытый набор записей» часть.

1
ответ дан 28 November 2019 в 07:22
поделиться

Добавьте set nocount on в начало сохраненной процедуры (если вы используете SQL Server). Я просто решил эту проблему в своей собственной работе, и это было вызвано промежуточными результатами, такими как «Затронуто 1203 строк» ​​, загруженное в Recordset , который я пытался использовать.

0
ответ дан 28 November 2019 в 07:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: