Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Обращение к записи, имеющей прерывание / 11 сообщений из 11, страница 1 из 1
08.06.2017, 13:40
    #39468597
Konstantin_RV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к записи, имеющей прерывание
Всем доброго дня.
Подскажите пожалуйста, кто знает, как обратиться к записи, которая имеет прерывание.
Поясню. Ведется архив данных, где в sql записывается раз в сутки значение и эти значения с 1 января по актуальную дату необходимо записать в столбец в Excel. Если запись производилась каждый день, то тут проблем нет, но если, например в какой то из дней ( 1 или несколько дней) записи не было по причине отключения сервера, то получается обратиться к данным только до момента отключения. Единственным способ, который удалось реализовать - это сделать 2 цикла: с 1.01 по день остановки и с дня возобновления работы по актуальный день. Так было в 2016 году. В коде можно это увидеть. Проблема в том, что при каждом прерывании есть необходимость переписывать код.
Теперь вопрос: как обратиться в одном цикле ко всем данным, а там где их нет, записать "0". Хочется сделать универсальный код, чтоб не приходилось дописывать при каждом сбое.

'
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
ЗАПОЛНЕНИЕ ДАННЫХ ПО ЧИЛЛЕРУ	
	'обращение к тегу
 	sSQL = "Tag:R,'Archive_Day\Sum_P_Load_CH','" + CStr(PrevYear) + "-01-02 02:10:00.000','" + _
										CStr(ActYear) + "-" + CStr(ActMonth) + "-" + CStr(ActDay) + " 04:10:00.000'"

	' connecting
	Set conn = CreateObject("ADODB.Connection")
	conn.ConnectionString = sConnection
	conn.CursorLocation = 3
	conn.Open
				
	' Getting data
	Set oRs = CreateObject("ADODB.Recordset")
	Set oCom = CreateObject("ADODB.Command")
	oCom.CommandType = 1
	Set oCom.ActiveConnection = conn
	oCom.CommandText = sSQL
		
	Set oRs = oCom.Execute
	
	'Working With data
	oRs.MoveFirst
			
	If PrevYear = 2016 Then				
		For i = 179 To 185
			WS.Cells(i+3,10) = 0				
		Next 
		For i = 0 To 178
			WS.Cells(i+3,10) = oRs.fields(2).Value	
			oRs.MoveNext
			
		Next
		For i = 186 To k
			If Not(oRs.EOF) Then 
				WS.Cells(i+3,10) = oRs.fields(2).Value				
				oRs.MoveNext
			Else
				Exit For
			End If	
		Next
	Else 
		For i = 0 To k
			If Not(oRs.EOF) Then 
				WS.Cells(i+3,10) = oRs.fields(2).Value				
				oRs.MoveNext
			Else
				Exit For
			End If	
		Next
	End If 
		
	' Clear objects
	Set oCom = Nothing
	oRs.Close
	Set oRs = Nothing
	conn.Close
	Set conn = Nothing
...
Рейтинг: 0 / 0
08.06.2017, 14:14
    #39468644
iMrTidy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к записи, имеющей прерывание
Konstantin_RV,

Весьма логичным будет написать вид или процедуру, которая возвращает уже нужные данные.
...
Рейтинг: 0 / 0
08.06.2017, 14:28
    #39468666
Konstantin_RV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к записи, имеющей прерывание
авторВесьма логичным будет написать вид или процедуру, которая возвращает уже нужные данные.
А как это сделать? Может кусок кода дадите?
...
Рейтинг: 0 / 0
08.06.2017, 14:45
    #39468693
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к записи, имеющей прерывание
Покажите лучше что получается в переменной sSQL (в том виде, в каком оно попадает в oCom.CommandText), потому как выглядит оно в коде как голимый бред.
...
Рейтинг: 0 / 0
08.06.2017, 14:46
    #39468694
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к записи, имеющей прерывание
А заодно укажите,какой SQL-сервер используется (а лучше процитируйте conn.ConnectionString).
...
Рейтинг: 0 / 0
08.06.2017, 14:57
    #39468712
Konstantin_RV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к записи, имеющей прерывание
Код: vbnet
1.
2.
3.
4.
5.
	'Making Connection String
	sProvider = "Provider=WinCCOLEDBProvider.1;"
	sDataSourceName = "Catalog=" + HMIRuntime.Tags("@DatasourceNameRT").Read + ";"
	sServer = "Data Source=" + ServerName + "\WinCC;Trusted Connection=yes;"
	sConnection = sProvider + sServer + sDataSourceName 	
...
Рейтинг: 0 / 0
08.06.2017, 15:01
    #39468723
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к записи, имеющей прерывание
От Вас просили полученное значение, а не код сборки.
...
Рейтинг: 0 / 0
08.06.2017, 15:02
    #39468724
Konstantin_RV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к записи, имеющей прерывание
Код: vbnet
1.
sSQL = "Tag:R,'Archive_Day\Sum_P_Load_CH','2017-01-01 02:30:00.000','2017-06-08 03:40:00.000'"
...
Рейтинг: 0 / 0
08.06.2017, 15:05
    #39468731
Konstantin_RV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к записи, имеющей прерывание
В sSQL примерно вот так.
...
Рейтинг: 0 / 0
08.06.2017, 15:08
    #39468735
Konstantin_RV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к записи, имеющей прерывание
Прошу не судить строго. Основной профиль в течение 10 лет- программирование промышленных контроллеров. Прилетела задача создать отчет из архивных тегов в Excel. Пришлось изучать VBA. Отчет вроде работает, но вот такие нюансы портят всё, поэтому прошу помощи у знающих людей.
...
Рейтинг: 0 / 0
08.06.2017, 15:33
    #39468764
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к записи, имеющей прерывание
Ага... это ни разу не SQL. А разбираться в WinCC-языке запросов тупо лениво.

Из кода видно, что Вы берёте только данные из третьего поля набора (oRs.fields(2).Value). Покажите собственно структуру набора (сколько полей, смысл каждого поля) и пример (десяток записей) этого набора с тем самым "прерыванием" в середине. Пример оформите в тег "Table", значения полей разделяем запятыми, перед отправкой проверяем результат нажатием кнопки "Просмотр". Пример позволит создать вменяемый VB(A)-код? заполняющий эти "прерывания".
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Обращение к записи, имеющей прерывание / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]