Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Базы данных и ActiveX.


➲перейти к началу ➲перейти к концу
Практическая работа с Visual Studio.Net и Microsoft Office

Статистика
Номер выпуска рассылки 9
Дата выпуска рассылки 2006-06-19
Время выпуска рассылки 13:05:41
Возраст рассылки в днях 135
Количество подписчиков 1210
Динамика подписчиков за вчера +1
Динамика подписчиков за неделю +22

Оглавление

Практическая работа с Visual Studio.Net
Практическая работа с Microsoft Office
Web-технология
Создание реальных проектов
Вопросы и ответы

Базы данных и ActiveX. В этом выпуске содержится краткое описание баз данных, технологии ActiveX, а так же немного юмора и размышлений о настоящем программировании.
Практическая работа с Версия
Visual Studio.Net 2003

Краткий обзор архитектуры ADO.NET.

Для чего же нужна ADO.NET? Естественно, как и COM разработка ADO (Microsoft ActiveX Data Objects), она служит для работы с базами данных. ADO.NET более новая технология, и отличается от ADO. Для того чтобы программистам не было необходимости переучиваться по-новому, ADO.NET унаследовала основные принципы работы от своей предшественницы. К тому же она принадлежит библиотекам .NET Framework, что тоже вносит свои поправки. В общем, ADO.NET не ADO, так же как и ASP.NET не ASP. С другой стороны, если добиваться одного и того же разными способами, будет ли настоящее важно? Думаю, нет, более того это выбор каждого программиста, однако как я уже говорил, ADO.NET от .NET Framework - следующее поколение методов работы с базами данных и предоставляет несколько больше возможностей, чем COM разработка ADO.

Microsoft .NET Framework SDK (включая ADO.NET) поддерживается на операционных системах:

  • MicrosoftR WindowsR XP
  • MicrosoftR WindowsR 2000
  • MicrosoftR Windows NTR 4 with Service Pack 6a
  • MicrosoftR WindowsR Millennium Edition
  • MicrosoftR WindowsR 98
  • MicrosoftR WindowsR SE

В данном случае перечисляются ОС относящиеся к группе Workstation, а не Server, но это вовсе не значит, что технология не сработает на последних. К тому же необходимо учитывать появление новых версий ОС, имеется в виду MicrosoftR WindowsR Vista и так далее.

Какие же новые возможности мы приобретаем с ADO.NET, или какие старые наследуем? Прежде всего, нужно отметить способы работы с базами данных. ADO.NET:

Таблица: "Способы работы с ADO.NET"
Способ Используются составляющие
Присоединённый Data Providers (Поставщики Данных)
Отсоединённый DataSet (Набор Данных)

Как видите их всего два, но они используют разные принципы. Отсоединённый или по-другому - разъединённый способ использует класс DataSet. Суть этого метода работы заключается в том, что соединение с базами данных происходит только для того, чтобы получить или обновить их содержимое. Сами же действия производятся на объекте DataSet. Присоединённый способ использует поставщиков данных, которые подключаются и держат соединение во время всей работы с базами данных. Даже если вы установите соединение с БД, прочтёте и/или измените данные, а потом сразу его разорвёте, это все равно будет считаться за соединённый способ работы. Всё потому, что ваши действия немедленно будут передаваться базе данных, ну или почти немедленно, тут есть свои особенности. Главное в том, что изменять вы все равно будете память базы, а не объект DataSet, хранящийся на вашем компьютере, и обновляющимся или обновляющим БД только по команде. Прежде чем продолжить, внимательно посмотрите на приведённый рисунок, он поможет вам понять, как оба способа взаимодействуют с базами данных на практике:

Рисунок: ".NET Framework Data Provider"

Как видно из приведённой схемы, существует две главных составляющих ADO.NET. Первая это .NET Framework Data Provider и вторая DataSet. В свою очередь .NET Framework Data Provider содержит классы Connection, Command, DataReader и DataAdapter. Обратите внимание на то, что они содержатся в залитых светло-голубым цветом рамках.

К примеру, вам захотелось прочитать данные из базы данных, в таком случае: Что же лучше всего использовать DataReader (присоединённый способ) или DataSet (отсоединённый способ)?

    За DataSet выступают следующие соображения:
  • Удалённые данные между рядами (строки в таблицах) или от Web службы XML.
  • Взаимодействие с динамическими данными, такими как связывание элементов управления Windows Forms или сочетания и соотнесения данных от множественных источников.
  • Локальные данные в вашем приложении находятся в КЭШе (сверхоперативной памяти).
  • Обеспечение иерархического вида XML относительных данных и использование инструментов подобных XSL Transformation или XML Path Language (XPath) Query на ваших данных.
  • Исполняется обширная обработка на данных без требования открытого соединения (имеется в виду - удержание соединения в открытом состоянии) с источником данных, которые освобождают соединение для будущего использования другими клиентами.
    За DataReader следующие:
  • Необходимость чтения локальных данных программы прямо из базы данных, то есть проход по БД будет осуществляться напрямую.
  • Экономия памяти, так как DataReader не нуждается в заполнении содержимого DataSet.
  • Более высока скорость получения данных. Работает быстрее потому же, что и в предыдущем пункте, но недостаток в том, что чтение идёт в режимах только-вперёд и только-чтение.

Использование поставщиков данных .NET Framework для доступа к данным.

Поставщики данных (data providers) в .NET Framework служат как мост между приложением и источником данных. Они используются для восстановления данных из источников данных, а так же для регулирования изменений внесенных назад в источники данных. Следующая таблица покажет вам существующие поставщики данных в .NET Framework:

Таблица: ".NET Framework Data Provider"
Предназначение (для ...) Пространства имён Приставка к имени классов Описание
SQL Server System.Data.SqlClient Sql Для MicrosoftR SQL ServerT версии 7.0 или более поздней.
OLE DB System.Data.OleDb OleDb Для источников данных разоблачаемых используя OLE DB.
ODBC System.Data.Odbc Odbc Для источников данных разоблачаемых используя ODBC.
Oracle System.Data.OracleClient Oracle Для источников данных Oracle. Поставщики данных .NET Framework для Oracle, поддерживают клиентское программное обеспечение версии 8.1.7 или более поздней.

Примечание: ODBC и Oracle не поддерживаются в.NET Framework версии 1.0, для этого вам придётся установить 1.1 или более позднюю.

В привёденной мною таблице пространства имён даны для осуществления работы в клиентском режиме. Хотя и так понятно, что там, где в конце дописано слово Client (заказчик), работа может осуществляться и как Server (служба). Впрочем, это не важно, так как пока я все равно не буду использовать дополнительные службы. А то, как говорится в русской поговорке "за двумя зайцами погонишься - разорвёт надвое". В первую очередь, я имел в виду, что не буду использовать SQL Server и ограничусь OLE DB. Хоть OLE DB медленнее, зато обладает большими функциональными возможностями и поддерживает большинство известных форматов. Так же возможно будет рассмотрен ODBC, но это дело будущего.

Каждый поставщик данных имеет четыре класса составляющих ядро для успешной работы с источниками данных. Об этом уже говорилось выше, теперь же стоит только отметить, что в пространствах имён поставщиков каждый класс имеет дополнительную приставку в названии, чтобы программистам было удобнее их отличать и в тоже время не путаться в функциональном назначении. К примеру, класс DataReader для OLE DB будет называться OleDbDataReader (см. таблицу выше).

Таблица: "Классы ядра .NET Framework Data Provider"
Объект Описание
Connection Устанавливает соединение с определённым источником данных.
Command Выполняет команду против источника данных.
DataReader Считывает поток данных в режимах только-вперёд и только-чтение из источника данных.
DataAdapter Заполняет DataSet и решает вопрос обновления источника данных.

Помимо этого существуют и другие классы для работы с .NET Framework Data Provider. Ниже я привожу таблицу, хотя она не совсем полная. Дело в том, что каждый поставщик данных имеет свои особенности, отчасти под ними я и подразумеваю большую функциональность.

Таблица: "Другие классы .NET Framework Data Provider"
Объект Описание
Transaction Даёт вам возможность завербовать команды в транзакциях (действия из вне) в источнике данных.
CommandBuilder Вспомогательный объект, который автоматически генерирует свойства команды DataAdapter или извлекает информацию параметра из сохраненной процедуры и заполняет коллекцию Parameters объекта Command. .
Parameter Определяет ввод, вывод и возврат значения параметров команд и сохранённых процедур.
Exception Возвращается, когда сталкиваются с ошибкой в источнике данных. Для столкновения с ошибкой в клиенте, поставщик данных .NET Framework запускает исключение .NET Framework.
Error Делает доступной информацию, возвращённую как предупреждение (warning) или ошибку (error) источником данных.
(Client)Permission Обеспечивает поставщик данных .NET Framework принадлежностью защиты доступа кода.

На этом краткое знакомство с архитектурой ADO.NET подходит к концу. Рекомендую ещё раз просмотреть рассылку, особенно это касается прилагаемого рисунка. Если у вас развита наблюдательность, то вы многое сможете из него понять, даже если до этого никогда не сталкивались с обсуждаемой сегодня темой.

перейти к оглавлению

Практическая работа с Версия
Microsoft Office 2003

Технология ActiveX.

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

  • ActiveX client (Заказчик ActiveX) Любая программа или часть кода, который обращается к функциональным возможностям и содержанию ActiveX или объекта OLE.
  • ActiveX component (Составляющая ActiveX) Физический файл, который содержит классы, которые являются определениями объектов. Например, .dll, .exe или .ocx файл.
  • ActiveX control (Элемент управления ActiveX) Созданный элемент интерфейса пользователя, использующий технологию ActiveX.
  • ActiveX Object (Объект ActiveX) Объектные приложения или программные инструменты, разоблачающие ActiveX client.

Вот, собственно говоря, и всё. Для работы с ActiveX в Microsoft Office вы создаёте документ (*.doc, *.xls, *.mdb и так далее). В данном случае он будет являться ActiveX client. Интересно, что хоть сами эти файлы - обычные хранилища данных, и для их запуска необходимо использовать программы входящие в состав Microsoft Office, что в свою очередь заставляет задуматься, а не исполнители ли в таком случае ActiveX client? И, тем не менее, нет, определение сформулировано чётко. Будь то программа, которая может быть частью файла, файлом, набором файлов, или прочие взаимодействующие куски кода, но именно они, а не то, что заставляет их работать являются ActiveX client. В противном случае считать заказчиком можно даже Windows, что согласитесь, лишает данный термин конкретного смысла.

Далее мы должны задействовать ActiveX control, как следует из определения - это элемент интерфейса пользователя. В одном ActiveX component может быть множество ActiveX control, поэтому обращаться нужно не к конкретному физическому файлу, а к зарегистрированному в реестре элементу управления. Впрочем, всё это частности. Microsoft Office позволяет, не напрягаясь сразу включить в ваш документ ActiveX Object. Так же можно воспользоваться функцией VBA.Interaction.CreateObject(class,[servername]). Выбор способа задания объекта зависит в основном от того, чего вы в итоге хотите добиться. К примеру, если объект должен быть отображён на форме, отчёте и прочем, то лучше не мудрить с функциями. А вот если этого не нужно, а напротив даже нежелательно, то функция CreateObject самое то. Вариантов множество, и поэтому в каждом конкретном случае выбор остаётся за вами.

Для именования объектов в Visual Basic 6.x принято использовать венгерскую запись. Если у вас установлена MSDN 2004, то вы сможете воспользоваться данной ссылкой. Такой подход поможет стандартизировать программу. Вам будет намного легче ориентироваться во множестве объектов. К примеру, некий код может выглядеть так:

Visual Basic 6.3
Dim dbBiblio As Database
Dim recPubsInNY As Recordset, strSQLStmt As String
Const DB_READONLY = 4                  ' Set constant.
'Open database.
Set dbBiblio = OpenDatabase("BIBLIO.MDB")
' Set text for the SQL statement.
strSQLStmt = "SELECT * FROM Publishers WHERE _
   State = 'NY'"
' Create the new Recordset object.
Set recPubsInNY = db.OpenRecordset(strSQLStmt, _
   dbReadOnly)

А чтобы не "изобретать велосипед" приведу общепринятые приставки.

Таблица: "Предложенные приставки для элементов управления"
Тип элемента управления Приставка Пример
3D Panel pnl pnlGroup
ADO Data ado adoBiblio
Animated button ani aniMailBox
Check box chk chkReadOnly
Combo box, drop-down list box cbo cboEnglish
Command button cmd cmdExit
Common dialog dlg dlgFileOpen
Communications com comFax
Control (type is unknown) ctr ctrCurrent
Data dat datBiblio
Data-bound combo box dbcbo dbcboLanguage
Data-bound grid dbgrd dbgrdQueryResult
Data-bound list box dblst dblstJobType
Data combo dbc dbcAuthor
Data grid dgd dgdTitles
Data list dbl dblPublisher
Data repeater drp drpLocation
Date picker dtp dtpPublished
Directory list box dir dirSource
Drive list box drv drvTarget
File list box fil filSource
Flat scroll bar fsb fsbMove
Form frm frmEntry
Frame fra fraLanguage
Gauge gau gauStatus
Graph gra graRevenue
Grid grd grdPrices
Hierarchical flexgrid flex flexOrders
Horizontal scroll bar hsb hsbVolume
Image img imgIcon
Image combo imgcbo imgcboProduct
ImageList ils ilsAllIcons
Label lbl lblHelpMessage
Lightweight check box lwchk lwchkArchive
Lightweight combo box lwcbo lwcboGerman
Lightweight command button lwcmd lwcmdRemove
Lightweight frame lwfra lwfraSaveOptions
Lightweight horizontal scroll bar lwhsb lwhsbVolume
Lightweight list box lwlst lwlstCostCenters
Lightweight option button lwopt lwoptIncomeLevel
Lightweight text box lwtxt lwoptStreet
Lightweight vertical scroll bar lwvsb lwvsbYear
Line lin linVertical
List box lst lstPolicyCodes
ListView lvw lvwHeadings
MAPI message mpm mpmSentMessage
MAPI session mps mpsSession
MCI mci mciVideo
Menu mnu mnuFileOpen
Month view mvw mvwPeriod
MS Chart ch chSalesbyRegion
MS Flex grid msg msgClients
MS Tab mst mstFirst
OLE container ole oleWorksheet
Option button opt optGender
Picture box pic picVGA
Picture clip clp clpToolbar
ProgressBar prg prgLoadFile
Remote Data rd rdTitles
RichTextBox rtf rtfReport
Shape shp shpCircle
Slider sld sldScale
Spin spn spnPages
StatusBar sta staDateTime
SysInfo sys sysMonitor
TabStrip tab tabOptions
Text box txt txtLastName
Timer tmr tmrAlarm
Toolbar tlb tlbActions
TreeView tre treOrganization
UpDown upd updDirection
Vertical scroll bar vsb vsbRate

Или вот ещё приставки для Data Access Objects.

Таблица: "Предложенные приставки для Data Access Objects (DAO)"
Объект базы данных Приставка Пример
Container con conReports
Database db dbAccounts
DBEngine dbe dbeJet
Document doc docSalesReport
Field fld fldAddress
Group grp grpFinance
Index ix idxAge
Parameter prm prmJobCode
QueryDef qry qrySalesByRegion
Recordset rec recForecast
Relation rel relEmployeeDept
TableDef tbd tbdCustomers
User usr usrNew
Workspace wsp wspMine

Именование объектов ActiveX, да и не только их, не пустой звук. Это неотъёмлемая часть программирования, которая влияет на качество и скорость кодирования программы. В именах не нужно лишнего творчества, чаще это вредит, нежели помогает. Старайтесь универсализировать свой код и возможно вы лучше станете понимать чужие творения.

перейти к оглавлению

HTML, ASP, VBScript Версия
Web-технология 5.0

Урок 1. Создание ASP-страницы

Лучшим способом изучения ASP является рассмотрение примеров. Изменяйте целые значения, строки и инструкции, которые вас интересуют, и наблюдайте за изменениями в обозревателе.

На этом уроке выполняются следующие примеры.

  • Пример 1 Создание, сохранение и выполнение ASP-страницы с использованием языков HTML и VBScript.
  • Примеры 2, 3 и 4 Расширение функциональности и логики ASP-страницы с использованием встроенных функций и условных операторов языка сценариев.

Языком сценариев по умолчанию для создания ASP-страниц является VBScript, однако и в языке JScript используются те же ограничители. Как и на любой странице .htm в качестве ограничителей HTML-тегов используются угловые скобки:

<пример></пример>

Знак процента со скобками используется в качестве ограничителя текста сценария:

<% пример %>

Между двумя ограничителями можно располагать несколько инструкций сценария:

<font face="MS Gothic">
<%
'Создание переменной.
dim strGreeting

'Установка приветствия.
strGreeting = "Привет всем!"

'Вывод приветствия с использованием ASP-объекта Response.
Response.Write strGreeting & "<BR>"

'Вывод приветствия с использованием метода <%=.
%>
<%=strGreeting%>
</font>

Этот сценарий выведет в окне обозревателя следующий текст:

Привет всем!
Привет всем!

Предыдущий пример на языке JScript:

<%@ Language=JScript %>

<font face="MS Gothic">
<%
//Создание переменной.
var strGreeting;

//Установка приветствия.
strGreeting = "Привет всем!";

//Вывод приветствия с использованием ASP-объекта Response.
Response.Write(strGreeting + "<BR>");

//Вывод приветствия с использованием метода <%=.
%>
<%=strGreeting%>
</font>

Для создания ASP-страниц используйте текстовый редактор (например <Блокнот>) и сохраняйте файлы страниц с расширением .asp вместо .htm. Расширение .asp говорит серверу IIS о том, что перед отправкой страницы клиенту ее необходимо передать обработчику ASP. (Примечание. Если в диалоговом окне Сохранение редактора <Блокнот> в списке Тип файла выбран пункт Текстовые документы, к имени файла автоматически добавляется расширение .txt. Чтобы избежать этого, в списке Тип файла выберите пункт Все файлы, затем в поле Имя файла введите полное имя файла MyFile.asp и нажмите кнопку Сохранить.)


Пример 1

В этом примере выводится приветствие, а также дата и текущее время. Для выполнения этого примера скопируйте следующий текст в пустой файл через буфер обмена и сохраните этот файл в папке x:\Inetpub\Wwwroot\Tutorial с именем Example1.asp. Для просмотра примера введите адрес http://localhost/Tutorial/Example1.asp в адресную строку обозревателя.

<%@ Language=VBScript %>

<html>
<head>
<title>Пример 1</title>
</head>
<body>
<font face="MS Gothic">

<H1>Добро пожаловать на мою домашнюю страницу</H1>
<%
'Создание некоторых переменных.
dim strDynamicDate
dim strDynamicTime

'Получение даты и времени.
strDynamicDate = Date()
strDynamicTime = Time()

'Вывод приветствия с учетом времени путем сравнения двух последних знаков в строке strDymamicTime со строкой .
If "PM" = Right(strDynamicTime, 2) Then
Response.Write "<H3>Добрый день!</H3>"
Else
Response.Write "<H3>Доброе утро!</H3>"
End If
%>
Сегодняшняя дата: <%=strDynamicDate%>. Время: <%=strDynamicTime%>

</font>
</body>
</html>

При просмотре страницы в обозревателе она будет выглядеть примерно так (в зависимости от даты и времени выполнения упражнения):

Добро пожаловать на мою домашнюю страницу

Добрый день!

Сегодняшняя дата: 10/20/2000. Время: 7:29:50 PM


Примечание. Веб-сервер обрабатывает файл Example1.asp в следующей последовательности.

  1. Инструкция <%@ Language=VBScript %> является для обработчика ASP признаком того, что сценарий следует преобразовывать с помощью обработчика VBScript.
  2. Обработчик ASP пропускает блоки HTML-кода.
  3. Обработчик ASP выполняет инструкции внутри блоков <%...%> и заменяет эти блоки прототипами. Полученные строки Response.Write и <%=...%> сохраняются в памяти на сервере.
  4. Перед тем, как страница покидает обработчик ASP, полученные строки Response.Write и <%=...%> вставляются на место соответствующих прототипов в HTML-файле.
  5. Готовая страница принимается от обработчика ASP в виде файла с HTML-кодом и отправляется клиенту.

Пример 2

В данном примере для добавления некоторой динамики и логики на ASP-странице используется цикл For...Next. Цикл For...Next является одной из шести условных инструкций. Другими являются Do...Loop, For Each...Next, If...Then...Else...End If, Select..Case...End Select и While...Wend. Эти инструкции документированы на странице Windows Script Technologies в разделе VBScript.

Скопируйте следующий текст в текстовый редактор и сохраните его в файле Example2.asp. Для просмотра примера введите адрес http://localhost/Tutorial/Example2.asp в адресную строку обозревателя.

Порядок обработки страницы тот же, что и для Example1.asp.

<%@ Language=VBScript %>

<html>
<head>
<title>Пример 2</title>
</head>
<body>
<font face="MS Gothic">

<%
'Создание переменной.
dim strTemp
dim font1, font2, font3, font, size

'Установка значения переменной.
strTemp= "ПРИОБРЕТИТЕ НАШ ПРОДУКТ!"
fontsize = 0

'Вывод строки 5 раз с помощью цикла For...Next.
For i = 1 to 5

'Закрывающий ограничитель сценария - разрешение использования HTML-кода и <%=...
%>.
<table align=center><font size= <%=fontsize%>> <%=strTemp%> </font></table>
<%
fontsize = fontsize + i

Next

%>
<table align=center><font size=6><B> ОН СТОИТ ТОГО! <B></font></table><BR>

</font>
</body>
</html>

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

ПРИОБРЕТИТЕ НАШ ПРОДУКТ!
ПРИОБРЕТИТЕ НАШ ПРОДУКТ!
ПРИОБРЕТИТЕ НАШ ПРОДУКТ!
ПРИОБРЕТИТЕ НАШ ПРОДУКТ!
ПРИОБРЕТИТЕ НАШ ПРОДУКТ!
ОН СТОИТ ТОГО!

Пример 2 на языке JScript.

<%@ Language=JScript %>

<html>
<head>
<title>Пример 2</title>
</head>
<body>
<font face="MS Gothic">

<%
//Создание переменной.
var strTemp;
var font1, font2, font3, font, size;

//Установка значения переменной.
strTemp= "BUY MY PRODUCT!";
fontsize = 0;

// Вывод строки 5 раз с помощью цикла For...Next.
for (i = 1; i < 6; i++) {

// Закрывающий ограничитель сценария - разрешение использования HTML-кода и <%=...
%>.
<table align=center><font size= <%=fontsize%>> <%=strTemp%> </font></table>
<%
fontsize = fontsize + i;

}

%>
<table align=center><font size=6><B> ОН СТОИТ ТОГО! <B></font></table><BR>

</font>
</body>
</html>

Пример 3

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

В третьем примере готовая функция выводит на ASP-страницу дату и денежную единицу. Форматы вывода даты и денежной единицы изменяются для разных стран с помощью функций GetLocale, SetLocale, FormatCurrency и FormatDateTime. Идентификаторы языков перечислены в документе Locale ID Chart библиотеки MSDN. (В этом примере не выполняется изменение кодовой страницы (CodePage) для поддержки вывода неевропейских знаков на европейских операционных системах. Дополнительные сведения содержатся в разделах документации IIS, посвященных кодовым страницам.)

Примечание. VBScript поддерживает более 90 готовых функций. Все они подробно документированы на странице Windows Script Technologies. Для просмотра этой документации последовательно выберите ссылки VBScript, Documentation, Language Reference и Functions.

Скопируйте следующий текст в текстовый редактор и сохраните его в файле Example3.asp в каталоге x:\Inetpub\Wwwroot\Tutorial. Для просмотра примера введите адрес http://localhost/Tutorial/Example3.asp в адресную строку обозревателя.

<%@ Language=VBScript %>

<html>
<head>
<title>Пример 3</title>
</head>
<body>
<font face="MS Gothic">

<H3>Благодарим за приобретение. Рекомендуем распечатать эту страницу для отчета.</H3>
<%
'Создание переменных.
dim saveLocale
dim totalBill

'Установка значений переменных.
saveLocale = GetLocale
totalBill = CCur(85.50)

'Для каждой страны задать формат вывода даты и денежной единицы
SetLocale("fr")
Response.Write"<B>Формат для французского языка:</B><BR>"
Response.Write FormatDateTime(Date, 1) & "<BR>"
Response.Write FormatCurrency(totalBill) & "<BR>"
SetLocale("de")
Response.Write"<B>Формат для немецкого языка:</B><BR>"
Response.Write FormatDateTime(Date, 1) & "<BR>"
Response.Write FormatCurrency(totalBill) & "<BR>"
SetLocale("en-au")
Response.Write"<B>Формат для английского языка (Австралия):</B><BR>"
Response.Write FormatDateTime(Date, 1)& "<BR>"
Response.Write FormatCurrency(totalBill) & "<BR>"

'Восстановление исходных настроек
SetLocale(saveLocale)
%>

</font>
</body>
</html>

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

Благодарим за приобретение. Рекомендуем распечатать эту страницу для отчета.

Формат для французского языка:
vendredi 20 octobre 2000
85,50 F
Формат для немецкого языка:
Freitag, 20. Oktober 2000
85,50 DM
Формат для английского языка (Австралия):
Friday, 20 October 2000
$85.50

Пример 4

Наиболее часто используемыми в сценариях ASP функциями являются функции для работы со строками. Наиболее мощные строковые функции используют регулярные выражения. Поскольку к регулярным выражениям привыкнуть достаточно сложно, в четвертом примере показано, как можно выполнить замену знаков в строке с использованием как строкового выражения, так и регулярного выражения. Определение регулярных выражений можно найти в документации Windows Script Technologies. Для просмотра документации последовательно выберите ссылки VBScript, Documentation, Regular Expressions Guide.

Скопируйте следующий текст в текстовый редактор и сохраните его в файле Example4.asp в каталоге x:\Inetpub\Wwwroot\Tutorial. Для просмотра примера введите адрес http://localhost/Tutorial/Example4.asp в адресную строку обозревателя.

<%@ Language=VBScript %>

<html>
<head>
<title>Пример 4</title>
</head>
<body>
<font face="MS Gothic">

<H3>Изменение адреса заказчика</H3>
<%
'Создание переменных.
dim strString
dim strSearchFor ' как строка
dim reSearchFor ' как регулярное выражение
dim strReplaceWith

'Установка значений переменных.
strString = "Jane Doe<BR>100 Orange Road<BR>Orangeville, WA<BR>98100<BR>800.555.1212<BR>"
' С использованием объекта-строки
strSearchFor = "100 Orange Road<BR>Orangeville, WA<BR>98100"
' С использованием объекта-регулярного выражения
Set reSearchFor = New RegExp
reSearchFor.Pattern = "100 Orange Road<BR>Orangeville, WA<BR>98100"
reSearchFor.IgnoreCase = False

strReplaceWith = "200 Bluebell Court<BR>Blueville, WA<BR>98200"

'Проверка существования strSearchFor...
' с использованием объекта-строки.
If Instr(strString, strSearchFor) Then
Response.Write "Строка strSearchFor найдена в strString<BR>"
Else
Response.Write "Ошибка"
End If
' с использованием объекта-регулярного выражения.
If reSearchFor.Test(strString) Then
Response.Write "Строка reSearchFor.Pattern найдена в strString<BR>"
Else
Response.Write "Ошибка"
End If

'Replace the string...
Response.Write "<BR>Исходная строка:<BR>" & strString & "<BR>"
' с использованием объекта-строки.
Response.Write "Строка после замены strSearchFor:<BR>"
Response.Write Replace(strString, strSearchFor, strReplaceWith) & "<BR>"
' с использованием объекта-регулярного выражения.
Response.Write "Строка после замены reSearchFor:<BR>"
Response.Write reSearchFor.Replace(strString, strReplaceWith) & "<BR>"
%>

</font>
</body>
</html>

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

Изменение адреса заказчика

Строка strSearchFor найдена в strString
Строка reSearchFor.Pattern найдена в strString

Исходная строка:
Jane Doe
100 Orange Road
Orangeville, WA
98100
800.555.1212

Строка после замены strSearchFor:
Jane Doe
200 Bluebell Court
Blueville, WA
98200
800.555.1212

Строка после замены reSearchFor:
Jane Doe
200 Bluebell Court
Blueville, WA
98200
800.555.1212

перейти к оглавлению

От начала и до конца Ставим
Создание реальных проектов опыты

Комментарии о программистах.

Сегодня, в этой рубрике я решил прокомментировать статью от Softpanorama v.36. На это действие меня навела небезосновательная идея, что большинство возникающих мыслей уже кем-то были продуманы и вероятней всего даже занесены в источники знаний, такие как книга, электронный документ и так далее. В таком случае, зачем говорить то же самое, но другими словами? Лучше уж я выражу свои размышления в комментариях к уже существующим утверждениям.


Основные Отличия Настоящего Программиста.

Настоящий Программист лучше знает, что нужно пользователю.

Похоже данное высказывание относится к вопросу о программисте - создателе программ и заказчике. Представим такую ситуацию. К программисту приходит заказчик и говорит мне нужно то-то и то-то. На что у программера два варианта действия.

  1. Он пишет программу сразу, не спрашивая заказчика о том, какие компоненты ему применить.
  2. Следуют множества вопросов, к примеру, таких. Нужно ли здесь сделать так, а вот тут иначе? Необходима ли такая возможность или обойтись без неё? Применить ли здесь данную технологию или сойдёт более старая версия? И так далее и тому подобное.
Как вы думаете, понравится ли заказчику, плохо разбирающемуся в программировании второй вариант? С одной стороны вопросы вроде бы необходимы, но в идеале лучше вообще обойтись без них. Конечно, в первом случае действий кое-что может быть упущено, но на то настоящий программист и настоящий, что знает о том, что нужно пользователю и/или заказчику лучше чем он сам.

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

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

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

Затронуто мастерство программиста, ведь комментариями будет пользоваться только он. С одной стороны правильно, с другой нет. Блок функции иногда неплохо делить на подблоки, которые в будущем могут стать отдельными функциями, и естественно это делается комментариями. С другой стороны высказывание не отрицало использование комментариев как таковых. Очень наглядный в данном случае пример, когда они используются для отладки кода или тот же TODO, помогающий перейти в то место где должен быть написан код. В итоге вывод такой "Программист никогда не пишет комментариев в своих программах для разъяснения кода". На мой независимый взгляд если программист настоящий, то ему не помещают ни комментарии, ни их отсутствие.

Настоящий Программист никогда не пишет документацию к программе, т.к. она нужна лишь тем, кто неспособен понять программу по листингу или перфоленте.

Замечу, что в данном случае имеется в виду не руководство программы, которое обучает правильному использованию её самой, а документация на код. Листинг в перфоленте? Забавно, но что делать если это dll-библиотека, то есть закрытый код (в противоположность открытому коду, такому как скрипты и так далее). По мне так тот, кто быстро поймёт данный код и методы его дальнейшего использования в программировании по результату дизассемблирования, уже не просто настоящий программист, это профи запредельшик. Такой человек сможет запросто написать собственную операционную систему. Так что оставлю данное высказывание на совести самих авторов.

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

Не согласен, настоящий программист должен не только уметь кодировать любые виды программ, но и собственно говоря, производить этот самый процесс. А то выходит так "Я могу, но не делаю, потому что это слишком для меня просто. И даже если это будет необходимо, то я все равно до такой мелочи не опущусь.". Ну и кто же в таком случае слабак? Раз не написал программу, значит не смог. Раз не смог, значит ничем не лучше слабака.

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

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

Настоящий Программист никогда не работает с 9 утра до 5 вечера. Если вы увидите Настоящего Программиста за компьютером после 9 часов утра - значит он не спал всю ночь.

Не думаю, что именно это признак настоящего программиста, хотя и сам такой, в смысле меня можно увидеть бодрствующим за компьютером всю ночь. Лично я для себя подметил, что думать в темноте, гораздо продуктивнее, чем при свете. Причём дневной свет гораздо хуже переносится, чем от лампы накаливания. Но на мой режим влияет в основном не это, а предыдущее высказывание, про 30 часов без перерыва.

Настоящий Программист никогда не пишет на КОБОЛе, ибо КОБОЛ для любителей писать прикладные программы.

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

Настоящий Программист никогда не пишет на ФОРТРАНе, ибо ФОРТРАН для законченных уродцев и задумчивых кенгуру.

Ну, ну. На ФОРТРАН я тоже не пишу, и опять же даже никогда его не видел. Комменты те же, что и для КОБОЛа.

Настоящий Программист никогда не пишет на БЕЙСИКе. Действительно , трудно встретить программиста, в возрасте после 12 лет, пишущего на БЕЙСИКе.

Наверное, по причине допотопности статьи речь идёт о Quick Basic. С того времени появилась совершенно другая система Visual Basic, а сейчас уже и Visual Basic.NET. Про Quick Basic в целом я согласен, но как уже говорил, презирать системы программирования не стоит. И вообще, настоящий программист должен знать всё и в совершенстве уметь этим пользоваться.

Настоящий Программист никогда не пишет на PL/I, ибо PL/I - язык для тех, кто не решается писать на КОБОЛе или ФОРТРАНе.

Опять презрение. В таком случае без км, которые в этом случае и являются моими км.

Настоящий Программист никогда не пишет на APL. Даже дурак загрустит от APL.

У кого-то заела пластинка.

Настоящий Программист никогда не пишет на ПАСКАЛЕ, БЛИССе, АДА. Строгий контроль типов в этих языках хорош лишь для людей со слабой памятью.

Оскорбили ПАСКАЛЬ, это хорошо, присоединяюсь, а ведь сам когда-то с него начинал.

Настоящий Программист считает, что структурное программирование - это коммунистический заговор.

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

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

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

Настоящий Программист никогда не пользуется графиками работы, считая, что они нужны только его менеджеру. А настоящему Программисту нравится держать своего менеджера в волнении.

Вероятно, вам знакомы подобные системы постановки задач. Одна из них Microsoft Outlook. Ставим цель и время, за которое она должна быть выполнена. Можно запрограммировать график продвижения в работе и так далее. Если бы вас кто-то контролировал, то он бы изо всех сил постарался ускорить индикатор роста процентов создания программы. А что ему ещё остается? Впрочем, я считаю, что если нет менеджера, то есть управляющего проекта, то им должен стать сам программист, и подгонять себя он должен тоже сам.

Настоящий Программист думает лучше, когда играет в ADVENTURE.

Может он и думает, так как в уме нужно держать разнообразные задания, очерёдность действий и так далее, вот только совершенно не о том. Реальная работа в это время будет стоять и настоящий программист будет уже не просто не настоящим, но и вообще не программистом, а обычным третьеразрядным пользователем-игруном.

Настоящий Программист с наслаждением ставит CP/M для работы на IBM/370 и MVS на ZX81s.

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

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

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

Настоящий Программист никогда не делает резервных копий.

Сейчас всё за любого программиста делает auto backup, так что это уже не актуально

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

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

Настоящий Программист никогда не проверяет своих программ, ибо так поступают только неуверенные в себе люди.

Опять утверждение от противного. Проверять нужно всё и всегда, а может я просто не настоящий программист?

Программы Настоящего Программиста всегда рекурсивны и запускаются в режиме супервизора, иначе это не программы Настоящего Программиста.

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

перейти к оглавлению

comp.soft.prog.vsnetmsoffice-owner@subscribe.ru Отвечает
Вопросы и ответы автор

k

Как со мной связаться?

  • Прежде всего можно послать письмо на адрес рассылки, он дан в заголовке. Пишите свои замечания и предложения, но постарайтесь сделать письмо как можно меньше, то есть, 5Kb или 10Kb в текстовом варианте будет более чем достаточно. К тому же сервис subscribe.ru тоже накладывает некоторые ограничения на доставку писем.
  • Вы можете использовать мой лист обсуждений по текущей теме. Он нужен, прежде всего, для общения по почте, сразу многим участникам. В общем, экономный чат для тех, кому не терпится пообщаться. Его стоит использовать, только если вы действительно интересуетесь программированием. Подписаться на лист можно через таблицу подписки расположенную ниже. Там же находится и его всплывающее описание, которое появится, если задержать курсор на названии.

Я только что подписался!!! как мне получить предыдущие выпуски вашей рассылки, заказав их по почте?

Ó Для начала пошлите текстовое письмо по адресу subscribe@subscribe.ru. Ни в коем случае не пытайтесь отправить письмо в формате HTML, робот subscribe просто не станет его рассматривать. Заполните содержание следующей строкой ARCHIVE comp.soft.prog.vsnetmsoffice 2006. Тему можно игнорировать.

Ò Если вы всё сделали правильно, то через некоторое время вам придёт список предыдущих выпусков рассылки. Теперь повторите операцию с письмом, но используйте элементы из списка выпусков. Например, для получения первых трёх выпусков, можно использовать следующее содержание текстового письма:
ARCHIVE comp.soft.prog.vsnetmsoffice 2006/02/10-00:11:08.html
ARCHIVE comp.soft.prog.vsnetmsoffice 2006/02/15-01:06:13.html
ARCHIVE comp.soft.prog.vsnetmsoffice 2006/02/21-23:15:18.html
QUIT

Отправьте письмо и ждите ваш заказ. Не пытайтесь получить почту, пока не пройдёт хотя бы несколько минут. Это наименьшее время, которое уйдёт на обработку заказа. А, заказав выпуски в 12 ночи по Московскому времени, придётся ждать их очень долго.

Подобным методом вы можете получать не только мою рассылку, но и любую другую, подставив её код в письмо вместо моей.


У матросов нет вопросов.

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

Разговор двух программистов :
- Вчера вот новую "мамку" притащил.Всю ночь протрахался!!!!
- И что ??????
- Да не встает зараза!!!!!


Макрушник - программист на макро-ассемблере
Насильник - программист на Си
Вжикалка - матричный принтер


Сказка о RAM и ROM.

Юзер вдруг повесил нос - сдохла батарейка CMOS.
"Нужен тут специалист" - юзер обратился в Вист.
Батарейку там продали, устанавливать не стали.
Не сказали даже как.А зачем, какой пустяк!

Юзер взял системный блок, крышку снял,
Да что там? Ток! Пятьдесят ампер - бурда, оклемаюсь, ерунда!
Пять часов внутри крутил, батарейку прицепил.
Крышку (два часа работы) прикрутил (наоборот)

Кнопку POWER нажал - вентилятор завижжал,
комп работает но факт, явно что-то тут не так.
После множества проблем добрался до IBM
С умным видом говорит, мол , "Компьютер ваш шалит!"

Высылают из США группу техномонтажа...
Прибыли профессора, хакера, программера,
Апаратчики, наладчики и дебагеры-отладчики,
Пара ламеров знакомых, даже юзер с format.com'ом

Разбирались года два, прямо кругом голова!
Все работает нормально, проверяли капитально.
Так дошли бы все до ручки, да сисопа - самоучку
Осенила мысль одна, очень умная была.

В этой сказке нет порядка, здесь ошибка, опечатка!
Кто-то против всяких правил SIMM на BIOS переставил,
Заменил он RAM на ROM и настал большой облом!
А причина на - повал глупый юзер шуровал!


Сидит Системщик(С)-сборщик в офисе - от нечего делать, плюет в потолок.
Бац - звонит клиент (К):
(К) Алё
(С) Отдел технической поддержки слушает
(К) Вы знаете - у меня ваш компьютер сломался
(С) :-[ ] Да ? а что происходит - можете описать ?
(К) Да - я когда его включаю - из блока питания дым идет
(С) Мндааа... ну хорошо - привозите машину, надо поменять блок питания
(К) А вы знаете - я тут со своими спецами посоветовался - мне сказали что
мне нужно драйвер в Windows'95 прописать и все будет работать !
(С) Хмм.. да нет же - я вам говорю - блок питания надо менять
[следуют 5 минут глупых препирательств]

(К) Я вам не верю - вы хотите меня обмануть. лучше скажите мне какой
драйвер - я его пропишу и у меня все будет работать
(С) Хорошо, вы включили машину ?
(К) Да
(С) Нажимайте F3 и ищите файл nosmoke.drv
(К) Нет - у меня такого файла нету :(
(С) Давайте я вам дам телефон фирмы Microsoft - там вам помогут только
после этого, обязательно перезвоните мне и расскажите результат...

Через 15 минут звонит тот же клиент
(К) Вы знаете - мне наверное нужно поменять блок питания
(С) 8-[ ] Вы звонили в Майкрософт ?
(К) Да, звонил
(С) И что вам сказали ?
(К) Там мэнэджер сказал мне что у них есть такой драйвер, но он совершенно
не совместим с моей версией БЛОКА ПИТАНИЯ:

Желаю удачи, автор.

перейти к оглавлению

Подписка
Практическая работа с Visual Studio.Net и Microsoft Office Подписаться web'ом Подписаться почтой
3DS Max 7 - изучаем вместе! Подписаться web'ом Подписаться почтой
Visual Basic для новичков и профессионалов Подписаться web'ом Подписаться почтой

Практическая работа с Visual Studio.Net и Microsoft Office
➲перейти к началу ➲перейти к концу

В избранное