RastrWin |
Работа с SQL |
Этот скрипт был разработан для ПО ActOpus для ввода данных из SQL базы данных (с помощью ADO). Может использоваться в качестве примера взаимодействия с SQL БД.
Скрипт "Загрузка графиков с SQL" предназначен для ввода данных по графикам конечных потребителей в ПО Актуализации "ActOpus".
Для работы скрипта в ПО должен быть загружен файл БД актуализации за требуемые сутки. При работе скрипт анализирует содержимое поля "Код макета" в таблице "Потребители2" и по данному коду обеспечивает загрузку графиков потребителей в таблицу "Графики нагрузок", выполняя необходимое индексирование по номерам точек и номерам потребителей. Для работы скрипта требуется возможность связи с БД SQL. Доступ к БД скрипт осуществляет с помощью ADO.
Скрипт должен быть расположен в подкаталоге Macro в каталоге установки ПО Актуализации.
Запуск скрипта осуществляется с помощью команды "Выполнить" меню "Расчеты". Кроме того, возможен запуск скрипта с помощью оболочки макро - команда "Макро..." меню "Расчеты". При выполнении скрипта выводится окно выбора даты, за которую из БД будут введены графики нагрузки потребителей.
При загрузке графиков скрипт в отношении каждого потребителя действует по следующему алгоритму:
По окончании работы скрипт может вывести до трех окон сообщений:
В данных окнах отображаются только потребители, которые имели график в БД SQL на выбранную пользователем дату.
При обращении к базе скрипт использует один запрос для каждого потребителя по таблице PDG_h:
strSQLquery="SELECT * FROM PDG_h WHERE (kpo_obj='" & MktCode &_ "') And (data='" & strDate & "') And (id_pok=33)"
При этом подразумевается, что код показателя "Заявка на почасовой график потребления" имеет номер 33 (id_pok=33).
' Скрипт позволяет загрузить в БД ActOpus данные из БД SQL-server ' по графикам потребителей. Использует ADO. ' (С) Машалов Е. ОДУ Урала, 2003 ' Создаем объекты доступа к данным Set ADO = CreateObject("ADODB.Connection") Set RS = CreateObject("ADODB.Recordset") ' Описываем параметры соединения с БД DSN = "Driver=SQL Server;UID=user;PWD=letmein;SERVER=sqlserver;DATABASE=Graphic;Mode=Read" ' Открываем БД SQL ADO.Open(DSN) ' Выполняем запрос даты, за которую нужно ввести данные по графикам strDate = Rastr.SendCommandMain(7,"","",0) ' Строим строку даты для SQL-запроса DateDD = Left(strDate,2) DateYY = Right(strDate,2) DateMM = Mid(strDate,3,2) strDate = DateMM & "." & DateDD & "." & DateYY ' Инициализируем списки отчетов LoadedList = vbCrLf RejectedList = vbCrLf PresentList = vbCrLf ' Подключаемся к таблицам "Потребители2" и "График нагрузки" в БД ActOpus Set ConsumerTable = Rastr.Tables("Consumer2") Set PLoadTable = Rastr.Tables("Pload") ' Ищем графики потребителей в БД-SQL for ConsNdx = 0 to ConsumerTable.Size-1 ConsNum = ConsumerTable.Cols("Num").Z(ConsNdx) MktCode = ConsumerTable.Cols("MktCode").Z(ConsNdx) ConsName = ConsumerTable.Cols("Name").Z(ConsNdx) ConsPmax = ConsumerTable.Cols("Pmax").Z(ConsNdx) ConsPmid = ConsumerTable.Cols("Pmid").Z(ConsNdx) ConsPmin = ConsumerTable.Cols("Pmin").Z(ConsNdx) ' Готовим и выполняем SQL-запрос по коду макета из таблицы "Потребители2" strSQLquery="SELECT * FROM PDG_h WHERE (kpo_obj='" & MktCode &_ "') And (data='" & strDate & "') And (id_pok=33)" RS.Open strSQLquery,ADO ' Проверяем наличие графика для данного потребителя If Not RS.EOF Then PLoadTable.SetSel("Num=" & ConsNum) Answ = vbYes ' Если график для данного потребителя уже есть в БД ActOpus, спрашиваем пользователя: ' "Следует ли обновить график ?" if PLoadTable.Count > 0 Then Answ = MsgBox ("По потребителю " & ConsNum & " [" & ConsName & "] график уже" &_ " загружен. Обновить ?", vbYesNo) if Answ = vbYes Then ' Если пользователь хочет обновить график, стираем существующий график в БД ActOpus PLoadTable.DelRows End if End if ' Если пользователь отказался от обновления графика, переходм к следующему If Answ = vbYes Then ' Если пользователь хочет обновить график, проверяем есть ли у потребителя базовые нагрузки if ConsPmax <> 0 Or ConsPmin <> 0 Or ConsPmin <> 0 Then PLoadTable.SetSel("") ' Загружаем график в таблицу "Графики нагрузок" ' Весь график помещаетcя в одной записи, в полях h0 - h23 ' Поэтому мы выбираем поля для объекта RS (recordset) динамически RS.MoveFirst While Not RS.EOF For i=1 To 24 If i<=9 Then RetVal=RS.Fields("h0"&i).Value Else RetVal=RS.Fields("h"&i).Value End If ' Добавляем новую запись к таблице "Графики нагрузок" и заполняем ее PLoadTable.AddRow PLNdx = PLoadTable.Size-1 PLoadTable.Cols("Num").Z(PLNdx) = ConsNum PLoadTable.Cols("NPoint").Z(PLNdx) = i PLoadTable.Cols("P").Z(PLNdx) = RetVal PLoadTable.Cols("Q").Z(PLNdx) = 0 Next RS.MoveNext Wend LoadedList = LoadedList + CStr(ConsNum) + " [" + ConsName + "]" + vbCrLf Else RejectedList = RejectedList + CStr(ConsNum) + " [" + ConsName + "]" + vbCrLf End if Else PresentList = PresentList + CStr(ConsNum) + " [" + ConsName + "]" + vbCrLf End If End If RS.Close Next ' После завершения работы закрываем БД и информируем ' пользователя о проделанной работе ADO.Close if Len(LoadedList) > 2 Then MsgBox "Графики загружены для :" & LoadedList End if if Len(RejectedList) > 2 Then MsgBox "Не имеют базовых нагрузок :" & RejectedList End if if Len(PresentList) > 2 Then MsgBox "Уже имеют график нагрузки:" & PresentList End if
© «Битрикс», 2001-2006 |