Таблица ссылок vba ado excel-2010 со вставкой sql

У меня есть код для вставки из одной книги Excel во внешнюю книгу. Когда я вставляю строку, она работает, но таблица, в которой находятся данные, не увеличивается. Есть ли какой-либо другой способ, кроме открытия книги, для увеличения строки, когда я вставляю новую строку из моего кода VBA из внешней книги ????

 Public Function insertComment()
   Dim tablename As String
   tablename = "sheet1"


   Dim cmd As ADODB.Command
   Dim conn As ADODB.connection
   Dim prm1 As ADODB.Parameter
   Dim prm2 As ADODB.Parameter
   Dim prm3 As ADODB.Parameter
   Dim connectionString As String
   Dim SQL As String

   Set conn = New ADODB.connection
   Set cmd = New ADODB.Command

   DBPath = "path\to\file\workbook1.xlsm"
   connectionString = "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & DBPath & ";HDR=Yes';"
  SQL = "INSERT INTO [" & tablename & "$] ([QuestionID], [EvidenceID], [Data]) VALUES (?, ?, ?)"

    'Open connection
    conn.Open connectionString

   'Set command text
   cmd.CommandText = SQL
   cmd.CommandType = adCmdText

   'Set connection
   cmd.ActiveConnection = conn

   'Set paramters in SQL query
    Set prm1 = cmd.CreateParameter("@p1", adInteger, adParamInput)
    cmd.Parameters.Append prm1
    cmd.Parameters("@p1").Value = 1

   Set prm2 = cmd.CreateParameter("@p2", adInteger, adParamInput)
   cmd.Parameters.Append prm2
   cmd.Parameters("@p2").Value = 2

   Set prm3 = cmd.CreateParameter("@p3", adInteger, adParamInput)
   cmd.Parameters.Append prm3
   cmd.Parameters("@p3").Value = 3


   cmd.Execute
   conn.Close
End Function

вы хотите поставить вопросительные знаки в таблице?

Ibo 10.08.2018 18:29

Нет, я должен поставить? помечает, потому что драйвер, который я использую, не распознает имена переменных.

User 10.08.2018 19:07
? в VBA - это подстановочный знак, и вы не можете использовать его напрямую в операторе SQL. Чего именно вы хотите достичь?
Ibo 10.08.2018 19:12

Если я использую в запросе переменные, он их не распознает. мне нужно использовать? отметка. Этот код работает нормально, но происходит то, что он добавляет новую строку на рабочий лист, а не расширяет таблицу внутри. Я хочу, чтобы в таблицу на листе была добавлена ​​новая строка, чтобы я мог получить доступ к листу со сводными таблицами.

User 10.08.2018 19:28

использовать таблицы Excel, чтобы иметь свои структуры данных и выбрать таблицу в качестве исходных данных для сводной таблицы, это очень просто. Чтобы добавить новую строку в вашу таблицу, используйте tbl.listrows.add, где tbl - это таблица Excel, где вы можете определить ее следующим образом: dim tbl as listobject и set tbl=worksheets("Sheet1").listobjects(1) вместо 1 вы также можете использовать имя таблицы

Ibo 10.08.2018 20:23

Спасибо, но моя проблема в том, что я не хочу, чтобы книга открывалась. Поскольку я использую ADO, я хочу добавить данные во внешнюю книгу без использования WorkBook.Open.

User 10.08.2018 20:46

Вы не можете добавить sth в книгу, не открывая, однако вы можете открыть ее невидимо

Ibo 10.08.2018 20:47

Я имею в виду, что книга не открывается на компьютере пользователя, если две книги открыты в одном экземпляре Excel. Итак, ваша поговорка: откройте книгу невидимо, а затем закройте ее? Насколько хорошо это работает?

User 10.08.2018 20:48

Ваш код не охватывает всего того, что вы говорите. Вам нужно показать нам, какой фрагмент кода открывает книгу, и после того, как вы вставили данные, вам нужно сохранить книгу и закрыть ее. как часто пользователям нужно записывать данные в ББ? о скольких пользователях вы говорите?

Ibo 10.08.2018 21:01

Я не открываю книгу. Я создаю соединение и запускаю свой запрос, а затем закрываю соединение.

User 10.08.2018 21:11

Я не уверен, что вы можете вставлять данные в книгу, не открывая ее, независимо от того, какой метод вы используете. Кроме того, я не уверен, что ваш код работает нормально, и почему вам нужно использовать ADO для этого, вы хотите вставить некоторые данные в книгу, просто используйте VBA. ADO предназначен для применения SQL-запросов, которые здесь выглядят ненужными.

Ibo 10.08.2018 22:12

Я делаю инструмент ввода данных с книгой Excel, которая вставляет новую строку во внешнюю книгу. Я делаю это, потому что хочу позволить нескольким людям вставлять данные в одну и ту же внешнюю книгу. Использование ADO открывает соединение, затем я закрываю его, но, насколько мне известно, не открывает книгу как новый экземпляр или в моем проекте VBA. Использование Workbook.Open фактически показывает книгу, чего я пытаюсь избежать. Этот код работает, поскольку Excel совместим с ODBC. Однако я не могу ссылаться на таблицу или знаю, как запустить SQL на листе.

User 10.08.2018 22:22

почему вы не используете Access DB? excel - это не инструмент БД, и вы пытаетесь его усложнить. Также вы можете определить инструменты для экспорта данных из Access DB.

Ibo 10.08.2018 22:24

Я ограничен тем, что у меня есть, но да, я бы хотел базу данных.

User 10.08.2018 22:31

Я думаю, что вы правы, и мне нужно просто открыть книгу, скрыть ее, делать то, что я хочу, а затем закрыть книгу.

User 10.08.2018 22:37

Открытие и закрытие ББ займет не более 5 секунд, так что все должно быть в порядке, однако вы можете убедиться, открыт ли ББ уже или нет. Если он открыт, вы ждете 3 секунды, и вы можете сделать это в течение 3 попыток, и если это не сработало, вы возвращаете пользователя TRY AGAIN. Кроме того, ADO не обеспечивает параллелизм или блокировку записи, которая обеспечивается механизмом БД, который недоступен в Excel, если вы этого хотите, вам нужно использовать Access.

Ibo 10.08.2018 22:42
0
16
124
0

Другие вопросы по теме