Управление и отладка SQL-запросов в Доступе MS

Сервер разработки Flask по умолчанию имеет однопоточность. Он может обрабатывать только один запрос за раз. Блокирование запросов до получения ответа. Ваш код флэшки делает запрос в одном потоке, а затем ждет. Для обработки этого второго запроса нет других потоков. Таким образом, запрос никогда не завершается, и исходный запрос ожидает навсегда.

Включить несколько потоков или процессов на dev-сервере, чтобы избежать тупиковой ситуации и устранить непосредственную проблему.

app.run(threaded=True)
# or
app.run(processes=2)

Однако , сделать полный HTTP-запрос к приложению из приложения никогда не должен быть необходимым и указывает на более глубокую проблему дизайна. Например, обратите внимание, что внутренний запрос не будет иметь доступа к сеансу в браузере клиента. Извлеките общий код и вызовите его внутренне, вместо того, чтобы делать новый запрос.

16
задан Renaud Bompuis 7 January 2009 в 05:15
поделиться

7 ответов

Я предполагаю, что не пишу сложный SQL, потому что у меня нет проблемы с Доступом редактором SQL большую часть времени. Это вызвано тем, что по большей части я использую QBE, чтобы записать SQL и только опуститься в представление SQL, чтобы сделать вещи, которые QBE не поддерживает (такие как соединения non-equi, некоторые формы подзапросов, ОБЪЕДИНЕНИЯ, и т.д.). Нельзя сказать, что у меня нет SQL, который очень тверд работать с, но это главным образом, потому что он УЖАСНО ПЛОХО ЗАПИСАН, и это мой отказ, не отказ Доступа. У меня есть один неприятный, ужасный сохраненный QueryDef в приложении, это работало с 1997, который имеет SQL, это - 11 934 символа. И, да, это ужасно для поиска и устранения неисправностей. И почти любое редактирование, которое я делаю к нему, повреждает что-то. Но поэтому ПЛОХОЙ SQL IT.

, Почему любой хотел бы записать их SQL вручную как правило, я не могу сказать. Для чего-либо кроме самого тривиального SQL это кажется мне как больше проблемы, чем это стоит.

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

-5
ответ дан 29 September 2019 в 08:28
поделиться

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

Все еще главный ЛАВАШ.

14
ответ дан 30 November 2019 в 11:18
поделиться

Отладка является большим количеством проблемы. Если отдельный столбец выключен, это обычно довольно легко зафиксировать. Но я предполагаю, что у Вас есть более сложные задачи отладки, которые необходимо выполнить.

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

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

я перепроверяю свои определения столбца, чтобы удостовериться, что я получаю то, что я действительно хочу видеть, особенно если включенные формулы являются сложными. Если у Вас есть что-то сложное как скоординированный подзапрос в определении столбца

Затем, я проверяю, чтобы видеть, группирую ли я данные правильно, удостоверяясь, что" DISTINCT "и" UNION "без UNION ALL не удаляют необходимые дубликаты.

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

<час>

Одна вещь я мог рекомендовать, когда Вы пишете, что Ваши запросы - это: Никогда использование SELECT * в производственном коде. Выбор всех столбцов этим путем является кошмар обслуживания, и он приводит к большим проблемам, когда Ваши базовые схемы изменяются. Необходимо всегда выписывать каждый столбец, если Вы пишете код SQL, который Вы будете поддерживать в будущем. Я сохранил меня много времени и беспокойства только путем избавления от" SELECT * "в моих проектах.

оборотная сторона к этому - то, что те дополнительные столбцы не появятся автоматически в запросах, которые относятся к" SELECT *" запросы. Но необходимо знать, как запросы связаны друг с другом, так или иначе, и если Вам нужны дополнительные столбцы, можно возвратиться и добавить их.

<час>

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

4
ответ дан 30 November 2019 в 11:18
поделиться

Если бы Вы делаете действительно сложные запросы в Доступе MS, я рассмотрел бы хранение репозитория тех запросов где-нибудь за пределами самой базы данных Access..., например, в .sql файле, который можно затем отредактировать в редакторе как Intype, который обеспечит подсветку синтаксиса. Это потребует Вас к запросам на обновление в обоих местах, но можно закончить тем, что нашли удобным иметь "официальное" место для него, которое отформатировано и выделено правильно.

Или, если вообще возможный, переключатель к SQL Server 2005 Express Edition, который также свободен и предоставит Вам функции, которых Вы требуете через Studio управления SQL (также свободный).

3
ответ дан 30 November 2019 в 11:18
поделиться

Подобный рекурсивный, я использую внешнего редактора для записи моих запросов. Я использую Блокнот ++ с Легким расширением Проводника для поддержания нескольких сценариев за один раз и Notepad2 для одноразовых сценариев. (Я довольно неравнодушен к основанным на Scintilla редакторам.)

Другая опция состоит в том, чтобы использовать свободную SQL Server Management Studio Express, которая идет с SQL Server Express. (РЕДАКТИРОВАНИЕ: Извините, EdgarVerona, я не заметил, что Вы уже упомянули это!) я обычно использую его для записи SQL-запросов вместо того, чтобы использовать Доступ, потому что я обычно использую ODBC для соединения с бэкэндом SQL Server так или иначе. Остерегайтесь этого различия в синтаксисе T-SQL, используемого SQL Server и Струей, SQL, используемый Доступом MDB, является иногда существенным.

1
ответ дан 30 November 2019 в 11:18
поделиться

Вы говорите здесь о том, какой Доступ MS называет 'запросы' и вызов SQL 'представлениями' или о 'Запросах' передачи Доступа MS, которые являются SQL-запросами? Кто-то мог быть легко потерян! Моим решением является следующий

  1. свободная SQL Server Management Studio Express, где я разработаю и протестирую свои запросы
  2. таблица запроса на стороне клиента, с одним полем для имени запроса (id_Query) и другой (queryText, тип заметки) для самого запроса.

у меня затем есть небольшая функция getSQLQuery в моем коде VBA, который будет использоваться, когда я должен выполнить запрос (или возврат recordset или не):

Dim myQuery as string, _
    rsADO as ADODB.recorset

rsADO = new ADODB.recordset
myQuery = getSQLQuery(myId_Query)

'if my query retunrs a recordset'
set rsADO = myADOConnection.Execute myQuery
'or, if no recordset is to be returned'
myADOConnection.Execute myQuery

Для представлений, даже возможно сохранить их на стороне сервера и относиться к ним от стороны клиента

set rsADO = myADOConnection.execute "dbo.myViewName"
1
ответ дан 30 November 2019 в 11:18
поделиться

У меня есть несколько советов, относящихся к SQL в VBA.

Поместите свой код SQL в строковую переменную. Раньше я делал это:

DoCmd.RunSQL "SELECT ..."

С этим трудно справиться. Вместо этого сделайте следующее:

strSQL = "SELECT ..."
DoCmd.RunSQL strSQL

Часто вы не можете исправить запрос, если не видите, что именно выполняется. Для этого выгрузите свой SQL в окно немедленного выполнения непосредственно перед выполнением:

strSQL = "SELECT ..."
Debug.Print strSQL
Stop
DoCmd.RunSQL strSQL

Вставьте результат в стандартный построитель запросов Access (вы должны использовать представление SQL ). Теперь вы можете протестировать окончательную версию, включая переменные, обрабатываемые кодом.

Когда вы готовите длинный запрос в виде строки, разбейте свой код на части:

strSQL = "SELECT wazzle FROM bamsploot" _
      & vbCrLf & "WHERE plumsnooker = 0"

Я впервые научился использовать vbCrLf , когда я хотел придумать длинные сообщения для пользователя. Позже я обнаружил, что он делает SQL более читабельным при кодировании и улучшает вывод Debug.Print . (Другое небольшое преимущество: в конце каждой строки нет места. Синтаксис новой строки встроен в это.

(ПРИМЕЧАНИЕ: вы можете подумать, что это позволит вам добавлять комментарии справа от строк SQL. Будьте готовы к разочарованию.)

Как сказано в другом месте здесь, переход к тексту редактор экономят время. Некоторые текстовые редакторы обеспечивают лучшую подсветку синтаксиса, чем официальный редактор VBA. (Черт возьми, StackOverflow лучше.) Он также эффективен для удаления мусора Access, такого как лишние ссылки на таблицы и груды круглых скобок в предложении WHERE.

Рабочий процесс для устранения серьезных неисправностей:

VBA Debug.Print >       (capture query during code operation)
  query builder   >     (testing lab to find issues)
     Notepad++      >   (text editor for clean-up and review)
  query builder   >     (checking, troubleshooting) 
VBA

Конечно, устранение неисправностей обычно сводится к снижению сложности запроса до тех пор, пока вы не сможете изолировать проблему (или, по крайней мере, заставить ее исчезнуть!). Затем вы можете создать из него шедевр, который вы хотели. Поскольку для решения липкой проблемы может потребоваться несколько циклов,

11
ответ дан 30 November 2019 в 11:18
поделиться
Другие вопросы по тегам:

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