2010-03-30 9 views
1

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

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

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

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

+1

Трудно помощь без канонического примера или подробностей о том, как посылается строка запроса или как она генерируется. Есть ли какой-нибудь код и электронная таблица pic, которую вы можете отправить? – gvkv

+0

Где ваши столы? как вы к ним подключаетесь? vba не имеет такого ограничения длины, когда речь идет о строковых переменных, но это может быть связано с тем, как вы общаетесь с базой данных. –

+0

Вы должны обновить свой вопрос (как и вы). Если ответа не было, и вы решили это, вы также можете создать свой собственный ответ и пометить его как принятое решение. –

ответ

0

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

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

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

+0

Мне нужно отфильтровать эти таблицы аудита и выбрать, чтобы сделать select * в Union Alls только из-за этой длины строки, но я объединяю около 10 таблиц и не контролирую, как эта база данных построена. – datatoo

0

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

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

0

После перезаписи запроса несколько способов, я получил длину строки для запроса, превышающего 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

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

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

Обратите внимание на пространство, предшествующее предложению FROM (в двойных кавычках). НТН.Eddie

Смежные вопросы