Что такое код asp accessscript


Содержание

Access ASP Application object from a remote script MOTOBIT.COM

1. Basic idea

The basic idea is to make simple ASP page, which will provide a text/http interface to ASP intrinsic objects (specially Application object). We can read/write variables in application dictionary using this ASP script. And we can specify name and value of application variable by a query string to read and write specified variable.

This file lets you access any variable in application dictionary. Store this file in the space of ASP application you want to access from an external environment — in our case, file name is toapp.asp on 127.0.0.1 IIS server.

Now we can create a VBS class, which will access application values from any vbs environment, including wsh (cscript/wscript), hta or chm. You can also use this class in another ASP page, so you can access one Application dictionary in one ASP application from any other ASP application, including ASP applications on remote servers.
First of all basic > And real vbs code to access application variables from wsh.

2. Variable type extensions

There is also an extension to access Contents property of Application object — Action=C. Script will enumerate contents of Application object and write it with «

Скрытие кода VBA от пользователей

Примечание: Мы стараемся как можно оперативнее обеспечивать вас актуальными справочными материалами на вашем языке. Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Просим вас уделить пару секунд и сообщить, помогла ли она вам, с помощью кнопок внизу страницы. Для удобства также приводим ссылку на оригинал (на английском языке).

Если в базе данных Access есть код Visual Basic для приложений (VBA), вы можете скрыть этот код, сохранив TE000127323 в формате файла. ACCDE. Сохранение базы данных в виде файла. ACCDE компилирует все модули кода VBA, удаляет все редактируемые исходные коды и сжимает целевую базу данных. Код VBA сохраняет свои функциональные возможности, но код нельзя просматривать и редактировать. Как правило, база данных продолжает работать в обычном режиме, но вы можете обновлять данные и запускать отчеты.

В этой статье

Создание файла. ACCDE

Чтобы создать файл. ACCDE, выполните описанные ниже действия. В этой процедуре исходный ACCDB – файл останется без изменений.

Откройте базу данных и щелкните файл _Гт_ » Сохранить как«.

В области Сохранить как в разделе сохранить базу данных каквыберите команду Создать ACCDE и нажмите кнопку Сохранить как.

В диалоговом окне Сохранить как перейдите в папку, в которой вы хотите сохранить файл. ACCDE.

При необходимости введите новое имя файла в поле имя файла .

Нажмите кнопку Сохранить.

Если файл с указанным именем уже существует, Access предложит заменить существующий файл. Нажмите кнопку Да , чтобы перезаписать существующий файл. ACCDE, или кнопку нет , чтобы вернуться в диалоговое окно Сохранить как , и введите новое имя файла.

Access создаст файл. ACCDE, закроет исходный ACCDB – файл, а затем откроет файл. ACCDE.

Функциональные возможности, которые изменились в файле. ACCDE

Сохранение базы данных Access в виде файла. ACCDE не полностью запрещает изменение структуры базы данных. Однако в файле. ACCDE невозможно выполнить следующие задачи:

Изменение или создание форм, отчетов и модулей.

С помощью диалогового окна » Ссылки VBA » можно добавлять, удалять и изменять ссылки на библиотеки объектов или базы данных.

Просмотр и изменение кода VBA.

Импорт и экспорт форм, отчетов и модулей Access. Однако таблицы, запросы и макросы можно импортировать и экспортировать в базы данных ACCDB.

Проблемы с изменением форм, отчетов и модулей

Не забудьте сохранить копию исходной базы данных Access. Если вы хотите изменить структуру форм, отчетов или модулей в файле. ACCDE, необходимо изменить исходную базу данных Access (ACCDB-файл), а затем сохранить ее в виде файла. ACCDE. Сохранение базы данных Access с таблицами в виде файла. ACCDE может привести к проблемам с выверка разных версий данных, если позже потребуется изменить структуру форм, отчетов или модулей. По этой причине сохранение базы данных Access в виде файла. ACCDE наиболее подходит для серверной базы данных TE000126645.

Ограничения на сохранение базы данных в виде файла. ACCDE

Некоторые ограничения могут препятствовать сохранению базы данных Access в файле. ACCDE.

Вы должны иметь пароль на доступ к коду VBA.

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

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

На вкладке Файл выберите пункт Сведения и нажмите кнопку Расшифровать базу данных.

Откроется диалоговое окно Удаление пароля базы данных.

В диалоговом окне Удаление пароля базы данных в поле пароль введите пароль базы данных.

Нажмите кнопку ОК.

Работа ссылок с файлами. ACCDE

При попытке создать файл. ACCDE из базы данных TE102750819 (ACCDB) или надстройки TE102750819 (аккда), которая ссылается на другую базу данных или надстройку Access, TE102750819 выводит сообщение об ошибке и не позволяет завершить операцию. Чтобы сохранить базу данных, которая ссылается на другую базу данных, в виде файла. ACCDE, необходимо сохранить все базы данных в цепочке ссылок в виде файлов ACCDE, начиная с первой указанной базы данных. После сохранения первой базы данных в виде файла. ACCDE нужно обновить ссылку в следующей базе данных, чтобы она указывала на новый файл. ACCDE, прежде чем сохранять его в файле. ACCDE и т. д.

Например, предположим, что Database1. accdb ссылается на Database2. accdb и Database2. ACCDB, Database3. аккда. Чтобы сохранить Database1. accdb как файл. ACCDE, выполните указанные ниже действия.

Сохраните Database3. аккда в виде Database3. ACCDE.

Откройте базу данных 2. accdb и измените ее ссылку так, чтобы она указывала на новый файл с именем Database3. ACCDE.

Сохраните Database2. accdb как Database2. ACCDE.

Откройте Database1. accdb и измените его ссылку, чтобы она указывала на новый файл с именем Database2. ACCDE.

Сохраните Database1. accdb как Database1. ACCDE.

Иллюстрированный самоучитель по созданию Flash-игр

Что такое код ActionScript и где его размещать

ActionScript – это язык программирования, используемый программой Flash MX. По сравнению с главной временной шкалой, позволяющей создавать лишь линейную анимацию, ActionScript расширяет возможности программирования. При помощи ActionScript ваш ролик будет реагировать, например, на выбор, делаемый пользователем, или на другие события. ActionScript позволяет управлять элементами, которые видит пользователь, и вместо простой анимации показывать нелинейные презентации, интерактивные приложения или игры.

ActionScript, используемый Flash MX, был создан на основе двух источников. Первый – это набор макрокоманд, взятый из предыдущих версий Flash, в основном Flash 4, который содержал схожий, но очень простой язык программирования. Другим источником оказался JavaScript – язык, использующийся для создания небольших программ для HTML-страниц в Internet Explorer и Netscape. Новый язык стал популярен среди разработчиков Web-страниц, которые являются основными пользователями Flash MX. Для того чтобы упростить изучение ActionScript, многие новые команды и синтаксис были приведены к виду, напоминающему JavaScript.

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

Сценарии кадра

Вы можете помешать сценарии в ключевые кадры главной временной шкалы вашего ролика. Для этого выделите ключевой кадр на главной временной шкале и нажмите F9. На экране появится диалоговое окно Actions – Frame (Действия – Кадр).

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

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

Сценарии для кнопок

Вы также можете задавать сценарии для кнопок. Прежде всего вам следует создать кнопку как элемент библиотеки. Затем, если необходимо, перетащите кнопку на рабочее поле. Выделите ее и нажмите F9 для того, чтобы вызвать диалоговое окно Actions. В случае, если диалоговое окно уже на экране, сценарий кнопки будет отображен при ее выделении.

Теперь окно Actions имеет заголовок Actions – Button (Действия – Кнопка). Любой сценарий, введенный здесь, будет выполнен кнопкой. Однако вы не можете просто ввести набор команд. Вы должны запрограммировать реакцию кнопки на выполнение различных событий, например на ее нажатие, помещение над ней курсора и т.д. Код, обрабатывающий подобные события, называется программой-обработчиком. Сценарий кнопки представляет собой набор из одного или нескольких обработчиков.

Сценарии клипов

Вы также можете назначить сценарий клипу. Для этого прежде всего создайте клип и сохраните его как элемент библиотеки. Затем поместите копию клипа на рабочее поле. Выделив копию клипа на рабочем поле, вызовите окно Actions, оно будет иметь заголовок Actions – Movie Clip (Действия – Клип).

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

I cant access value in code behind file

I have a webpage with a button pad on it. It is used at a gas station with bad network so everytime they click on the button to add a number to the textbox it will load forever so I changed the button clicks to javascript.

It works perfectly but now the code behind gets an empty value (Not null) when i retrieve the value from the textbox.

This is my code

The buttons used to add the numbers to the textbox and the textbox

And this is my code in the code behind file

Basically all this needs to do is add an account number to a textbox from an button pad on the website.

After the account is added they would click on continue button and then the code behind checks if the textbox is empty if it is not empty it connects to database to check if it is valid.

But no matter how many numbers i add to the textbox it is still empty when i access it from code behind.

Работа с данными в ASP.NET. Создание DAL (Data Access Layer)

За основу для данной статьи, я взял статью «Creating a Data Access Layer» ( http://www.asp.net/learn/data-access/tutorial-01-cs.aspx )

Я её попытался перевести, так как знания английского у меня не на самом хорошем уровне, но главное я понял как ОНО работает и попытаюсь об этом поведать вам. Буду придерживаться плана оригинальной статьи, но стиль написания местами поменяю.

Введение

В задачи каждого web -разработчика входит работа с данными. Можно даже смело заявить, что это первостепенная задача программиста. Мы создаем базы данных для хранения информации, мы пишем скрипты и запросы для её грамотного извлечения, изменения или добавления, мы создаем сайты для её представления.

Эта статья первая в своей серии «Работа с данными в ASP . NET «, в которой я буду описывать различные техники работы с данными в ASP . NET . В данной статье я опишу процесс создания приложения, использующего Typed DataSets .

Для изучения материала данной статьи вам необходимо иметь Microsoft SQL Server 2005 Express Edition или выше и базу данных Northwind , которую вы можете скачать с сайта Microsoft ( http :// www . microsoft . com / downloads / detail . aspx ? Family >=06616212-0356-46 A 0-8 DA 2- EEBC 53 A 68034& displaylang = en ), также вам необходимо иметь на своем компьютере Microsoft Visual Studio , или хотя бы Microsoft Visual Web Developer Express (можно найти на сайте Microsoft ) версии 2005 или 2008 (может и выше, по крайней мере на момент написания этой статьи у меня стоит Visual Web Developer Express 2008)

Если у вас есть все необходимое, то наберитесь терпения и. Поехали!

Первый шаг. Создание проекта и подключение к базе данных

Для того, чтобы нам создать наш Data Access Layer ( DAL ), нам необходимо создать проект в Visual Studio (или Visual Web Developer Express , здесь и далее просто VS ). Для этого, откройте программу, перейдите в меню » File » и выберите пункт » New Web Site …». Укажите шаблон » ASP . NET Web Site «, » Location : File System » и выберите произвольный путь, или если у вас установлен и настроен IIS , то » HTTP » (лично я делал вторым способом, как установить и настроить IIS я расскажу в другой раз, воспользуйтесь http :// www . google . com / ), и укажите используемый язык в C # (» Language : C #»).

Илон Маск рекомендует:  Что такое код asp sessionid

Рисунок SEQ Рисунок \* ARABIC 1. Создание ASP . NET приложения

После нажатия на кнопку » OK «, VS автоматически создаст проект, содержащий стартовую страницу Default . aspx и директорию App _ Data .

Теперь, когда сайт создан нам необходимо добавить к нему базу данных Northwind с помощью Server Explorer в VS . С помощью Server Explorer вы можете совершать манипуляции с базой данных, например, создавать, изменять или удалять таблицы, хранимые процедуры, представления и все это прямо в VS . Вы также можете просмотреть содержимое таблиц и создать собственные запросы, в том числе в графическом режиме, используя Query Builder .

При создании TypedDataSet нам будет необходимо показать VS базу данных, по образу которой будет построен наш Typed DataSet .

Добавление базы данных к проекту и подключение к ней

Во введении я говорил, что для проекта нам необходима база данных Northwind , если вы еще её не скачали её или не установили, сделайте это сейчас.

Для того, чтобы добавить базу данных в проект, откройте Solution Explorer (все указанные меню и утилиты находятся в меню » View «). Кликните правой кнопкой мыши по папке » App _ Data » и выберите пункт » Add Existing Item …», в появившемся диалоговом окне укажите файл » NORTHWIND . MDF «, у меня он лежал в директории «C:\SQL Server 2000 Sample Databases».

Теперь откройте Server Explorer , в разделе Data Connections должна появиться база данных Northwind , если этого не произошло, то нажмите правой кнопкой мыши на пункте » Data Connecions » и выберите » Add Connection «, в появившемся окне смените Data Source на » Microsoft SQL Server Database File ( SqlClient )» и укажите местонахождение файла NORTHWIND . MDF . Нажмите » OK «.

Теперь у вас наверняка должна появиться база данных Northwind в списке Data Connections . Теперь вы можете посмотреть содержимое базы данных, таблиц, выполнить запросы и прочая, и прочая.

Рисунок SEQ Рисунок \* ARABIC 2. База данных в Server Explorer

Второй шаг. Создание Data Access Layer

Для начала разберемся, что же такое Data Access Layer . Любое приложение, которое работает с данными, включает в себя так называемый уровень представления , в web -приложениях это страницы, которые показывают эти данные. Естественно, что для того, чтобы данные можно было представить, в прложении должна быть реализована логика обработки данных. В ASP . NET это может быть реализовано с помощью написания кода ADO . NET в страницах или использования элемента управления SqlDataSource или еще каким либо образом. В любом случае приложение будет содержать в себе логику доступа к данным . Рекомендуется логику доступа к данным вынести из уровня представления в отдельный — уровень доступа к данным , Data Access Layer ( DAL ). Все выгоды такого подхода очень хорошо описаны, в конце статьи я укажу ссылки на другие статьи, описывающие эти выгоды.

Любой код, который осуществляет обработку данных, их выборку, изменение, команды SELECT , INSERT , UPDATE , и DELETE и прочие, должен находиться в DAL . Уровень представления не должен содержать в себе никакого кода обращения к базе данных, все данные в нем должны браться из DAL . База данных Northwind , взятая в качестве примера, содержит в себе такие таблицы, как Products и Categories , в которых хранится информация о товарах и о категориях, к которым они принадлежат. В нашем DAL мы должны описать следующие методы:

· GetCategories (), который выдаст информацию обо всех существующих в базе данных категориях

· GetProducts (), который выдаст информацию обо все существующих товарах

· GetProductsByCategoryID ( categoryID ), который выдаст информацию обо всех продуктах, принадлежащих определенной категории

· GetProductByProductID ( productID ), который выдаст информацию об определенном товаре

Указанные методы выполнят подключение к базе данных, выполнят запрос и вернут полученный результат. То, в каком виде они вернут результат является очень важным! Эти методы могут вернуть стандартный DataSet или DataReader , заполненный данными из таблицы, но лучше будет, если они вернут strongly-typed objects (Если честно, не знаю как это переводится) . A strongly-typed object is one whose schema is rigidly defined at compile time, whereas the opposite, a loosely-typed object, is one whose schema is not known until runtime.

Например, DataReader или DataSet (используемый по умолчанию) имеют очень грубую структуру, т.к. она уже определена и при выполнении запроса такой объект просто заполняется результатом. Предположим мы имеем DataSet , в котором содержится результат какого-либо запроса. Для того чтобы этот результат получить мы должны обратится к нему кодом, вида DataTable . Rows [ index ][» ColumnName «] . Причем результат всегда имеет тип object . При обращении к нему мы должны использовать строковые и числовые «координаты». В другом же случае, таблица данных будет представлена в качестве объекта класса, где все столбцы таблицы будут определены как свойства класса, причем того же типа, в каком они определены в базе данных, а обращение примет вид DataTable . Rows [ index ]. ColumnName .

Для того, чтобы получать результаты в виде strongly-typed objects можно определить свой класс, в котором свойства будут отражать столбцы таблицы, а можно использовать Typed DataSet , который VS сделает сама.

В данной статье мы будем использовать Typed DataSet .

На следующем рисунке изображено взаимодействие между различными уровнями приложения при использовании Typed DataSet .

Рисунок SEQ Рисунок \* ARABIC 3. Весь код по выборке и обработке данных возложен на DAL

Создание Typed DataSet и DataTable Adapter

Для того, чтобы создать наш собственный Typed DataSet , необходимо добавить его к проекту. Для этого кликните правой кнопкой мыши в ветке проекта в Solution Explorer и выберите » Add New Item …», в списке шаблонов выберите DataSet , и назовите его Northwind . xsd

В открывшемся окне редактора щелкните правой кнопкой мыши в любом пустом месте и выберите Add / TableAdapter . Откроется мастер создания TableAdapter .

Здесь я опустил описание, что такое TableAdapter . Смотрите оригинал статьи или используйте поиск.

Перво-наперво вас попросят указать используемое подключение. Выберите NORTHWIN . MDF , если у вас его еще нет, тогда нажмите New Connection и создайте его.

Теперь необходимо определить каким образом данные будут браться из базы и определить первый запрос на выборку данных. Укажите Use SQL statements

Теперь необходимо ввести сам запрос. Его можно ввести вручную или использовать утилиту Query Builder . Введем запрос на выборку всех товаров из таблицы Products :

В Query Builder «е это будет выглядеть так:

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

И, напоследок, мастер предложит нам выбрать какие методы надо создавать и предложит ввести названия этих методов.

Таким образом мы создали TableAdapter для таблицы Products . Реализовали два метода: Fill (), который позволит заполнить DataTable , переданную в качестве параметра, и метод GetProducts (), который вернет DataTable () после выполнения. А на экране мы увидим следующее:

На данном этапе мы уже можем обратиться к объекту ProductTableAdapter , например таким кодом:


NorthwindTableAdapters.ProductsTableAdapter productsAdapter = new NorthwindTableAdapters.ProductsTableAdapter();
Northwind.ProductsDataTable products; products = productsAdapter.GetProducts();
foreach (Northwind.ProductsRow productRow in products) Response.Write(«Product: » + productRow.ProductName + «
«);

Как вы видите, в данном коде мы не написали не бита для обращения к базе данных, мы обращаемся толька к объекту DataTable , который нам любезно возвращает функция GetProducts (); причем мы эту DataTable можем использовать в качестве DataSource для, скажем, выпадающего списка.

Ну вот и пришла пора привести конкретный пример! Для этого создадим страницу ASP . NET и назовем её AllProducts . aspx

Что такое код asp accessscript

Этот текст предназначен для тех, кто никогда не имел дела с ASP, и вообще смутно себе представляет возможности программирования на стороне сервера. Я ставил себе задачу, создать у читателя общее представление о предмете. Отдельные неточности при этом менее важны, пожалуйста, громко не ругайтесь.

ASP (Active Server Pages) – это мощная технология от Microsoft, позволяющая легко разрабатывать приложения для WWW. ASP работает на платформе Windows NT и IIS (Internet Information Server), начиная с версии 3, хотя вроде есть реализации на других платформах. ASP – это не язык программирования, это внутренняя технология, позволяющая подключать программы к Web-страницам. Основа успеха ASP – простой скриптовый язык (Visual Basic Script или Java Script) и возможность использования внешних COM-компонент.

Как это все происходит?

Вы пишите программу и складываете в файл на сервере. Браузер клиента запрашивает файл. Файл сначала интерпретируется сервером, на выходе производится HTML-код. Этот HTML посылается клиенту. Файлы с программами имеют расширение .asp. Файлы asp – это обычные текстовые файлы, содержащие исходные тексты программ. Файлы делаются с помощью любого текстового редактора. Каталог, в котором размещены файлы asp должен иметь права на выполнение, так как сервер исполняет эти файлы, когда браузер их запрашивает. Собственно программы пишутся на любом скриптовом языке, который установлен в системе. По умолчанию поддерживаются VBScript и JavaScript. Можно доустановить другие (например, Perl). Если ничего специально не указывать используется VBScript. В дальнейшем будем ссылаться только на него. Программные фрагменты заключаются в скобки . Можно ставить открывающую скобку в начале файла, закрывающую – в конце, все что между ними – программа на Visual Basic’е.

Какие средства есть для программирования?

Web – нормальная среда программирования, если правильно понять, что есть что. В VBScript есть все нормальные конструкции структурного программирования (if, while, case, etc). Есть переменные (описывать не обязательно, тип явно не задается). Поддерживаются объекты. Работа с ними обычная – Object.Property, Object.Method. Есть ряд встроенных объектов (Request, Response, Session, Server, Connection, Recordset). Можно доустанавливать другие компоненты (скачивать, покупать, программировать), например для работы с электронной почтой.

Понятия «экран», куда можно выводить данные нет. Все, что надо показать пользователю, выбрасывается в выходной поток на языке HTML. Браузер пользователя интерпретирует этот HTML. Для упрощения вывода существует объект Response. Вывод осуществляется с помощью метода Write.

Hello, world!

Так производится запись во внутренний буфер объекта Response. Когда скрипт заканчивает работу, весь буфер выдается клиенту. Надо заметить, что клиент получает «чистый» HTML, таким образом программы на ASP не зависят от клиентского ПО, что очень важно. Если внутри выводимой строки нужно использовать кавычку, кавычка удваивается. Другие методы и свойства Response позволяют управлять выводом. Так Response.Buffer регулирует, получает ли клиент данные по мере из записи в Response, или все сразу по завершении исполнения страницы. Метод Response.Redirect перенаправляет браузер на другую страницу. Чтобы им пользоваться, нельзя до него на странице использовать Response.Write.

Программа на ASP не может явно спросить пользователя о чем-то. Она получает данные из других страниц, либо через URL. Передаваемые параметры помещаются во входной поток и доступны через объект Request. Чтобы передать переменную var в программу test.asp, надо написать:

Чтобы из программы получить значение этой переменной, надо написать:

Идентификация в ASP.NET

Ты, наверное как и любой программист, занимающийся разработкой web-приложений, ни раз сталкивался с проблемой несанкционированного доступа. Ведь одни сайты рассчитаны на свободный доступ для всех посетителей, другие же являются закрытыми, и доступ к ним предоставляется только отдельным пользователям. Частым решением этой проблемы является идентификация пользователя путем логина/пароля.

Базовые понятия систем безопасности

Существуют два понятия, без которых невозможно обсуждение безопасности:

  • Аутентификация (authentication) – процесс определения личности пользователя, требующий верные логин и пароль, чтобы доказать, что он на самом деле тот, за кого себя выдает.
  • Авторизация (authorization) – это процесс выставления прав пользователю, прошедшего аутентификацию.

Способы аутентификации ASP.NET

Среда ASP.NET предоставляет три способа аутентификации:

  • Windows – аутентификация на основе системы диспетчера локальной сети Windows
    NT.
  • Forms – аутентификация на основе cookies.
  • Passport – аутентификация с помощью службы Passport от
    Microsoft.

Для того, чтобы выбрать тот или иной способ аутентификации потребуется внести изменения в файл конфигурации web.config следующим образом (я выбрал метод Forms — как наиболее актуальную при разработке web-приложений):

Вы можете справедливо заметить, что после внесения показанных выше изменений ничего особенного не происходит.
Эта ситуация возникает из-за того, что мы не запретили доступ анонимным пользователям. Для
такого запрета надо внести еще одно изменение в файле
web.config:

Этот знак — (?) — обозначает всех анонимных пользователей. А включая это правило вы запрещаете им доступ. Теперь каждый пользователь должен быть аутентифицирован, и каждый
не аутентифицированный будет перенаправлен на страницу регистрации.

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

Небольшие пояснения: параметр loginUrl в теге authentication указывает на страницу регистрации (по умолчанию – default.aspx), а параметр passwordFormat в теге credentials означает, что логин и пароль не зашифрованы (альтернативы – использовать алгоритмы шифрования SHA1 и MD5. О них мы поговорим позже ).

Для проверки верности логина и пароля будем использовать метод
FormsAuthentication. Authenticate(string login,string pass). А для регистрации пользователя в приложение ASP.NET путем создания cookie, и перенаправления на страницу, которая была изначально запрошена пользователем, будем использовать метод
FormsAuthentication. RedirectFromLoginPage(string login, bool CreatePersistentCookie) (второй параметр указывает на то,
каким будет посланный cookie – постоянный (срок годности
— 50 лет, значение true) или нет (false)).

Вот, собственно, и сам код страницы регистрации:

BatchAccess: утилита для управления базами MS Access

Версия 1.4


Автор: Никита А. Зимин
Русские Информационные Технологии

Опубликовано: 14.12.2005
Исправлено: 10.12.2020
Версия текста: 1.4

BatchAccess


ПРЕДУПРЕЖДЕНИЕ

Утилита BatchAccess предоставляется компанией Русские Информационные Технологии на условиях «КАК ЕСТЬ», без предоставления каких-либо гарантий и прав. Используя утилиту BatchAccess, вы соглашаетесь с тем, что компания Русские Информационные Технологии не несет ответственности за использование вами данной утилиты, а также с тем что вы принимаете на себя весь риск, связанный с использованием данной утилиты.

Что такое BatchAccess

BatchAccess — небольшая утилита, написанная в компании Русские Информационные Технологии. Мы создали ее в ходе работы над программным продуктом, работающим с базой данных MS Access.

Целью было — перейти от описания базы средствами Access к описанию в виде SQL-скрипта. Работа со скриптом имеет ряд преимуществ по сравнению с использованием MDB-файла:

SQL-скрипт MDB-файл
Текст, который легко читать и править любым текстовым редактором Бинарный закрытый формат, для работы требует установленный MS Access
Малый объем — несколько килобайт текста полностью описывают сложную БД Значительный объем — даже пустая БД занимает 65536 байт
Удобство хранения в системах контроля версий — CVS, SVN, VSS и т.п. Неудобство хранения в системах контроля версий из-за бинарного формата
Легкость нахождения отличий от предыдущей версии базы Найти все отличия данной версии БД от предыдущей — практически нереально

Сейчас с помощью BatchAccess мы решаем следующие задачи:

  • Создание пустой базы данных
  • Выполнение SQL-скрипта над заданной базой данных
  • Задание структуры базы данных — таблиц, связей, индексов, процедур
  • Наполнение таблиц — из SQL-скриптов либо из CSV-файлов
  • Восстановление SQL-скрипта структуры по имеющейся базе данных
  • Восстановление SQL-скрипта данных по имеющейся базе данных
  • Экспорт данных в CSV-файл и импорт из него
  • Сжатие/восстановление базы данных
  • Построение SQL-скрипта различий между двумя базами

Требования

.NET Framework 1.1

Microsoft Jet Driver 4.0

ПРИМЕЧАНИЕ

Устанавливать MS Access НЕ ТРЕБУЕТСЯ!

Как это работает

Утилита с интерфейсом командной строки. На входе — имя БД, имя SQL-скрипта и опции. Опции позволяют указать — использовать существующую базу или создать новую.

SQL-скрипт исполняется используя Jet Driver через OleDB. Некоторые операции над базой данных выполняются через ADOX.

В зависимости от опций, программа работает в одном из четырех режимах:

Прогон скрипта на существующей или новой базе [–c]
Создание скрипта на основе структуры заданной базы –r
Создание скрипта но основе данных заданной базы –d
Импорт данных из CSV-файла в одну из таблиц –iTABLENAME
Экспорт данных из таблицы в CSV-файл –eTABLENAME
Построение скрипта различий между двумя базами –mMDBFILENAME

Прогон скрипта

SQL-скрипт — текстовый файл, состоящий из 8-битных символов в кодировке, принятой в системе по умолчанию (обычно — Windows-1251). Пробелы вначале и в конце строки — игнорируются. Пробелами считаются символ пробел (ASCII код 32) и символ табуляции (ACSII код 9). Комментарии — любые строки, в начале которых (не считая ведущих пробелов) стоит два знака минус (ASCII код 45). Пустые строки — игнорируются.

SQL-оператор составляется из нескольких строк, начиная с начала файла, до тех пор пока не встретится строка в конце которой стоит символ «точка с запятой» (ASCII код 59) — эта строка считается последней строкой оператора. Следующая строка считается первой строкой следующего SQL-оператора.

Файл скрипта парсится — отбрасываются комментарии и пустые строки, выделяются SQL-операторы. Затем устанавливается соединение (Jet OleDB) и один за другим выполняются операторы, возникающие ошибки — протоколируются.

Как пользоваться


Формат вызова

Опции отличаются от остальных параметров наличием символа – или /. Параметры могут идти в любом порядке, важно только взаимное расположение параметров Файл_БД и Файл_Скрипта: первый параметр НЕ-опция считается Файл_БД, следующий — Файл_Скрипта.

Опции-режимы


  • –h или –help

Получение краткой справки по использованию программы.

Создает новый файл базы данных. Если файл уже существует, возникнет ошибка.

Создание базы данных происходит с использованием ADOX.

Восстановить по базе данных SQL-скрипт структуры.

Информация о структуре базы получается с помощью ADOX.

Восстановить по базе данных SQL-скрипт данных — для каждой таблицы генерируется набор операторов INSERT.

Текстовые поля: символы с ASCII-кодом меньше 32, а также не-буквы с ASCII-кодом больше 127 восстанавливаются в виде «Chr(xx)».

Импортировать CSV-файл в заданную таблицу. В качестве параметра Файл_Скрипта задается имя CSV-файла.

Экспортировать указанную таблицу в CSV-файл. В качестве параметра Файл_Скрипта задается имя CSV-файла. Если такой CSV-файл уже существует, он будет переписан. Кстати, вместо имени таблицы можно указать имя запроса (VIEW) — в этом случае в CSV-файл попадет результат запроса.

Перенаправить вывод в заданный файл.

Получение SQL-скрипта различия структуры двух баз. База, заданная в параметре, считается «старой», база, заданная вне параметров — «новой», а полученный скрипт содержит операторы для перехода от «старой» к «новой» базе.

Информация о структуре баз получается с помощью ADOX.

Опции-модификаторы


  • – b или – brackets

Требует, чтобы в скрипте, создаваемом программой, квадратные скобки «[]» использовались для каждого идентификатора. Без этой опции квадратные скобки используются только для идентификаторов, которые не могут быть использованы напрямую.

«Тихий» режим — показываются только сообщения об ошибках и предупреждения, информационные сообщения не показываются.

Режим совместного использования базы данных — Share Deny None (по-умолчанию), Share Deny Read, Share Deny Write, Share Exclusive (монопольный доступ к БД)

Пароль для доступа к базе данных. Может использоваться как при создании базы, так и при обычном прогоне скрипта.

Выполняет сжатие/восстановление базы. Выполняется в самом конце работы программы — после выполнения ее основной функции — и только в том случае, если не было ошибок.

Примеры вызова

Создание базы данных SuperPuper.mdb и выполнение скрипта structure.sql:

Выполнение скрипта data.sql над базой данных SuperPuper.mdb:

Восстановление скрипта структуры базы данных SuperPuper.mdb в файл structure.sql:

Получение скрипта данных для базы данных SuperPuper.mdb в файл data.sql:

Импорт данных в SuperPuper.mdb в таблицу Contact из файл contact.csv:

Экспорт данных из таблицы Contact в файл contact.csv:

Получение скрипта перехода от db1.mdb к db2.mdb:

Мета-операторы

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

Когда нам понадобились эти возможности, мы решили расширить Jet SQL за счет мета-операторов. Суть в том что мы ввели ряд собственных операторов, которые не передаются на исполнение в Jet, а выполняются самим BatchAccess.

Все мета-операторы начинаются с символа решетки — «#». Так же как и для обычных операторов, концом оператора считается символ точки с запятой, стоящий в конце строки.

Поддерживаются следующие мета-операторы:

Сжатие/восстановление базы данных.


    #LINK TABLE DATABASE [REFERENCES ] [PROVIDER

Подключение к базе данных внешней таблицы TableName из файла базы данных DatabasePath. Если DatabasePath содержит спецсимволы, заключите путь в квадратные скобки. Если в данной базе таблица должна иметь другое имя, укажите RemoteTableName. Параметр ProviderString позволяет подключать таблицы форматов, отличных от MDB — например, лист Excel или таблицу dBase.

Обновление связи на внешунюю таблицу TableName — для нее задается база данных DatabasePath. Если DatabasePath содержит спецсимволы, заключите путь в квадратные скобки.

Работает аналогично ключу –iTABLENAME: импортирует данные в заданную таблицу из заданного CSV-файла.

Что такое код ошибки VBScript 0x800A01FB

У меня есть решение на основе ASP, VB6, COM и SQL Server. Веб-сервер — IIS 6.

В нерегулярные интервалы я получаю следующее сообщение об ошибке на странице ASP:

(где «objPSM» — это мой собственный класс COM обработки сеанса).

Если я перезагружаю страницу, она работает.

Я пробовал код ошибки Google, он появляется в этой статье (http://support.microsoft.com/kb/262681), но это не должно относиться к моей проблеме как Я не использую объект Session — у меня есть собственный код обработки сеанса, который использует файлы cookie и базу данных для хранения состояния.

Вот код VB, который взрывается:


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

Кто-нибудь знает, что означает код ошибки (0x800A01FB)?

ОБНОВЛЕНИЕ: Разговоры с хостинг-провайдером, и они переработали пул приложений IIS. Ошибка исчезла. Вернется к этому вопросу, если проблема снова появится.

vbscript asp-classic com

4 ответа

1 Решение ObiWanKenobi [2009-09-02 19:22:00]

Разговоры с хостинг-провайдером, и они переработали пул приложений IIS. Ошибка исчезла.

Наиболее вероятным источником этой ошибки является ADODB. См. why-do-i-get-800a01fb-errors.

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

0 [2009-06-02 17:57:00]

Похоже, что objPSM — может использовать RecordSet с adUseClient как один из параметров либо на RecordSet, либо на объекте Connection, который используется в GIT.

«COM предоставляет компонент, называемый глобальной таблицей интерфейса (GIT). GIT позволяет приложению хранить ссылку на интерфейс объекта в таблице, чтобы указатель интерфейса можно было получить в любое время. сохраняя указатель интерфейса в GIT, объект запрашивается для IMarshal, и если IMarshal выставлен объектом, данные маршалинга объекта помещаются в поток, где его можно получить в более позднее время, когда указатель интерфейса извлекается. IMarshal отображается клиентом-клиентом, который фактически выполняет передачу данных набора записей. Возникает проблема, если открытый объект ADO Recordset, который использует adUseClient, помещается в GIT, а затем позже отменяется из таблицы Нарушение прав доступа будет происходить.. Чтобы избежать проблемы, поместите указатель интерфейса набора записей в GIT перед вызовом Open в наборе записей. Это поместит указатель интерфейса в GIT, прежде чем движок курсора клиента будет вызывается, который будет ssentially вызывают стандартное маршалинг, а не записывают данные, передаваемые из движка курсора через IMarshal. В этом случае будет сохранен только указатель на интерфейс ADO Recordset, который является реальным намерением программиста.» http://support.microsoft.com/kb/249175/EN-US/

Похоже, это было исправлено в MDAC 2.6

0 azheglov [2009-06-02 18:00:00]

Все такие коды ошибок определены в winerror.h(Googled it и получил эту ссылку: winerror.h Прочитайте о 32-битном формат кода ошибки сначала, чтобы понять, что означает каждый бит, чтобы вы могли понять похожие коды ошибок в будущем.

01FB — код ошибки: CO_E_OBJNOTREG (объект не зарегистрирован)

00A относится к «объекту», где произошла ошибка:

ASP на блюдечке. Часть 2

Загрузка файлов с помощью ASP и VBScript

Неужели нельзя обойтись без ActiveX-компонента? Конечно, можно. Давайте рассмотрим, каким образом можно загрузить на сервер, например, файл с иллюстрацией без использования встраиваемого компонента. Попробуем обойтись исключительно средствами ASP. Разумеется, время выполнения операции существенно увеличится, однако в нашем случае (при загрузке всего одного или двух файлов) это будет почти не ощутимо.

Проблема заключается в том, что, как правило, компоненты, предоставляемые «третьими» фирмами, не являются частью самого ASP, а представляют собой так называемые черные ящики, настроить которые под конкретные нужды невозможно. Будучи «третьими» компонентами, они должны устанавливаться на серверы, а это, в свою очередь, означает, что понадобится скопировать файлы компонентов (DLL или OCX) на сервер и зарегистрировать их. Какие проблемы? Никаких, если вы сами осуществляете хостинг вашего сайта. Однако если этим занимается какая-нибудь другая компания, то могут возникнуть проблемы с размещением и (или) регистрацией компонентов на сервере, обслуживающем ваш сайт.

Для того чтобы понять, как работает upload-скрипт, для начала посмотрим, каким образом посылаются данные из окна нашего браузера серверу с помощью протокола HTTP, то есть поймем, как работает «multipart/form-data».

Форма загрузки

Давайте разберемся в механизмах обработки HTML-форм более подробно. Итак, атрибут формы enctype определяет тип содержимого, используемый для кодирования множества элементов (полей) формы с целью их последующей отправки на сервер. Атрибут enctype, используемый по умолчанию, равен «application/x-www-form-urlencoded». Для передачи больших объемов данных, таких как файлы и (или) двоичные данные, используется значение атрибута «multipart/form-data».

Сообщение типа «multipart/form-data» содержит последовательности, каждая из которых представлена блоками, каждый из которых, в свою очередь, содержит следующие обязательные поля:

  • заголовок content-disposition, значение которого равно «form-data», — определяет тип пришедших на сервер данных;
  • имя атрибута — определяет имя элемента формы.

Для файлов этот набор выглядит несколько иначе:

  • заголовок content-type посылаемых двоичных данных;
  • атрибут с именем файла и полным путем к нему на компьютере клиента.

Рассмотрим простой пример HTML:

По нажатии кнопки «SubmitQuery» в этом окошке на сервер придет следующий запрос:

Эти данные могут быть отображены, если их послать клиенту в качестве ответа на запрос. Двоичные данные должны считываться с помощью ASP-функции Request.binaryRead, а записываться с помощью Response.binaryWrite:

Как вы наверняка заметили, блоки последовательности в ответе разделяются между собой следующими разграничителями:

Для каждого блока (поля, элемента формы) имеется одно значение content-disposition. Атрибут name указывает, к какому именно элементу формы относится тот или иной блок (в нашем случае e-mail, blob или Enter). Для элемента формы файла (в нашем случае blob) имя файла также является частью заголовка content-disposition, а заголовок content-type определяет тип данных.

Скрипт-загрузчик

Очевидно, что все содержимое HTTP-запроса должно быть «разобрано» по частям, рассмотрено и обработано нашим скриптом. В таких языках, как VB или C++, это весьма тривиальная задача, так как для этого предусмотрено множество объектов и методов. Применяя VBScript, сделать это не так просто, но все же возможно.

Поскольку посылаемые данные представлены в двоичном формате, мы будем вынуждены пользоваться для работы с ними соответствующими функциями языка VBScript. Логично предположить, что эти данные представляют собой последовательности байтов и такие функции, как MidB, InstrB и LenB, — именно то, что нам нужно. Мы также должны избегать использования классических строк в VBScript потому, что они представляются в формате Unicode и не подходят для передачи одиночных байтов. Это единственные функции VBScript, предназначенные для операций с байтами. Нам же нужен метод, позволяющий получать unicode-строку из «разбираемых» данных, с тем чтобы в дальнейшем использовать ее в VBScript-коде. И еще нам потребуется функция — преобразователь Unicode-строки в байт-строку, с тем чтобы использовать эту строку в качестве аргумента функции InstrB.

Определим объект «UploadRequest». Он содержит все поля нашей формы и выглядит следующим образом:

Такой «объектный» подход к организации позволит в дальнейшем упростить доступ к обрабатываемым данным.

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

Проблема в том, что, как было уже отмечено, функция InstrB требует строки байтов, в то время как мы располагаем Unicode-строками. Функция getByteString (String) позволит нам преобразовать unicode-строку в строку байтов. Теперь в цикле найдем конец последовательности:

Для каждого шага в цикле мы будем обрабатывать одно поле. Все данные, относящиеся к этому полю, будем сохранять в объекте типа Dictionary, и, таким образом, для каждого элемента формы будет порождаться новый объект UploadControl.

Сначала мы получим имя поля из заголовка «content-disposition». В конце имени располагается символ chr(34). Этим мы и будем руководствоваться для определения конца.

Далее необходимо проверить, является поле элементом типа «файл» или элементом типа «текст». Если это элемент типа «текст», никаких данных, кроме имени поля, нам не потребуется, а если это элемент типа «файл», то нам понадобятся имя файла и заголовок content-type.

Если это файл, то добавим имя и путь к файлу в объект dictionary. Имя файла есть строка символов, которую необходимо преобразовать в формат unicode. Сделать это можно при помощи функции getString().

А вот теперь можно получить содержимое файла, которое нет необходимости преобразовывать, поскольку это двоичные данные. Попросту необходимо сохранить в файловой системе на сервере или разместить в базе данных как объект типа blob (binary long object).

Если же это не тип «текст», необходимо преобразовать содержимое в строку Unicode для дальнейшего использования в VBScript.

Содержимое также добавляется к объекту dictionary.

В конце концов объект dictionary должен быть добавлен к глобальному объекту dictionary всей формы.

Функция преобразования однобайтовых строк в двухбайтовые (формата Unicode).

Функция преобразования строки в строку байтов (используется для форматирования аргументов для функции InstrB).

Вызов скрипта загрузки

Извлечение данных формы

Загруженные таким образом данные можно, к примеру, переслать обратно клиенту:

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

Однако, как правило, в случае если объект представляет собой файл, необходимо записать данные на жесткий диск в виде файла или записи в базе данных. С этой целью мы воспользуемся объектом FileSystem.

Каталог, в котором мы собираемся сохранить наш файл, может быть указан несколькими способами: абсолютным, а также относительно каталога, зарегистрированного на сервере в качестве корневого каталога Web-сайта (для IIS это каталог C:\InetPub\wwwroot\ по умолчанию). Получить этот «виртуальный» каталог можно при помощи серверной переменной «PATH_INFO».

Метод «Write», с помощью которого и будет осуществляться запись в файл, требует ввода unicode-строки в качестве аргумента, и нам потребуется преобразовать массив байтов в unicode-строку. Метод Write преобразовывает эту Unicode-строку и записывает ее в формате ASCII. Таким образом и формируется файл, содержащий двоичный образ нашей входной строки байтов:

Таким образом, окончательная версия обработчика нашей формы в случае применения только ASP и VBScript-функций (файл Upload2DBE.asp) для загрузки файла будет выглядеть следующим образом:

А теперь давайте попробуем сами разработать ActiveX-компонент…

Согласитесь, что было бы неплохо самим научиться создавать ActiveX-компоненты для ASP. Тем, кто активно программирует, освоить это будет очень несложно, тем более что для этого подходят почти все современные средства разработки. Мы будем рассматривать способы создания ActiveX-компонентов для ASP как на Microsoft Visual Basic 6.0 — для неискушенных в области классического программирования, так и в Microsoft Visual C++ 6.0 — для тех, кто знаком с языком программирования C++ и кому он ближе и понятнее.

…с помощью Microsoft Visual Basic 6.0

Для начала попробуем создать активный серверный компонент для загрузки файла на сервер с помощью Microsoft Visual Basic 6.0. Для простоты рассматрим простейший пример HTML-формы загрузки файла (файл OCUpload.htm).

Данная форма предназначена для загрузки на сервер единственного файла. Определим также скрипт-реакцию на эту форму: ACTION=»UploadReceive.asp»

Соответственно вызов активного серверного компонента из ASP-скрипта (файл UploadReceive.asp) будет выглядеть следующим образом:

Функцией компонента, который мы собираемся создавать, будут являться разбор HTTP-заголовка получения для имени файла и сохранение файла на сервере в определенном каталоге. Для этого выполним следующую последовательность операций:

  1. Запустим Microsoft Visual Basic 6.0;
  2. В появившемся диалоговом окне выберем «ActiveX DLL»;
  3. Нажмем на «Open»;
  4. В окне инспектора проекта, выделив имя проекта, нажмем правую кнопку мыши и выберем пункт «Project1 Properties»;
  5. Поменяем имя проекта на «UploadProject» и нажмем на «ОК»;
  6. Выбрав класс «Class1», в окошке пониже перепечатаем имя класса с «Class1» на «UploadClass»;
  7. После открытия проекта войдем в пункт меню Project -> References;
  8. Установим флажок напротив пункта «Microsoft Active Server Pages Object Library»;
  9. Нажмем на «OK»;
  10. В окне кода класса впечатать функцию «DoUpload».

Как и у любого компонента, используемого в ASP, необходимо определить контекстные объекты скрипта, которые мы собираемся использовать в нашем проекте. Мы «перехватим» объекты в функции «OnStartPage». А поскольку нам понадобится лишь ASP-метод «Request», то это единственный контекстный объект, который мы сделаем доступным. Так выглядит код определения контекста процедуры загрузки, которую мы будем создавать:

Таким образом, мы можем использовать объектную переменную «MyRequest» точно так же, как если бы мы использовали любой Request-объект в ASP-файле. В нашем случае мы применяем ASP-файл (UploadReceive.asp) для управления ActiveX-компонентом. Для того чтобы использовать любой ASP-объект и его свойства в коде, мы должны передавать ASP-объект нашему компоненту вышеприведенным фрагментом кода. Мы будем использовать лишь два Request-метода ASP: «TotalBytes» и «BinaryRead».

Однако следует учитывать одно важное ограничение. Так как мы будем считывать данные (содержимое) файла при помощи функции «BinaryRead», то не следует забывать, что в этом случае использовать метод «Request.Form» нельзя. Иначе говоря, мы можем получить данные о нашем файле исключительно с помощью функции «BinaryRead». Однако, как будет показано ниже, это не создаст видимых трудностей при считывании имени или других атрибутов.

Как уже отмечалось выше, заголовок HTTP, посылаемый «multipart/form-data»-формой, включает в себя блоки, содержащие данные элементов формы. Мы будем извлекать первую часть заголовка HTTP (первый его блок), так как в нашем случае поле типа «файл» расположено в форме первым. Далее мы считаем его в строку, откуда извлечем имя файла, используя для этого VB-функцию «InStr» и цикл. Извлечь содержимое файла (сами данные) гораздо проще.

Теперь подошло время создания главной процедуры загрузки файла — «DoUpload». Объявим публичную функцию:

Public Sub DoUpload()

Прежде всего нам предстоит определить количество посланных клиентом байтов. А поскольку переменная «TotalBytes» есть константа, то мы присвоим ее значение объявленной нами переменной «varByteCount».

Теперь можно заняться и «сбором» данных, считывать которые посредством вызова функции «BinaryRead» мы будем в массив типа «Byte», а извлеченные данные помещать в массив «binArray». Размерности массива «binArray» мы переопределим в соответствии с размерностью наших данных следующим образом:

Итак, нам удалось вычленить данные из HTTP-заголовка. Теперь попробуем извлечь из полученных данных имя посланного нам клиентом файла. Для этого необходимо «разобрать» полученную строку байтов стандартными функциями операций со строками.

Заголовок HTTP располагается в самом начале нашего массива байтов. Цикл «Do Until» просматривает этот массив до тех пор, пока не обнаружит два последовательно идущих символа перевода строки, которые и обозначают конец блока параметров и одновременно начало данных файла. Каждый повтор цикла добавляет к строке «strHeadData» один байт. По окончании цикла мы получим пару <имя_элемента, значение_элемента>в отдельной строке «strHeadData». Эта пара может выглядеть следующим образом:

Сам процесс «извлечения» имени файла реализуем в несколько шагов следующим образом:

Найдя в ней значение «filename=», увеличим значение указателя на 10, таким образом переместившись в необходимую нам позицию. Сейчас мы находимся на позиции начала имени файла в строке.

Для того чтобы найти символ конца имени файла в строке, поищем первый символ «CR LF» с помощью функции «intFileTagStart»:

Совсем неплохо было бы выяснить, ввел ли пользователь значение. Конечно, это следовало сделать гораздо раньше, и не в ActiveX-модуле, а средствами VBScript, или JavaScript непосредственно в модуле формы (как это было показано ранее), или, на худой конец, с помощью самого ASP, но все-таки настоятельно рекомендую писать код активных серверных компонентов таким образом, чтобы обеспечить независимость от тех, кто в дальнейшем будет их использовать, то есть обеспечить универсальность и защиту «от дурака»:

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

Переместимся на следующий разделитель (то есть на конец текущего блока)

и сохраним данные в файле в корневом (или любом другом) каталоге на жестком диске «C:».

Полный файл-архив проекта с рассмотренным примером можно найти на нашем CD-ROM.

… с помощью Microsoft Visual C++ 6.0

А зачем, собственно, нужен C++? Ведь, в конце концов, Visual Basic намного проще, и процесс создания COM-компонентов с его помощью занимает гораздо меньше времени. Занимаясь разработкой чего бы-то ни было на C++, мы увеличиваем как стоимость, так и время разработки. К сожалению, это мнение в последнее время высказывается все чаще. Однако не следует забывать, что, несмотря на все эти казалось бы резонные доводы, среди всевозможных языков программирования и описания сценариев (VB, Java, ASP и так далее) C++ остается чемпионом по скорости выполнения и эффективности кода. И хотя выигрыш этот кажется невеликим при сравнении компонента для одного клиента, в реальной Web-обстановке, когда клиентов сотни, а порой даже тысячи и сотни тысяч и вычислительная нагрузка на серверы растет в геометрической прогрессии, этот выигрыш колоссален. Пара строк ASP-кода, обрабатывающая длинные строки символов, выглядит великолепно на сервере с небольшим числом клиентов, но может «поставить на колени» сервер с множеством клиентов.

Отсюда мораль: самые «узкие» места целесообразно разрабатывать на каком-нибудь языке программирования вроде C++, а ASP использовать в качестве «клея» между быстро работающими ActiveX-компонентами, созданными с его помощью. Но хватит слов, давайте перейдем к делу. Для того чтобы посвятить читателя в азы разработки ActiveX-компонента и его применения в нашем газетном сайте, предусмотрим следующую функцию.

Пусть у пользователя будет возможность просматривать содержимое каталога «C:\InetPub\wwwroot\Articles», то есть список всех файлов этой папки на сервере, причем с возможностью просмотра каждого файла в отдельности. Первое, что приходит в голову в этом случае, это страница, формируемая с помощью ActiveX-компонента, возвращающего список файлов заданного каталога. Сформируем этот компонент прямо сейчас, используя Microsoft Visual C++ 6.0.

Итак, надеюсь, вы уже запустили MSVC. Для начала создайте новый проект, в появившемся диалоговом окне укажите его тип («ATL Com AppWizard») и задайте имя. Назовем его «Dir» — в честь популярной команды MS-DOS.

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

Как вы, наверное, заметили, во втором диалоге MSVC предупреждает о том, что мастер создает лишь ATL-проект и что по завершении его работы понадобится вручную создавать COM-объект в его составе. А сделать это можно следующим образом.

После выбора в появившемся меню строки «New ATL Object…» появится диалоговое окно, в котором необходимо будет уточнить тип создаваемого ActiveX-объекта, а именно активный серверный компонент («ActiveX Server Component»).

Теперь необходимо определить имена создаваемого класса и исходных файлов. Пусть наш класс называется «FilesList». Если вы введете это имя в соответствующем поле следующего диалога, то увидите следующее окно.

Следует уделить внимание двум другим вкладкам этого диалога: «Attributes» и «ASP». Перейдя во вкладку «Attributes», можно, в частности, определить поточную модель разрабатываемого COM-компонента. Вкладка «ASP» позволяет определить, какие объекты самого ASP будут доступны из разрабатываемого компонента, то есть указатели, на какие объекты ASP будут создаваться в реализации (implementation) самого компонента.

Следует также заметить, что конструирование указателей на внутренние (Intrinsic) объекты ASP производится в конструкторе компонента OnStartPage (не путать с одноименной функцией файла Global.asa), деструктурирование — в деструкторе OnEndPage, без применения которых доступ к внутренним объектам ASP будет закрыт, поэтому галочка в поле OnStartPage/OnEndPage должна быть выставлена. Реально в разрабатываемом компоненте нам необходим лишь объект ASP «Response», однако в целях обучения выделим все объекты. После всех проделанных операций рекомендую сохранить проект.

Как видно, MSVC создал функции OnStartPage и OnEndPage в IfilesList в нашем объекте CfilesList. Посмотрим полученный код:

Далее необходимо добавить функцию, которая и будет выполнять необходимые нам действия. Напишем ее:

Не забудьте прописать заголовок нашей новой функции WriteDir в файле FilesList.h в разделе Active Server Pages Methods public сразу за объявлениями функций OnStartPage и OnEndPage:

Кроме того, мы использовали функции «_findfirst» и «_findnext», а также структуру, которую они заполняют. Все эти компоненты объявлены вo включаемом файле «io.h», поэтому не забудьте включить и его, что удобно сделать в файле «StdAfx.h».

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

Итак, нам осталась самая малость. Написать ASP-скрипт, который, используя функцию «WriteDir», выведет в окне клиента список всех файлов каталога с погруженными статьями и иллюстрациями к ним нашего газетного сайта со ссылками на них (файл Dir.asp):

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

Полный файл-архив проекта с рассмотренным примером находится на нашем CD-ROM.

Еще несколько слов в защиту C++

Компилируемые языки программирования, такие как Visual C++, Borland C++ или Delphi, используют исходный текст для генерации машинного кода (набора машинных команд). В результате формируется набор инструкций, к которым вычислительная машина может обращаться напрямую (отсутствует необходимость в использовании каких бы то ни было препроцессоров, «до-компиляторов» и так далее) и которые поэтому выполняются очень быстро.

Интерпретируемые языки программирования, такие как Visual Basic и J++, в техническом смысле не компилируются. Конечно, в результате компиляции получается выполняемый модуль или библиотека, но это не машинный код. Вместо него, попросту говоря, используется объектный код, который интерпретируется в машинный во время выполнения самой команды, что, безусловно, требует большей вычислительной мощности от процессора.

Кроме «скоростного» фактора нельзя забывать об уникальных возможностях, предоставляемых такими языками, как C++ и Pascal (Delphi). Они, как никакие другие, активно используют объектно-ориентированные концепции в программировании (технологии OOP и OOD), которые позволяют не терять контроль над кодом при разработке больших проектов и осуществлять переносимость целых классов функций. Конечно, с точки зрения новичка все это может показаться сложным и недоступным, но, поверьте, это не так.

Ничего не имея против использования Visual Basic для обучения, разрабатывать COM-объекты, встраиваемые в ASP-страницы, с его помощью я все же не советую.

Заключение

Хотелось бы сориентировать разработчиков ASP-страниц в мире ASP-компонентов. Дело в том, что автор настоящей статьи провел не один день, сидя за Интернетом в поисках всевозможных ASP-компонентов для решения всевозможных задач.

AspUpload 2.0 Copyright — загрузка файлов на сервер в online-режиме — (c) 1998-2000 Persist Software, Inc. (http://www.persits.com). Временная одномесячная версия лежит на нашем CD-ROM.

XUpload 2.0 Copyright — загрузка каталогов на сервер в online-режиме с поддержкой множества интересных функций (drag-and-drop и т.п.) — (c) 1998-2000 Persist Software, Inc. (http://www.persits.com). Временная версия лежит на нашем CD-ROM.

ASP E-mail 4.4 — довольно полезный компонент для работы с электронной почтой лежит на нашем CD-ROM.

Желающим скачать множество полезных активных серверных компонентов для их использования в ASP советую посетить:

Илон Маск рекомендует:  Как сделать Drag and Drop Images
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL