На главную страницу
Русский English
 

RastrWin

Программа
Последние изменения
Часто задаваемые вопросы
Аннотация
Лицензирование и защита от копирования
Права Windows для пользователя RastrWin
Курсы
Компонентная архитектура
Интерфейс
Инструкция по установке
Документация, видео, презентации
Свидетельство о регистрации
RastrKZ
RastrMDP
RastrOS
ZamerSeti
Архив

Авторизация

Запомнить меня на этом компьютере
  Забыли свой пароль?
  Регистрация



Поиск по сайту


Подписка

Изменение параметров

Hits 67526087
8114
Hosts 3623606
2018
Visitors 53674871
8008

98


Главная / Программа

Работа с SQL

Версия для печати Версия для печати

Этот скрипт был разработан для ПО ActOpus для ввода данных из SQL базы данных (с помощью ADO). Может использоваться в качестве примера взаимодействия с SQL БД.

 


 

Скрипт "Загрузка графиков с SQL" предназначен для ввода данных по графикам конечных потребителей в ПО Актуализации "ActOpus".

Для работы скрипта в ПО должен быть загружен файл БД актуализации за требуемые сутки. При работе скрипт анализирует содержимое поля "Код макета" в таблице "Потребители2"  и по данному коду обеспечивает загрузку графиков потребителей в таблицу "Графики нагрузок", выполняя необходимое индексирование по номерам точек и номерам потребителей. Для работы скрипта требуется возможность связи с БД SQL. Доступ к БД скрипт осуществляет с помощью ADO.

Скрипт должен быть расположен в подкаталоге Macro в каталоге установки ПО Актуализации.

Запуск скрипта осуществляется с помощью команды "Выполнить" меню "Расчеты". Кроме того, возможен запуск скрипта с помощью оболочки макро - команда "Макро..." меню "Расчеты". При выполнении скрипта выводится окно выбора даты, за которую из БД будут введены графики нагрузки потребителей.

При загрузке графиков скрипт в отношении каждого потребителя действует по следующему алгоритму:

  • Выделяется код макета в таблице "Потребители2" и выполняется выборка из БД SQL для проверки наличия данных.
  • Выполняется проверка наличия заданных базовых нагрузок потребителей в таблице "Потребители2" (Поля Pmax, Pmid, Pmin). Если все три поля пусты, график не загружается и выводится предупреждение. С помощью очистки этих полей можно искусственно заставить скрипт не загружать график для выбранных потребителей.
  • Выполняется проверка наличия графика для текущего потребителя в БД Актуализации. Если хотя бы одна точка графика потребителя присутствует в таблице "Графики нагрузок", выдается запрос на обновление графика. При положительном ответе, график в таблице "Графики нагрузок" для данного потребителя стирается и вводится из БД SQL заново. При отрицательном ответе график, имеющийся в таблице "Графики нагрузок", не изменяется.

По окончании работы скрипт может вывести до трех окон сообщений: 

  1. Список потребителей, по которым график успешно загружен. Выводится при наличии успешно введенных графиков.
  2. Список потребителей, по которым график присутствовал в таблице "Графики нагрузок" и пользователь отказался от его обновления из БД SQL. Выводится при наличии потребителей, по которым график не был обновлен.
  3. Список потребителей, по которым отсутствовали базовые нагрузки. Выводится при наличии таких потребителей.

В данных окнах отображаются только потребители, которые имели график в БД 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




Программный комплекс «RasrWin»
Программный комплекс «RastrWin»
© «RastrWin», 1988-2019