Ограничение длины строки запроса в VBA? - PullRequest
1 голос
/ 30 марта 2010

Я пытаюсь объединить несколько таблиц аудита, а затем отфильтровать результаты в таблицу Excel. Параметр Union All и параметры делают запрос более 1200 символов. Кажется, строка обрезается при запуске этого. Какие рекомендации кто-нибудь может дать. Я не контролирую структуру базы данных и читаю только свободные таблицы foxpro.

Мне разрешено создание таблицы, но я могу записать в таблицу Excel подключение к источнику данных

Обновление в том, что я смог расширить строку запроса до 1800 символов и получить данные обратно. Итак, я пришел к выводу, что у меня были синтаксические ошибки, и упомянутое мной явное усечение было ошибкой в ​​моей разработке строки в сценарии.

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

Ответы [ 4 ]

0 голосов
/ 10 ноября 2016

Проверка на наличие синтаксических ошибок, я получал подобные ошибки, но это оказалось ошибкой синтаксиса, были пропущены некоторые пробелы, где я конкатенировал свою строку запроса (длиной более 2000 символов) Убедитесь, что у вас есть место до / после каждой строки конкатенации, например,

qryStr = "SELECT name, tel, email" & _ 
"  FROM MyTable;"

Обратите внимание на пробел перед предложением FROM (в двойных кавычках). НТН. Эдди

0 голосов
/ 30 марта 2010

Если это запрос на объединение, как подсказывает ваш вопрос, вы можете разбить его на каждый подзапрос и запускать их один за другим.

Я с трудом могу поверить, что ограничение на строку запроса будет таким маленьким. Где урезается ваш запрос? По VBA? от FoxPro? Можете ли вы скопировать / вставить сгенерированный запрос непосредственно в клиент базы данных и посмотреть, правильно ли он выполняется?

0 голосов
/ 31 марта 2010

После переписывания запроса несколькими способами я получил длину строки для запроса, превышающую 1800 символов. Я должен сделать вывод, что моей предыдущей ошибкой был синтаксис, хотя ошибка vba не давала много подсказок.

Строка запроса строится с использованием элементов управления на листе Excel и накапливается в SQLstr. Очевидное усечение было ошибкой в ​​моем сценарии создания строки. Как только это будет решено, тогда это:

With ActiveSheet.QueryTables.Add(Connection:=Array( _
    "ODBC;DSN=myDB;Description=myDB;DATABASE=myDB;Trusted_Connection=YES"), Destination:=Range("A2"))
    .CommandText = SQLstr
    .Name = "Query from myDB"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = False
    .RefreshOnFileOpen = False
    .BackgroundQuery = True
    .RefreshStyle = xlOverwriteCells 
    .SavePassword = True
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .PreserveColumnInfo = True
    .Refresh BackgroundQuery:=False
End With

Спасибо за помощь, потому что ответы, указывающие на маловероятность ограничения длины строки, заставили меня взглянуть на синтаксис. Мне все еще интересно, есть ли ограничения размера строки запроса, если кто-нибудь знает.

0 голосов
/ 30 марта 2010

Разве вы не можете создать набор записей с надмножеством нужных данных, а затем выполнить второй запрос, чтобы выполнить окончательную фильтрацию?

В качестве альтернативы, и я никоим образом не знаком с FoxPro или вашими привилегиями базы данных, не могли бы вы создать хранимую процедуру в базе данных и затем просто передать ей параметры?

Изменить, чтобы добавить: я полагаю, вы уже даете своим таблицам короткие имена? (например, ...FROM Extremely_Long_Table_Name a WHERE...) Если нет, то это, вероятно, может сэкономить вам кучу символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...