Авторизация
Visitors |
|
53674871 |
|
|
8008 |
|
|
98 |
|
|
|
Главная / Программа
Этот скрипт был разработан для ПО ActOpus для ввода данных из SQL базы данных (с помощью ADO). Может использоваться в качестве примера взаимодействия с SQL БД.
Скрипт "Загрузка графиков с SQL" предназначен для ввода данных по графикам конечных потребителей в ПО Актуализации "ActOpus".
Для работы скрипта в ПО должен быть загружен файл БД актуализации за требуемые сутки. При работе скрипт анализирует содержимое поля "Код макета" в таблице "Потребители2" и по данному коду обеспечивает загрузку графиков потребителей в таблицу "Графики нагрузок", выполняя необходимое индексирование по номерам точек и номерам потребителей. Для работы скрипта требуется возможность связи с БД SQL. Доступ к БД скрипт осуществляет с помощью ADO.
Скрипт должен быть расположен в подкаталоге Macro в каталоге установки ПО Актуализации.
Запуск скрипта осуществляется с помощью команды "Выполнить" меню "Расчеты". Кроме того, возможен запуск скрипта с помощью оболочки макро - команда "Макро..." меню "Расчеты". При выполнении скрипта выводится окно выбора даты, за которую из БД будут введены графики нагрузки потребителей.
При загрузке графиков скрипт в отношении каждого потребителя действует по следующему алгоритму:
- Выделяется код макета в таблице "Потребители2" и выполняется выборка из БД SQL для проверки наличия данных.
- Выполняется проверка наличия заданных базовых нагрузок потребителей в таблице "Потребители2" (Поля Pmax, Pmid, Pmin). Если все три поля пусты, график не загружается и выводится предупреждение. С помощью очистки этих полей можно искусственно заставить скрипт не загружать график для выбранных потребителей.
- Выполняется проверка наличия графика для текущего потребителя в БД Актуализации. Если хотя бы одна точка графика потребителя присутствует в таблице "Графики нагрузок", выдается запрос на обновление графика. При положительном ответе, график в таблице "Графики нагрузок" для данного потребителя стирается и вводится из БД SQL заново. При отрицательном ответе график, имеющийся в таблице "Графики нагрузок", не изменяется.
По окончании работы скрипт может вывести до трех окон сообщений:
- Список потребителей, по которым график успешно загружен. Выводится при наличии успешно введенных графиков.
- Список потребителей, по которым график присутствовал в таблице "Графики нагрузок" и пользователь отказался от его обновления из БД SQL. Выводится при наличии потребителей, по которым график не был обновлен.
- Список потребителей, по которым отсутствовали базовые нагрузки. Выводится при наличии таких потребителей.
В данных окнах отображаются только потребители, которые имели график в БД SQL на выбранную пользователем дату.
При обращении к базе скрипт использует один запрос для каждого потребителя по таблице PDG_h:
strSQLquery="SELECT * FROM PDG_h WHERE (kpo_obj='" & MktCode &_
"') And (data='" & strDate & "') And (id_pok=33)"
При этом подразумевается, что код показателя "Заявка на почасовой график потребления" имеет номер 33 (id_pok=33).
Set ADO = CreateObject("ADODB.Connection")
Set RS = CreateObject("ADODB.Recordset")
DSN = "Driver=SQL Server;UID=user;PWD=letmein;SERVER=sqlserver;DATABASE=Graphic;Mode=Read"
ADO.Open(DSN)
strDate = Rastr.SendCommandMain(7,"","",0)
DateDD = Left(strDate,2)
DateYY = Right(strDate,2)
DateMM = Mid(strDate,3,2)
strDate = DateMM & "." & DateDD & "." & DateYY
LoadedList = vbCrLf
RejectedList = vbCrLf
PresentList = vbCrLf
Set ConsumerTable = Rastr.Tables("Consumer2")
Set PLoadTable = Rastr.Tables("Pload")
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)
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
if PLoadTable.Count > 0 Then
Answ = MsgBox ("По потребителю " & ConsNum & " [" & ConsName & "] график уже" &_
" загружен. Обновить ?", vbYesNo)
if Answ = vbYes Then
PLoadTable.DelRows
End if
End if
If Answ = vbYes Then
if ConsPmax <> 0 Or ConsPmin <> 0 Or ConsPmin <> 0 Then
PLoadTable.SetSel("")
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
|
|
|