powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Обращение к записи, имеющей прерывание
11 сообщений из 11, страница 1 из 1
Обращение к записи, имеющей прерывание
    #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
Обращение к записи, имеющей прерывание
    #39468644
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konstantin_RV,

Весьма логичным будет написать вид или процедуру, которая возвращает уже нужные данные.
...
Рейтинг: 0 / 0
Обращение к записи, имеющей прерывание
    #39468666
Konstantin_RV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторВесьма логичным будет написать вид или процедуру, которая возвращает уже нужные данные.
А как это сделать? Может кусок кода дадите?
...
Рейтинг: 0 / 0
Обращение к записи, имеющей прерывание
    #39468693
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Покажите лучше что получается в переменной sSQL (в том виде, в каком оно попадает в oCom.CommandText), потому как выглядит оно в коде как голимый бред.
...
Рейтинг: 0 / 0
Обращение к записи, имеющей прерывание
    #39468694
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А заодно укажите,какой SQL-сервер используется (а лучше процитируйте conn.ConnectionString).
...
Рейтинг: 0 / 0
Обращение к записи, имеющей прерывание
    #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
Обращение к записи, имеющей прерывание
    #39468723
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
От Вас просили полученное значение, а не код сборки.
...
Рейтинг: 0 / 0
Обращение к записи, имеющей прерывание
    #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
Обращение к записи, имеющей прерывание
    #39468731
Konstantin_RV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В sSQL примерно вот так.
...
Рейтинг: 0 / 0
Обращение к записи, имеющей прерывание
    #39468735
Konstantin_RV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу не судить строго. Основной профиль в течение 10 лет- программирование промышленных контроллеров. Прилетела задача создать отчет из архивных тегов в Excel. Пришлось изучать VBA. Отчет вроде работает, но вот такие нюансы портят всё, поэтому прошу помощи у знающих людей.
...
Рейтинг: 0 / 0
Обращение к записи, имеющей прерывание
    #39468764
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага... это ни разу не SQL. А разбираться в WinCC-языке запросов тупо лениво.

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


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