как получить вход в Jet OLE DB Query - PullRequest
0 голосов
/ 28 июля 2010

Справочная информация:

Я использую Excel 2003

У меня есть 2 файла Excel (Источник, список), один по сути является моими исходными данными.Во-вторых, я использую функцию Excel «Импорт внешних данных» для получения данных на втором листе.Затем я использую запрос модификации, чтобы позволить мне использовать SQL для запроса моих данных и ограничения отображаемых данных.

Мой запрос SQL:

SELECT * 
  FROM ['Master List$'] 
 WHERE [Name] Like "Brent%";

Мой вопросэто, я хотел бы иметь ячейку A1, чтобы быть входом в мой запрос.Таким образом, в A1 я хотел бы иметь «Brent» для замены первого WHERE условия.

Я надеюсь найти что-то такое, что я смогу изменить одну ячейку и смогу обновить данные длячто находится в ячейке A1.

У кого-нибудь есть идеи?

Спасибо.

Моя строка подключения такая:

Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;
Data Source=C:\My Data\Master List\Master List.xls;
Mode=Share Deny Write;Extended Properties="HDR=YES;";
Jet OLEDB:System database="";Jet OLEDB:Registry Path="";
Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;
Jet OLEDB:Global Partial Bulk Ops=2;
Jet OLEDB:Global Bulk Transactions=1;
Jet OLEDB:New Database Password="";
Jet OLEDB:Create System Database=False;
Jet OLEDB:Encrypt Database=False;
Jet OLEDB:Don't Copy Locale on Compact=False;
Jet OLEDB:Compact Without Replica Repair=False;
Jet OLEDB:SFP=False

1 Ответ

0 голосов
/ 29 июля 2010

Вы ошибочно пропустили ключевое слово FROM в своем запросе.

Поскольку вы запрашиваете книгу Excel, лучше всего убедиться, что она закрыта;если вы используете OLE DB, вы должны знать о страшной ошибке утечки памяти .Также следует помнить, как Excel определяет типы данных, что может стать немного странным, если NULL неожиданно появляется;подробности на Блог Дика .

Вы не указали рабочий лист, поэтому я предположил, что он называется Sheet1.

Большая часть вашей строки подключения выполненадо значений по умолчанию и могут быть удалены.

Поскольку это сайт программирования, и вы спрашиваете об Excel, как насчет VBA:

Sub ExcelExample()

  Const CONN_STRING As String = _
      "Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;" & _
      "Data Source=C:\My Data\Master List\Master List.xls;" & _
      "Mode=Share Deny Write;Extended Properties=""HDR=YES;"";" & _
      "Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";" & _
      "Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;" & _
      "Jet OLEDB:Global Partial Bulk Ops=2;" & _
      "Jet OLEDB:Global Bulk Transactions=1;" & _
      "Jet OLEDB:New Database Password="""";" & _
      "Jet OLEDB:Create System Database=False;" & _
      "Jet OLEDB:Encrypt Database=False;" & _
      "Jet OLEDB:Don't Copy Locale on Compact=False;" & _
      "Jet OLEDB:Compact Without Replica Repair=False;" & _
      "Jet OLEDB:SFP=False"""

  Const SQL_TEXT As String = _
      "SELECT * FROM ['Master List$'] WHERE [Name] Like ?;"

  Dim cmd
  Set cmd = CreateObject("ADODB.Command")

  With cmd
    .ActiveConnection = CONN_STRING
    .CommandText = SQL_TEXT

    Dim param
    Set param = CreateObject("ADODB.Parameter")

    With param
      .Direction = 1  ' adParamInput
      .Type = 202  ' adVarWChar
      .Size = 255
      .Attributes = 64  ' adParamNullable
      .Value = ThisWorkbook.Worksheets("Sheet1").Range("A1").Value & "%"
    End With

    .Parameters.Append param
  End With

  Dim rs
  Set rs = CreateObject("ADODB.Recordset")

  With rs

    Set .Source = cmd
    .Open

    ' Do stuff with recordset...

  End With

End Sub

ОБНОВЛЕНИЕ

Какие части строки подключения бесполезны?Большинство из этого!Например, пользователь по умолчанию - Admin, но файл рабочей группы Jet - пустая строка, поскольку Excel не использует безопасность Jet.Я думаю строка подключения может быть уменьшена следующим образом без изменения поведения:

  Const CONN_STRING As String = _
      "Provider=Microsoft.Jet.OLEDB.4.0;" & _
      "Data Source=C:\My Data\Master List\Master List.xls;" & _
      "Extended Properties=""HDR=YES;"";"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...