Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 31.10.2015
Сообщений: 23

VB script - Create_database

19.10.2016, 17:10. Показов 1529. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Господа, всем доброго времени суток. Имеется скрипт:
Visual Basic
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
Sub S02_Create_new_table(ByRef Database_Name)
'////////////////////////////////////////////////////////////////
' en: Creating a new table in the SQL database 
' de: Erstellen einer neuen Tablle in des SQL Datenbank
' Created: 19-07-2012
' Version: v1.0
' Author:  HH 
'////////////////////////////////////////////////////////////////
 
'Declaration of local tags - Deklaration von lokalen Variablen
Dim conn, rst, SQL_Table
 
On Error Resume Next
 
Set conn = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.Recordset")
 
'Open data source - Datenquelle öffnen
conn.Open "Provider=MSDASQL;Initial Catalog=" & SmartTags("szDatabase") & ";DSN="&Database_Name&"" 'DSN= Name of the ODBC database - DSN= Name der ODBC-Datenbank
 
'Error routine - Fehlerroutine
If Err.Number <> 0 Then
    ShowSystemAlarm "Error #" & Err.Number & " " & Err.Description
    Err.Clear
    Set conn = Nothing
    Exit Sub
End If
 
 
'Create table - Tabelle erstellen
'Definition of SQL table - Definition der SQL-Tabelle
SQL_Table = "CREATE TABLE "& SmartTags("szTableName") & " (Nr SMALLINT, " _
            & SmartTags("szName_1") & " CHAR(30), " & SmartTags("szName_2") & " SMALLINT, " _
            & SmartTags("szName_3") & " SMALLINT)"
 
'Execute - Ausführen
Set rst = conn.Execute(SQL_Table)
 
'Error routine - Fehlerroutine 
If Err.Number <> 0 Then
    ShowSystemAlarm "Error #" & Err.Number & " " & Err.Description
    Err.Clear
    'Close data source - Datenquelle schließen
    conn.close
    Set conn = Nothing
    Set rst = Nothing
    Exit Sub
End If
 
'Close data source - Datenquelle schließen
conn.close
 
Set rst = Nothing
Set conn = Nothing
 
End Sub
Скрипт взят с официального форума Siemens для доступа к SQL из скада системы Wincc advanced. Скрипт полностью рабочий, но имеются некоторые трудности в понимании как все это работает.
В частности: не очень понятно как работает свойство Number объекта Err. Опишите, пожалуйста механизм как эта штука "отлавливает" ошибки? Если к примеру такая ДБ уже есть, то как все происходит? В силу незнания, не могу корректно задать вопрос. Где возникает ошибка в таком случае в SQL и тогда Err.Number транслирует ее в WicCC?
Сильно не ругайте, тут я полный профан.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.10.2016, 17:10
Ответы с готовыми решениями:

Не работает сокращение <% %> и не скрывается код,расположенный между <script></script>
Помогите,пожалуйста!У меня не работает сокращение &lt;% %&gt; и не скрывается код,расположенный между &lt;script&gt;&lt;/script&gt; Когда пишу...

Вызов удаленного файла через <script src=....></script>
на странице имеется код: &lt;div id='Output'&gt; &lt;script src='http://www.xxx.ru/xxx.asp'&gt;&lt;/script&gt; &lt;/div&gt; &lt;SCRIPT...

Вырезать из текста всё что между <script и <script>
вот такой текст лежит в переменной php = &lt;html&gt; &lt;head&gt; &lt;script type=&quot;text/javascript&quot;...

19
70 / 62 / 19
Регистрация: 03.05.2013
Сообщений: 397
20.10.2016, 22:08
Err - это объект, который содержит данные по последней ошибке в экземпляре твоего "скрипта", поэтому Err.Number - это ид. номер последней ошибки.
Цитата Сообщение от WinCC Посмотреть сообщение
On Error Resume Next
- убери и будет понятно откуда ноги растут.
0
0 / 0 / 0
Регистрация: 31.10.2015
Сообщений: 23
21.10.2016, 10:34  [ТС]
Спасибо за ответ, но это как раз понятно, просто я не так выразился... Мне не понятен сам объект err или класс или что это такое, не могу про него в инете найти...нахожу только метод самого ADO который содержится в объекте ADODB.Connection. А откудо это Err. не понятно... То что эта хрень возвращает мне номер ошибки это ясно, но как?

Добавлено через 10 часов 34 минуты
И еще вопрос запись Set rst = CreateObject("ADODB.Recordset"), как я понял означает что создается объект rst класса ADODB.Recordset с его св-ми и методами, а если дальше в коде следует к примеру, Set rst = conn.Execute(SQL_Table) (Set conn = CreateObject("ADODB.Connection")), то тогда можно считать что св-ва и методы у rst от CreateObject("ADODB.Recordset") уже не наследуются а наследуются от conn.Execute(SQL_Table) или rsy теперь обладает св-ми и методами двух объектов?
0
70 / 62 / 19
Регистрация: 03.05.2013
Сообщений: 397
21.10.2016, 15:31
Цитата Сообщение от WinCC Посмотреть сообщение
conn.Execute(SQL_Table) (Set conn = CreateObject("ADODB.Connection"))
- это тоже
Цитата Сообщение от WinCC Посмотреть сообщение
класса ADODB.Recordset
err - это объект бейсика. https://msdn.microsoft.com/en-... 2147217396
1
0 / 0 / 0
Регистрация: 31.10.2015
Сообщений: 23
21.10.2016, 16:08  [ТС]
Т.е. если я создал объект Set conn = CreateObject("ADODB.Connection") то я могу автоматически использовать и методы других объектов таких как: Recordset и Command - библиотеки ADO? К примеру MoveFirst объекта record (например есть еще у меня скрипт где создается объект Set rst = CreateObject("ADODB.Recordset") но если эту запись закоментить, то дальше в скрипте встречаются строки типа rst.MoveNext (а MoveNext это метод принадлежащий .Recordset) то эти строки работают.

Добавлено через 20 минут
Вот скрипт про который я говорил
Visual Basic
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
Sub S07_Show_all_entries_of_a_table(ByRef Database_Name)
'////////////////////////////////////////////////////////////////
' en: The script reads the indicated data record
' de: Das Skript liest den angegebene Datensatz
' Created: 19-07-2012
' Version: v1.0
' Author:  HH
'////////////////////////////////////////////////////////////////
 
'Declaration of local tags - Deklaration von lokalem Variablen
Dim conn, rst, SQL_Table, i, j
 
On Error Resume Next
 
Set conn = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.Recordset")
 
'Open data source - Datenquelle offnen
conn.Open "Provider=MSDASQL;Initial Catalog=" & SmartTags("szDatabase") & ";DSN="&Database_Name&"" 'DSN= name of the odbc database - DSN= Name der ODBC-Datenbank
 
'Error routine - Fehlerroutine
If Err.Number <> 0 Then
    ShowSystemAlarm "Error #" & Err.Number & " " & Err.Description
    Err.Clear
    Set conn = Nothing  
    Exit Sub
End If
 
 
'Select all entries of a table - Alle Eintrage der Tabelle selektieren
SQL_Table = "SELECT * FROM " & SmartTags("szTableName")
 
'Execute - Ausfuhren
Set rst = conn.Execute(SQL_Table)
 
'Order the table by the first column - Tabelle nach der ersten Spalte sortieren
SQL_Table = "SELECT * FROM " & SmartTags("szTableName") & " ORDER By " &  rst.Fields(0).Name  '* = Alle Daten ' * = all data
 
'Execute - Ausfuhren
Set rst = conn.Execute(SQL_Table)
 
'Error routine - Fehler Routine
If Err.Number <> 0 Then
    ShowSystemAlarm "Error #" & Err.Number & " " & Err.Description
    Err.Clear
    'Close data source - Datenquelle schlie?en
    conn.close
    Set conn = Nothing
    Set rst = Nothing 
    Exit Sub
End If
    
If Not (rst.EOF And rst.BOF) Then 
    'Vergleich ob "End of File" oder "Begin of File" ist, wenn nicht wird der Zeiger auf den Ersten Eintrag zurueckgesetzt
    'Compare if "End of File" or "Begin of File" exists, if not the pointer will be reset to the first entry
    
    rst.MoveFirst 'reset to 1st entry - auf 1. Eintrag zuruecksetzen 
    
    'Definition of local tags - Definiton von loklen Variablen
    j=0
    
    'Amount of the entries in the table - Anzahl der Tabelleneintrage
    Do
        j=j+1
        rst.MoveNext
    Loop Until rst.EOF
    
    rst.MoveFirst 'reset to 1st entry - auf 1. Eintrag zuruecksetzen Do
    
    'Selection with Arrow Buttons - Auswahl mit den Pfeil-Tasten
    If SmartTags("nTab")>=j-6 Then
        SmartTags("nTab")=j-6
    End If
    If SmartTags("nTab")<j-5 Then
        For i=1 To SmartTags("nTab")
            rst.MoveNext
        Next
    End If
    If SmartTags("nTab")<0 Then
        SmartTags("nTab")=0
    End If
    
    'Name of the columns - Name der Spalten
    SmartTags("szName_1") = rst.Fields(1).Name
    SmartTags("szName_2") = rst.Fields(2).Name
    SmartTags("szName_3") = rst.Fields(3).Name 
    
    For i=1 To 6    
        'Entries of the table - Eintrage in die Tabelle
        If rst.EOF Then
            SmartTags("Value_" & i & "_0") = 0
            SmartTags("Value_" & i & "_1") = 0
            SmartTags("Value_" & i & "_2") = 0
            SmartTags("Value_" & i & "_3") = 0
        Else
            SmartTags("Value_" & i & "_0") = rst.Fields(0).Value
            SmartTags("Value_" & i & "_1") = rst.Fields(1).Value
            SmartTags("Value_" & i & "_2") = rst.Fields(2).Value
            SmartTags("Value_" & i & "_3") = rst.Fields(3).Value 
            rst.MoveNext
        End If
    Next
    
    rst.close 
Else
    ShowSystemAlarm "No entries are available."
End If
 
'Close data source - Datenquelle schlie?en
conn.close
 
Set rst = Nothing
Set conn = Nothing
 
End Sub
И если закоментить строку Set rst = CreateObject("ADODB.Recordset"), то код будет работать но не пойму как работают методы Move без создания объекта Recordset.
0
70 / 62 / 19
Регистрация: 03.05.2013
Сообщений: 397
21.10.2016, 16:09
Цитата Сообщение от WinCC Посмотреть сообщение
conn.Execute(SQL_Table) (Set conn = CreateObject("ADODB.Connection"))
- еть присвоение существующего запроса SQL_Table объекту ADODB.Recordset, а Set rst = CreateObject("ADODB.Recordset") - это создание самого объекта ADODB.Recordset, в который вы потом можете грузить запросы, ADODB.Connection - это объект с указанием параметров подключения, по которым будут браться запросы. https://msdn.microsoft.com/EN-... 49010.aspx

Добавлено через 47 секунд
https://msdn.microsoft.com/en-... 49876.aspx
0
0 / 0 / 0
Регистрация: 31.10.2015
Сообщений: 23
21.10.2016, 16:18  [ТС]
Цитата Сообщение от CRIDEL Посмотреть сообщение
- еть присвоение существующего запроса SQL_Table объекту ADODB.Recordset,
Почему это присвоение объекту ADODB.Recordset, а не ADODB.Connection ведь там написано Set conn = CreateObject("ADODB.Connection")?
0
70 / 62 / 19
Регистрация: 03.05.2013
Сообщений: 397
21.10.2016, 16:23
Цитата Сообщение от WinCC Посмотреть сообщение
ведь там написано Set conn = CreateObject("ADODB.Connection")?
там -это где?
0
0 / 0 / 0
Регистрация: 31.10.2015
Сообщений: 23
21.10.2016, 16:36  [ТС]
Цитата Сообщение от CRIDEL Посмотреть сообщение
там -это где?
Сверху скрипт еще выложил, может вы не заметили.

Добавлено через 7 минут
Кароче говоря, я не очень понимаю как работает вот это rst.EOF или вот это rst.MoveNext, если закоментить вот это Set rst = CreateObject("ADODB.Recordset"). Т.к. согласно вот этому http://www.script-coding.com/ADO.html вот это -MoveNext является методом .recordset , а тут оно не создается? Или я что-то не так понимаю (нет ну конечно не так но тогда как?))
0
70 / 62 / 19
Регистрация: 03.05.2013
Сообщений: 397
21.10.2016, 16:37
там все правильно что непонятно-то?
0
0 / 0 / 0
Регистрация: 31.10.2015
Сообщений: 23
21.10.2016, 16:43  [ТС]
Цитата Сообщение от CRIDEL Посмотреть сообщение
там все правильно что непонятно-то?
Как можно использовать вот эти методы rst.EOF или вот это rst.MoveNext если не создавать объект .Recordset?

Добавлено через 1 минуту
Просто если закоментить вот это Set rst = CreateObject("ADODB.Recordset"), то скрипт работает также. Но как я понял MoveNext он только для объекта .Recordset?
0
70 / 62 / 19
Регистрация: 03.05.2013
Сообщений: 397
21.10.2016, 16:43
Цитата Сообщение от WinCC Посмотреть сообщение
Кароче говоря, я не очень понимаю как работает вот это rst.EOF или вот это rst.MoveNext, если закоментить вот это Set rst = CreateObject("ADODB.Recordset"). Т.к. согласно вот этому http://www.script-coding.com/ADO.html вот это -MoveNext является методом .recordset , а тут оно не создается? Или я что-то не так понимаю (нет ну конечно не так но тогда как?))
- короче ничего не понимаю - учи мат. часть))) https://msdn.microsoft.com/en-... 48865.aspx
0
0 / 0 / 0
Регистрация: 31.10.2015
Сообщений: 23
21.10.2016, 16:50  [ТС]
Цитата Сообщение от CRIDEL Посмотреть сообщение
- короче ничего не понимаю
Просто не могу понять как скрипт будет работать если закоментить 'Set rst = CreateObject("ADODB.Recordset"), как васик поймет что такое MoveNext и EOF (или это тоже объекты бейсика?) если объект Recordset не создан...
0
70 / 62 / 19
Регистрация: 03.05.2013
Сообщений: 397
21.10.2016, 17:07
Цитата Сообщение от WinCC Посмотреть сообщение
как скрипт будет работать если закоментить 'Set rst = CreateObject("ADODB.Recordset")
никак он тогда не будет работать, потому что объект не будет создан.
0
0 / 0 / 0
Регистрация: 31.10.2015
Сообщений: 23
21.10.2016, 17:11  [ТС]
Цитата Сообщение от CRIDEL Посмотреть сообщение
никак он тогда не будет работать, потому что объект не будет создан.
Работает, проверено, могу даже скрины прислать.
0
70 / 62 / 19
Регистрация: 03.05.2013
Сообщений: 397
21.10.2016, 17:16
,
Цитата Сообщение от WinCC Посмотреть сообщение
Работает, проверено, могу даже скрины прислать.
ну да, это из-за неявного объявления
Цитата Сообщение от WinCC Посмотреть сообщение
Dim conn, rst, SQL_Table, i, j
, что позволяет создать объект в момент присвоения: Set rst = conn.Execute(SQL_Table), лично я не любитель таких штук, хотя бы потому что дебаг будет затруднен, как в данном случае.
0
0 / 0 / 0
Регистрация: 31.10.2015
Сообщений: 23
21.10.2016, 17:35  [ТС]
Цитата Сообщение от CRIDEL Посмотреть сообщение
, что позволяет создать объект в момент присвоения: Set rst = conn.Execute(SQL_Table), лично я не любитель таких штук, хотя бы потому что дебаг будет затруднен, как в данном случае.
Т.е. объект Recordset все таки создается?

Добавлено через 10 минут
Только вот Dim указывает, вроде на явное объявление как раз..
0
70 / 62 / 19
Регистрация: 03.05.2013
Сообщений: 397
21.10.2016, 18:05
Цитата Сообщение от WinCC Посмотреть сообщение
Только вот Dim указывает, вроде на явное объявление как раз..
-Явно будет Dim rst as ADODB.Recordset
1
0 / 0 / 0
Регистрация: 31.10.2015
Сообщений: 23
21.10.2016, 18:07  [ТС]
Цитата Сообщение от CRIDEL Посмотреть сообщение
-Явно будет Dim rst as ADODB.Recordset
Спасибо,вы мне очень помогли!
0
70 / 62 / 19
Регистрация: 03.05.2013
Сообщений: 397
21.10.2016, 19:56
Цитата Сообщение от WinCC Посмотреть сообщение
Т.е. объект Recordset все таки создается?
- conn.Execute(SQL_Table) - возвращает как раз объект ADODB.Recordset, а объявленная переменная rst имеет тип variant - то есть любой тип, в момент Set а rst принимает тип присваиваемого объекта, то есть тот же пресловутый ADODB.Recordset. Вот как это происходит, так что да, наверное можно сказать что создается. А, вообще, читайте msdn - это инструкция пользователя.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.10.2016, 19:56
Помогаю со студенческими работами здесь

Вызов удаленного файла через <script src=....></script>
на странице имеется код: &lt;div id='Output'&gt; &lt;script src='http://www.xxx.ru/xxx.asp'&gt;&lt;/script&gt; &lt;/div&gt; &lt;SCRIPT...

Ошибка "The associated script cannot be loaded, please fix any compile errors and assign a valid script" (C#)
Решил на юнити сделать игру. Сейчас делаю движение врага но что не выходит и в юнити пишет: А вот сам код: using...

Есть ли такая инструкция на VB Script или на Java Script (или HTML), с помощью которой можно было сделать ссылку 'назад'?
Помогите, кто может! Есть ли такая инструкция на VB Script или на Java Script (или HTML), с помощью которой можно было сделать ссылку...

Где можно скачать Windows Script Component (Script Component Wizard в частности) ?
Где можно скачать Windows Script Component (Script Component Wizard в частности), только пожалуста дайте полную ссылку на страницу, а не...

<script type="text/javascript">. </script>
&lt;script type=&quot;text/javascript&quot;&gt; помогите пожалуйста есть форма отправки поискового запроса, на север и как принимать javascriptом весь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru