GetInfo.Ru – Компьютерная библиотека
Последние поступления
Как выбрать систему управления базы данных
Базы данных03/09/14
Этапы загрузки UNIX (в схеме)
Unix27/03/12
Gatewall Antispam: тотальный контроль электронной почты
Спам21/04/11
Мастер-класс: создаем Интернет-магазин (Часть 1)
Обзоры ПО20/04/11
CorelDRAW Graphics Suite X5: Что нового?
Обзоры ПО20/07/10
Добавить статью
Самые читаемые материалы
Программирование на ASP. Введение или первый урок.(15575)
Отображение картинки из БД напрямую - создание своего HttpHandler(13242)
Использование шаблонов дизайна в ASP .NET(12184)
Кеширование ASP.NET страниц(11534)
Пакетная компиляция в ASP.NET(11228)
Всего статей: 793Всего авторов: 364Подразделов: 47Добавлено за сутки: 0
Статьи  СТАТЬИ Форум  ФОРУМ Рейтинг  РЕЙТИНГ Поиск  ПОИСК Контакты  КОНТАКТЫ
» Главная » ASP » Visual Basic + ASP. Работа с данными - Запись, чтение.

Visual Basic + ASP. Работа с данными - Запись, чтение.


Олег Баша
programming@olevarty.ru

Платформа: Windows NT, 2000, XP
Веб-сервер: IIS 4,5
Технологии: ASP, COM, SQL
СУБД: MS SQL Server 7.0 / 2000
Языки: Visual Basic Script, Visual Basic 6.0
Приложения: Microsoft Visual Basic 6.0, MS SQL Server 7.0 / 2000 Enterprise Manager

Основная идея:
Использовать объект, в свойствах которого будут храниться данные, принятые от формы или из базы данных, а методы которого будут выполнять функции чтения данных из БД и записи данных в БД.

Продолжим изучать возможности архитектуры, описанной в "Visual Basic + ASP. Использование шаблонов.". На этот раз мы ознакомимся с основными принципами работы с данными. Мы напишем универсальный код, который будет являться промежуточным звеном между web-интерфейсом пользователя и базой данных.


Запустите Visual Basic и создайте новую ActiveX DLL. Укажите имя проекта - WebSite. Теперь откройте Class Builder Utitlity (эту утилиту можно загрузить с помощью Add-Ins Manager -> Add-Ins -> Add-Ins Manager). Добавьте к проекту новый класс и назовите его Catty. Добавьте следующие свойства к вновь созданному классу:

ID: string
aName: string
aDol: string
aTel: string
aEmail: string

Закройте Class Builder Utility. Откройте окно Project Preferences и добавьте к проекту Microsoft ActiveX Data Objects Library.

Листинг 1. Класс CAtty.

'local variable(s) to hold property value(s)
Private mvarId As String 'local copy
Private mvaraName As String 'local copy
Private mvaraTel As String 'local copy
Private mvaraEmail As String 'local copy
Private mvaraDol As String 'local copy



Public Property Let aDol(ByVal vData As String)
'Syntax: X.aDol = 5
    mvaraDol = vData
End Property


Public Property Get aDol() As String
'Syntax: Debug.Print X.aDol
    aDol = mvaraDol
End Property



Public Property Let aEmail(ByVal vData As String)
'Syntax: X.aEmail = 5
    mvaraEmail = vData
End Property


Public Property Get aEmail() As String
'Syntax: Debug.Print X.aEmail
    aEmail = mvaraEmail
End Property



Public Property Let aTel(ByVal vData As String)
'Syntax: X.aTel = 5
    mvaraTel = vData
End Property


Public Property Get aTel() As String
'Syntax: Debug.Print X.aTel
    aTel = mvaraTel
End Property



Public Property Let aName(ByVal vData As String)
'Syntax: X.aName = 5
    mvaraName = vData
End Property


Public Property Get aName() As String
'Syntax: Debug.Print X.aName
    aName = mvaraName
End Property



Public Property Let ID(ByVal vData As String)
'Syntax: X.Id = 5
    mvarId = vData
End Property


Public Property Get ID() As String
'Syntax: Debug.Print X.Id
    ID = mvarId
End Property

Теперь добавьте к исходному коду полученного класса эти функции:

Листинг 2. Функции для работы с данными.

Public Function DelObjectFromDB(ID As Variant)
    Dim SQL$
    SQL = "DELETE FROM dbo.tbl_atty WHERE ID='" & ID & "'"
    db_conn.Execute (SQL)
End Function


Public Function LoadObjectFromDB(ID As Variant) As CAtty
    Dim SQL$

    SQL = "SELECT ALL * FROM attyDB..tbl_atty(NOLOCK) & _
          " WHERE Id='" & ID & "'"
    Set rs = New ADODB.Recordset
    Set rs = db_conn.Execute(SQL)

    If rs.EOF And rs.BOF Then
         GoTo CLEAN_UP
    Else
    
     ID = rs("ID")
     aName = rs("aName")
     aDol = rs("aDol")
     aTel = rs("aTel")
     aEmail = rs("aEmail")

    End If

CLEAN_UP:
    Set rs = Nothing
    Set LoadObjectFromDB = Me

End Function




Public Function 
      SetRequestIntoObject(Request As Variant) As CAtty

       ID = Request.Form("ID")
       aName = Request.Form("Name")
       aDol = Request.Form("Dol")
       aTel = Request.Form("Tel")
       aEmail = Request.Form("Email")

     Set SetRequestIntoObject = Me
End Function



Public Function SetObjectIntoDB(oAtty As CAtty) As String
   Dim SQL$
     
     With oAtty

     SQL = "DELETE FROM attyDB..tbl_atty WHERE ID='" & _
            .ID & "'" & vbCrLf
     SQL = SQL & "INSERT INTO attyDB..tbl_atty "
     SQL = SQL & "(ID, aName, aDol, "
     SQL = SQL & "aTel, aEmail)"
     SQL = SQL & " VALUES ("
     SQL = SQL & "'" & .ID & "', "
     SQL = SQL & "'" & .aName & "', "
     SQL = SQL & "'" & .aDol & "', "
     SQL = SQL & "'" & .aTel & "', "
     SQL = SQL & "'" & .aEmail & "')"
    
     
     End With
     
      db_conn.Execute SQL
      SetObjectIntoDB = Err.Number
End Function

Добавленные нами функции выполняют следующие операции:

  • Копирование полученных от формы данных из объекта Request в свойства объекта Catty;
  • Запись в базу данных информации, хранящейся в объекте Catty;
  • Чтение из базы данных и заполнение свойств объекта Catty;
  • Удаление записей из базы данных.

Добавьте к Вашему проекту модуль и назовите его system. Скопируйте в модуль код из листинга 3.

Листинг 3. Модуль System.

Const DB_Connection_String = "DSN=attyDB"
Public db_conn As New ADODB.Connection
Public rs As ADODB.Recordset
Public TEMPLATE_PATH As String




Public Function 
      getTemplateFile(sFileName As String) As String
Dim fso As Object, f As Object
Dim sFile$
    If Right(TEMPLATE_PATH, 1) <> "\" Then
       TEMPLATE_PATH = TEMPLATE_PATH & "\"
    End If   
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set f = fso.OpenTextFile(TEMPLATE_PATH & sFileName, 1)
        sFile = f.ReadAll()
    Set f = Nothing
    Set fso = Nothing

getTemplateFile = sFile
End Function


Public Sub OpenDBConnection()
If db_conn.State = adStateClosed Then
db_conn.Provider = "SQLOLEDB"
db_conn.Open DB_Connection_String, "sa", ""
End If
End Sub


Public Sub CloseDBConnection()
If db_conn.State = adStateOpen Then db_conn.Close
End Sub

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

Теперь добавьте к вашему проекту класс Cmain.

Листинг 4. Класс Cmain.

Public Function GetPage(Session, Request) As String
Dim sPageBack$
Dim ContentFileName As String
Dim Atty As New CAtty
Dim Error As String

If Request.Form("Flag") = "On" Then
Error = Atty.SetObjectIntoDB( 
        Atty.SetRequestIntoObject(Request))
End If

sPageBack = getTemplateFile("template.htm")
sPageBack = Replace(sPageBack, "{$Title$}",
                    "Пример использования шаблонов")

Set Atty = Atty.LoadObjectFromDB("1")

sPageBack = Replace(sPageBack, "{$Name$}", Atty.aName)
sPageBack = Replace(sPageBack, "{$Dol$}", Atty.aDol)
sPageBack = Replace(sPageBack, "{$Tel$}", Atty.aTel)
sPageBack = Replace(sPageBack, "{$Email$}", Atty.aEmail)

GetPage = sPageBack
End Function



Private Sub Class_Initialize()
     TEMPLATE_PATH = App.Path
     Call OpenDBConnection
End Sub

Private Sub Class_Terminate()
    Call CloseDBConnection
End Sub

Этот класс содержит единственную функцию GetPage. Эта функция вызывается из asp-страницы, ей передаются основные asp-объекты, она производит запись, чтение из БД и возвращает результат этих операций в asp-страницу.

Откомпилируйте и зарегистрируйте полученную DLL.

Теперь запустите Enterprise Manager Вашего SQL сервера. Создайте новую базу данных attyDB и создайте в ней таблицу tbl_atty с полями

ID: nvarchar(5)
aName: nvarchar(50)
aDol: nvarchar(50)
aTel: nvarchar(50)
aEmail: nvarchar(50)

В нашем примере мы соединяемся с базой данных под логином системного администратора ("sa"). Вы можете создать нового пользователя, только тогда не забудьте внести соответствующие изменения в значение константы db_connection_string. Также не забудьте указать permissions у таблицы tbl_atty для нового пользователя. В заключение создания новой базы данных создайте системный DNS с именем attyDB.

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

Для простоты, мы пока будем работать только с одной записью. Мы создадим форму, которая при первом открытии будет иметь пустые поля, а после первого сохранения она будет заполнена введенными Вами данными, доступными для редактирования. Вводимые данные будут сохраняться в базе данных. Мы сохраним идеологию, описанную нами на первом шаге, т.е. будем использовать шаблон. Создайте страницу template.htm, скопировав в нее код, приведенный в листинге 5.

Листинг 5. template.htm.

<html>
<head>
<title>{$Title$}</title>
</head>
<body>
<!-- Здесь html-код разметки страницы -->


<form action="index.asp" method="post">
<input type="hidden" name="Flag" Value="On">
<input type="hidden" name="Id" Value="1">
<table>
<tr><td colspan="2" bgcolor="#CCCCCC">Новый сотрудник</tr>
<tr>
<td>Имя:</td>
<td><input type="text" name="Name" value="{$Name$}"></td>
</tr>
<tr>
<td>Должность:</td>
<td><input type="text" name="Dol" value="{$Dol$}"></td>
</tr>
<tr>
<td>Телефон:</td>
<td><input type="text" name="Tel" value="{$Tel$}"></td>
</tr>
<tr>
<td>e-mail:</td>
<td><input type="text" name="Email" value="{$Email$}"></td>
</tr>
</table>
<input type=submit value="Сохранить">
</form>

-- данные в БД --
<table>
<tr>
<td>Имя:</td>
<td>{$Name$}</td>
</tr>
<tr>
<td>Должность:</td>
<td>{$Dol$}</td>
</tr>
<tr>
<td>Телефон:</td>
<td>{$Tel$}</td>
</tr>
<tr>
<td>e-mail:</td>
<td>{$Email$}</td>
</tr>
</table>

<!-- Здесь html-код разметки страницы -->
</body>
</html>

Создайте страницу index.asp, ее код в листинге 6.

Листинг 6. index.asp.

<% @ Language="VBScript" %>
<%
Dim obj
Dim RetVal
    set obj = Server.CreateObject("WebSite.CMain")
    RetVal = obj.GetPage(Session, Request)
set obj = Nothing
Response.Write(RetVal)
%>

Убедитесь, что Ваш объект откомпилирован, SQL-сервер запушен, все файлы (объект, шаблоны и asp-страницы) находятся в одной папке. Это не обязательно, и, даже, не рекомедуется в рабочих проектах, просто пока так Вам удастся избежать лишних ошибок. Убедитесь, что к этой папке открыт доступ. Откройте в браузере страницу http://ваш_домен/ваш_виртуальный_каталог/index.asp.

ВСЁ!

Из приведенного примера важно усвоить:

  1. Удобство использования классов,
  2. Принцип обмена данными с базой данных.

Скачать файлы примера

Оригинал статьи: www.olevarty.ru

 
26.12.2003
Версия для печати Версия для печати Запомнить ссылку Запомнить ссылку
Ваша оценка:  1   2   3   4   5     

 О проектеПерепечаткаАвторамПартнерыО нас пишут
Наверх
©2003—2007. GETINFO.RU. ВСЕ ПРАВА ЗАЩИЩЕНЫ.