Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Отладка ISAPI-модулей в Delphi






Как Вы знаете, любую dll-ку в Delphi можно отладить, если в свойствах проекта прописать значение «Host Application». Указываем в свойстве exe-шник, который использует нашу dll, запускаем проект и спокойненько отлаживаем библиотеку. Чем тогда отличается ISAPI-модуль от обычной DLL? Ответ очевиден — ничем. Это точно такая же динамическая библиотека, экспортирующая методы и для её отладки нам просто необходимо найти нужный exe-файлик.

Немного покопавшись по Сети я нашел тот самый exe-файл:

C: \Windows\System32\inetsrv\w3wp.exe

w3wp.exe отвечает за запуск веб-приложения на IIS и обработку запросов от других приложений. Другими словами этот файл делает возможным работу нашего сайта, который мы создавали с вами для работы.

Свойства проекта, который мы будем отлаживать должны быть такими:

  • Host Application = C: \Windows\System32\inetsrv\w3wp.exe
  • Parameters = -debug

Если у вас ISS несколько сайтов и требуется отладить модуль, которой лежит на сайте, скажем с ID=10, тогда строка Parameters должна быть такой

  • Host Application = C: \Windows\System32\inetsrv\w3wp.exe
  • Parameters = -debug -s 10

Чтобы отладить ISAPI-dll выполняем следующие действия:

  1. Останавливаем полностью работу IIS
  2. Ставим где надо точки останова
  3. Запускаем проект dll и убеждаемся, что процесс w3wp.exe стартовал:

 

4. Запускаем клиента, что-нибудь делаем и убеждаемся, что отладка проходит отлично:

 

Если отладка вдруг не работает — убедитесь, что скомпилированная dll сохраняется в той директории из которой она стартует при работе сайте.

На сегодня все. Осталось выложить разработанные в рамках статьи проекты — их Вы всегда сможете скачать со страницы «Исходники«.

Данные таблиц Microsoft Excel достаточно часто используются для формирования небольших по объему, но достаточно информативных баз данных. И как бы не старались разработчики, программисты, менеджеры внедрить новый продвинутый программный продукт (даже бесплатный) в рабочий процесс, довольно часто всё остается на своих местах. Не знаю как Вам, уважаемые читатели, а мне за почти пять лет работы на предприятии приходилось очень часто иметь дело именно с такими микро-БД будь то табличный отчёт по работе отдела или данные мониторинга прилегающих к предприятию территорий, включающий в себя не только таблицы на тысячи строк, но и графики, диаграммы, расчёты и т.д. Я не могу сказать, что такой метод предоставления данных (в Excel) не верный, напротив, данные предоставленые в Microsoft Excel или альтернативном OpenOffice информативны и понятны, а если добавить в предоставление данных диаграммы, то такому отчёту вообще цены нет. Но, акк бы красиво не выглядели небольшие БД в Excel, а если предприятию нужна централизованная обработка и хранение данных, то одним Excel тут врядли обойдешься, особенно, если предприятие крупное. Буквально неделю назад наблюдал картину, как сотрудник отдела промышленной безопасности со смиренным видом ручками передавал данные с листа Excel в базу MySQL. Скопировал чиселку, открыл программку-клиент, вставил чиселку, нажал «Отправить» и так до посинения. Бред? По-моему, полнейший. Так и с ума сойти не долго. Но я слава Богу в том отделе не работаю и навязывать свою точку зрения на счёт такой работы не стал. Пусть себе копипастят на здоровье. Однако вопрос этот засел в голове на долго: каким образом можно автоматизировать передачу данных из Excel в базу данных MySQL? И ответ на этот вопрос нашелся.


Вообще вариантов взаимодейсвтия Excel и MySQL нашлось два: использовать драйвер ODBC или воспользоваться технологией DataSnap. Сегодня рассмотрим вариант с ODBC.
Для демонстрации работы программы нам потребуется сервер MySQL. Обычно для таких случаев я использую джентельменский набор для веб-разработчиков Denwer. Поэтому, рекомендую и Вам его скачать, перейдя по этой ссылке. Я скачал и установил Denwer с PHP 5.2. В принципе это не важно — главное, чтоб был MySQL.
Как устанавливать Denwer и настраивать MySQL я не буду, т.к. все подробные инструкции есть на официальном сайте, а перейду сразу к созданию базы данных для тестирования. Итак, запускаем phpMyAdmin и создаем новую базу данных с названием demobase. Для примера создадим БД по статистике ключевых слов (не важно каких и для кого), база данных будет содержать всего одну таблицу, созданную с помощью следующего SQL-запроса:

CREATE TABLE keywords (NUMBER INT, keyword VARCHAR(50), COUNT INT); INSERT INTO keywords VALUES (1, " Delphi", 2000); INSERT INTO keywords VALUES (1, " Excel", 4000);

Здесь мы создали таблицу keywords и сделали две записи в таблицу по двум ключевым словам. Теперь откроем MS Excel и создадим таблицу с точно такими же полями, но содержащую данные по другим ключевым словам:

 

Файл Excel сохраним с названием mykeywords.xls.
Теперь надо установить драйвер ODBC. Для этого можно воспользоваться утилитой mysql-connector-odbc-5.1.x-win32. После того как драйвер MySQL установлен, создаем DSN, в котором указываем информацию для доступа к таблице keywords в базе данных demobase. Для создания DSN воспользуемся стандартными средствами Windows XP:

Запускаем ODBC Data Source Administrator и в появившемся окне жмем кнопку Add или «Добавить» (для русских версий Windows):

Теперь, в появившемся окне записываем все данные по источнику данных, как показано на рисунке:

По умолчанию при установке Denwer’а пароль для root пустой, поэтому поле password оставляем пустым. После внесения всех данных нажмите на кнопку «Test» и, если все настроено верно, то должно появиться окно сообщения «Connection successful». Теперь жмем «Ok» и в исходном окне Администратора видим новую запись:

Теперь приступим непосредственно к программированию в Delphi. Создадим следующее приложение:

В левой части окна размещаются компоненты для доступа к файлу Excel, в правой — к MySQL. Представленные на рисунке компоненты:

  • DBGrid (страница Data Controls) — 2 шт.
  • ExcelDS и MySQLDS — компонены DataSource со страницы Data Access
  • ExcelQuery и MySQLQuery — 2 компонента ADOQuery со страницы dbGO.

Настройка компонентов для доступа к Microsoft Excel выглядит следующим образом. У первой таблицы DBGrid в свойстве DataSource указываем ExcelDS, тот же ExcelDS указываем и у DBNavigator’а. У ExcelDS в свойстве DataSet указываем ExcelQuery. Аналогичным образом настраиваем компоненты в правой части (относящиеся к MySQL).

Теперь необходимо настроить свойство ConnectionString у компонента ExcelQuery. Выделяем строку со свойством в Object Inspector’е и конфигурируем строку подключения:

Провайдер связи JET 4.0. может использоваться для доступа к различным данным, в том числе к Microsoft Excel или Access. После того как поставщик данных выбран, жмем «Далее» и делаем дополнительные настройки:

Если теперь проверить подключение, то получим сообщение с красным крестом и следующим содержанием: «Не выполнена проверка подключения из-за ошибки при инициализации…» и т.д. и т.п. Не паникуем, а учим JET 4.0. понимать нас с полуслова. Добавляем в настройки дополниельный параметр. Для этого переходим на вкладку «Все» и изменяем поле Extended Properties:

Теперь это свойство указывает на то, что мы будем работать с документом Excel в формате Excel97-2003. Также на вкладке «Дополнительно» укажем тип доступа ReadWrite. Теперь ещё раз проверяем подключение, радуемся:

 

Как видите, пока ничего сверхъестественного не происходит — все просто и давным-давно известно, но только чуть-чуть подзабыто;) Двигаемся дальше. Теперь настраиваем доступ к MySQL — свойство ConnectionString у MySQLQuery. В окне «Свойства связи с данными» указываем Microsoft OLE DB Provider for ODBC Drivers.

На вкладке «Подключение» указываем ранее созданные MySQL_Connection, в поле «Пользователь» вписываем root и ставим галку напротив «Пустой пароль «:

Теперь, после успешного тестирования соединения, переходим к свойству SQL и записываем в него запрос следующего вида:

SELECT * FROM keywords

Теперь можете выставить к MySQLQuery свойство Active в True и увидите, что в DBGrid вывелись записи ранее внесенные в базу данных MySQL.

Остается самая малость — вытащить из листа Excel данные и скопировать их в базу MySQL. А как это сделать? Очень просто. С помощью ExcelQuery манипулировать данными в Excel также просто, как и с любой другой дазой данных. Вот запрос на получение данных из файла mykeywords.xls.

SELECT * FROM [Лист1$]

То есть в качестве таблицы БД выступает отдельный лист. Запишите этот запрос в свойство SQL компонента ExcelQuery и выставьте свойство Active в значение True. У меня получилась следующая картинка:

Теперь напришем следующий обработчик у кнопки (см. рисунок — кнопка «Скопировать текущий элемент»):

procedure TForm9.Button1Click(Sender: TObject); var Number: integer; key: string; count: integer; begin MySQLQuery.Last; //переходим к последнему элементу Number: =MySQLQuery.FieldByName('Number').AsInteger; inc(Number); //наращиваем номер на 1 key: =ExcelQuery.FieldByName('keyword').AsString; count: =ExcelQuery.FieldByName('count').AsInteger; with MySQLQuery do begin SQL.Clear; SQL.Add('INSERT INTO keywords'); SQL.Add('VALUES ('+IntToStr(Number)+', " '+key+'", '+IntToStr(count)+')'); ExecSQL; Close; SQL.Clear; SQL.Add('SELECT * FROM keywords'); Open; end; end;

Вот так запросто можно копировать данные из Excel в MySQL. Здесь я показал Вам самый простейший пример, наподобие ручного копипаста данных. Но, если проявить совсем чуть-чуть смекалки и умений работы с базами данных, то можно запросто перекидывать из Excel листы целиком или хотябы по нескольку записей за раз.
Аналогичным образом, кстати, можно обрабатывать и листы Excel 2007 в Delphi.

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

Буфер связи должен быть достаточно большим, чтобы хранить одиночную инструкцию SQL (для трафика " клиент-на сервер") и одну строку возвращенных данных (для трафика " сервер-на-клиент"). Буфер связи каждого потока будет динамически расширен до максимального ограничения, чтобы обработать любой запрос или строку. Например, если Вы имеете значения BLOB, которые содержат до 16M данных, Вы должны иметь ограничение буфера связи по крайней мере в 16M (на клиенте и на сервере сразу). Заданный по умолчанию максимум пользователя равен 16M, но заданный по умолчанию максимум сервера равен всего 1M. Вы можете увеличивать это, меняя значение параметра max_allowed_packet при запуске сервера.

Сервер MySQL сокращает каждый буфер связи до net_buffer_length байт после каждого запроса. Для клиентуры размер буфера, связанного с подключением, не будет уменьшен, пока подключение не будет закрыто.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.