Студопедия — Создание представлений и хранимых процедур посредством кода
Студопедия Главная Случайная страница Обратная связь

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

Создание представлений и хранимых процедур посредством кода






Создание представлений и хранимых процедур из кода имеет те же преимущества, что и создание таблиц базы данных — всегда можно повторить операцию создания в случае потери этих объектов. Причем сами инструкции, которые необходимо передать из кода (на VB или другом языке) для создания представлений и процедур, ничем не отличаются от тех, которые используются вEnterprise Manager.

Например, код листинга 22.8 содержит две процедуры: Test_CreateView — создает представление п_Коды_Товары2 для базы данных Фирма (может быть выполнена в любой системе, поддерживающей Visual Basic), Test_UseView — использует представление для получения набора и помещает данные набора в Excel-лист.

Листинг 22.8 Создание и использование представления из VB-кода

1: Sub Test_CreateView()

2: 'создает новое представление

3:

4: Dim rs As ADODB.Recordset

5:

6: If ADODB_ConnectedSQL() Then

7: MsgBox "Похоже, соединение установлено..."

8: ' код, использующий установленное соединение:

9:

10: cn.Execute "USE Фирма"

11:

12: cn.Execute "CREATE VIEW п_Коды_Товары2 " & _

13: "AS " & _

14: " SELECT КодТовара, НаимТовара " & _

15: " FROM Товары"

16:

17: cn.Close ' закрыть соединение

18:

19: Else

20: MsgBox "Что-то не получается подключиться к базе данных!"

21: End If

22:

23: End Sub

24:

25: Sub Test_UseView()

26: 'использует новое представление

27:

28: Dim rs As ADODB.Recordset

29:

30: If ADODB_ConnectedSQL() Then

31: MsgBox "Похоже, соединение установлено..."

32: ' код, использующий установленное соединение:

33:

34: cn.Execute "USE Фирма"

35:

36: 'использование представления:

37:

38: Set rs = New ADODB.Recordset

39: rs.CursorType = adOpenDynamic

40: rs.Source = "п_Коды_Товары2"

41: Set rs.ActiveConnection = cn

42: rs.Open

43:

44: j = 1 'установить начальную строку таблицы

45:

46: 'записать заголовки полей в Excel-лист:

47: For i = 0 To rs.Fields.Count - 1

48: ActiveWorkbook.Sheets(1).Cells(j, i + 1).Value = _

49: rs.Fields(i).Name

50: Next

51:

52: 'записать содержимое полей в Excel-лист:

53: rs.MoveFirst

54: Do While Not rs.EOF

55: j = j + 1

56: For i = 0 To rs.Fields.Count - 1

57: ActiveWorkbook.Sheets(1).Cells(j, i + 1).Value = _

58: rs.Fields(i)

59: Next

60: rs.MoveNext

61: Loop

62:

63: cn.Close ' закрыть соединение

64:

65: Else

66: MsgBox "Что-то не получается подключиться к базе данных!"

67: End If

68:

69: End Sub

Код листинга 22.9 содержит две процедуры: Test_CreateProc — создает хранимую процедуру СпецифНакладной для базы данных Фирма (может быть выполнена в любой системе, поддерживающей Visual Basic), Test_UseProc — использует хранимую процедуру для получения набора и помещает данные набора в Excel-лист.

Процедура Test_CreateProc создает хранимую процедуру, предназначенную для формирования спецификации накладной. В качестве параметров хранимой процедуры используются (строки 16, 17): код подразделения (@pКодПодразд), номер накладной (@pНомерНакл) и дата накладной (@pДатаНакл). Это уникальный набор полей таблицы НаклСпецификации (см. главу 3, «Основы языка SQL»), по нему можно идентифицировать относящиеся к накладной товары.

Листинг 22.9 Создание и использование хранимой процедуры из VB-кода

1: Sub Test_CreateProc()

2: 'создает новую хранимую процедуру

3:

4: Dim rs As ADODB.Recordset

5:

6: If ADODB_ConnectedSQL() Then

7: MsgBox "Похоже, соединение установлено..."

8: ' код, использующий установленное соединение:

9:

10: cn.Execute "USE Фирма"

11:

12: 'накладная с указанными: кодом подразделения,

13: 'номером и датой

14: cn.Execute _

15: "CREATE PROC СпецифНакладной " & _

16: " @pКодПодразд char(4), @pНомерНакл char(7), " & _

17: " @pДатаНакл char(10) " & _

18: "AS " & _

19: "SELECT b.НаимТовара as 'Наименование', " & _

20: " a.Количество as 'Кол-во', " & _

21: " a.ЦенаОперации as 'Цена'" & _

22: "FROM НаклСпецификации a, Товары b " & _

23: "WHERE a.КодПодразделения = @pКодПодразд " & _

24: " and a.Номер =@pНомерНакл " & _

25: " and CONVERT(char(10), a.Дата, 104)=@pДатаНакл " & _

26: " and a.КодТовара=b.КодТовара ORDER BY b.НаимТовара"

27:

28: cn.Close ' закрыть соединение

29:

30: Else

31: MsgBox "Что-то не получается подключиться к базе данных!"

32: End If

33:

34: End Sub

35:

36: Sub Test_UseProc()

37: 'использует хранимую процедуру

38:

39: Dim rs As ADODB.Recordset

40:

41: If ADODB_ConnectedSQL() Then

42: MsgBox "Похоже, соединение установлено..."

43: ' код, использующий установленное соединение:

44:

45: cn.Execute "USE Фирма"

46:

47: 'использование процедуры:

48:

49: Set rs = New ADODB.Recordset

50: rs.CursorType = adOpenDynamic

51: rs.Source = "EXEC СпецифНакладной " & _

52: " @pКодПодразд='0429', @pНомерНакл ='4', " & _

53: " @pДатаНакл = '02.11.2002'"

54: Set rs.ActiveConnection = cn

55: rs.Open

56:

57: j = 1 'установить начальную строку таблицы

58:

59: 'записать заголовки полей в Excel-лист:

60: For i = 0 To rs.Fields.Count - 1

61: ActiveWorkbook.Sheets(1).Cells(j, i + 1).Value = _

62: rs.Fields(i).Name

63: Next

64:

65: 'записать содержимое полей в Excel-лист:

66: 'rs.MoveFirst

67: Do While Not rs.EOF

68: j = j + 1

69: For i = 0 To rs.Fields.Count - 1

70: ActiveWorkbook.Sheets(1).Cells(j, i + 1).Value = _

71: rs.Fields(i)

72: Next

73: rs.MoveNext

74: Loop

75:

76: cn.Close ' закрыть соединение

77:

78: Else

79: MsgBox "Что-то не получается подключиться к базе данных!"

80: End If

81:

82: End Sub

Инструкция (в общем, не сложная) для создания хранимой процедуры, имеет следующий вид (строки кода 15–26):

CREATE PROC СпецифНакладной

@pКодПодразд char(4), @pНомерНакл char(7),

@pДатаНакл char(10) " & _

AS

SELECT b.НаимТовара as 'Наименование',

a.Количество as 'Кол-во',

a.ЦенаОперации as 'Цена'

FROM НаклСпецификации a, Товары b

WHERE a.КодПодразделения = @pКодПодразд

and a.Номер =@pНомерНакл

and CONVERT(char(10), a.Дата, 104)=@pДатаНакл

and a.КодТовара=b.КодТовара ORDER BY b.НаимТовара

Обратите внимание на использование функции CONVERT. Это функция языка T-SQL, поскольку инструкция выполняется на сервере. Она предназначена для преобразования значения типа smalldatetime в строку длиной 10 символов [для этого в качестве первого аргумента используется выражение char(10) ] со значением даты. Это преобразование позволяет при обращении к хранимой процедуре в качестве параметра @pДатаНакл (дата накладной) использовать текстовую строку (строка кода 53) типа '02.11.2002'.

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

Рис. 22.13

Результат выполнения процедуры Test_UseProc листинга 22.9

В коде листинга 22.10 имеются операторы для вывода в Excel-лист дополнительной информации о накладной (рис. 22.14).

Листинг 22.10 Использование хранимой процедуры из VB-кода

1: Sub Test_UseProc()

2: 'использует хранимую процедуру

3:

4: Dim rs As ADODB.Recordset

5: Dim НомерНак As Integer

6: Dim ДатаНак As String

7: Dim КодПодраз As String

8: Dim summ As Double 'итоговая сумма накладной

9:

10: summ = 0#

11:

12: 'здесь может быть более сложный код для определения

13: 'параметров хранимой процедуры:

14: НомерНак = 4

15: КодПодраз = "0429"

16: ДатаНак = "02.11.2002"

17:

18:

19:

20: If ADODB_ConnectedSQL() Then

21: MsgBox "Похоже, соединение установлено..."

22: ' код, использующий установленное соединение:

23:

24: cn.Execute "USE Фирма"

25:

26: 'использование хранимой процедуры:

27:

28: Set rs = New ADODB.Recordset

29: rs.CursorType = adOpenDynamic

30:

31: rs.Source = "EXEC СпецифНакладной " & _

32: " @pКодПодразд='" & КодПодраз & _

33: "', @pНомерНакл ='" & Trim(Str(4)) & "'," & _

34: " @pДатаНакл = '" & ДатаНак & "'"

35:

36:

37: Set rs.ActiveConnection = cn

38: rs.Open

39:

40: 'Заголовок накладной:

41: ActiveWorkbook.Sheets(1).Cells(1, 2).Value = _

42: "Накладная № " & Str(4) & " от " & ДатаНак

43:

44: 'для кода подразделения можно было бы найти наименование:

45: ActiveWorkbook.Sheets(1).Cells(2, 1).Value = _

46: "Подразделение " & КодПодраз

47:

48: j = 4 'установить начальную строку таблицы

49:

50: 'записать заголовки полей в Excel-лист:

51: For i = 0 To rs.Fields.Count - 1

52: ActiveWorkbook.Sheets(1).Cells(j, i + 1).Value = _

53: rs.Fields(i).Name

54: Next

55:

56: 'записать содержимое полей в Excel-лист:

57: 'rs.MoveFirst

58: Do While Not rs.EOF

59: j = j + 1

60: For i = 0 To rs.Fields.Count - 1

61: ActiveWorkbook.Sheets(1).Cells(j, i + 1).Value = _

62: rs.Fields(i)

63: Next

64:

65: summ = summ + rs.Fields(i - 1) 'накопление суммы

66:

67: rs.MoveNext

68: Loop

69:

70: 'запись суммы в Excel-лист:

71: ActiveWorkbook.Sheets(1).Cells(j + 1, 1).Value = "Сумма:"

72: ActiveWorkbook.Sheets(1).Cells(j + 1, i).Value = summ

73:

74:

75: cn.Close ' закрыть соединение

76:

77: Else

78: MsgBox "Что-то не получается подключиться к базе данных! "

79: End If

80:

81: End

 

 

Рис. 22.14

Результат выполнения процедуры Test_UseProc листинга 22.10

Следует отметить, что приведенные примеры создания баз данных и их объектов (таблиц, представлений и процедур) и примеры использования этих объектов в том виде, как они представлены здесь, могут применяться только на локальном компьютере. При этом неважно, где будет находиться SQL Server (на локальном компьютере или удаленном сервере) — у пользователя должны быть, по крайней мере, права на создание баз данных. Система безопасности SQL Server, для обсуждения которой в этой книге места не хватило, не разрешит одним пользователям без дополнительных усилий работать с базами данных (и их объектами), созданными другим пользователем. Хотя проблему безопасности всегда можно переложить на системного администратора (в нашей стране малые предприятия редко могут позволить себе роскошь иметь администратора баз данных, поэтому его или их задачи обычно выполняет системный администратор), в любом случае следует четко разделять свои проекты на те, которые предназначены для создания и модификации структур баз данных и их объектов, и на те, которые предназначены для обычной эксплуатации данных, содержащихся в базах. Т.е. для одной и той же базы данных необходимо создать, по крайней мере, два проекта: один «администраторский», при помощи которого вы всегда сможете создать базу, изменить ее структуру, добавить/удалить представление или хранимую процедуру, решить проблемы доступа отдельным пользователям к объектам базы; и другой — «пользовательский», при помощи которого к данным базы смогут обращаться или «все, кому не лень», или те, кому необходимо.







Дата добавления: 2015-09-04; просмотров: 420. Нарушение авторских прав; Мы поможем в написании вашей работы!



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

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

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...

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

Признаки классификации безопасности Можно выделить следующие признаки классификации безопасности. 1. По признаку масштабности принято различать следующие относительно самостоятельные геополитические уровни и виды безопасности. 1.1. Международная безопасность (глобальная и...

Прием и регистрация больных Пути госпитализации больных в стационар могут быть различны. В цен­тральное приемное отделение больные могут быть доставлены: 1) машиной скорой медицинской помощи в случае возникновения остро­го или обострения хронического заболевания...

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

Йодометрия. Характеристика метода Метод йодометрии основан на ОВ-реакциях, связанных с превращением I2 в ионы I- и обратно...

Броматометрия и бромометрия Броматометрический метод основан на окислении вос­становителей броматом калия в кислой среде...

Studopedia.info - Студопедия - 2014-2024 год . (0.011 сек.) русская версия | украинская версия