Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
34 / 34 / 6
Регистрация: 24.11.2015
Сообщений: 330

Привести VBA модуль Function на VB.NET

22.12.2015, 16:00. Показов 2603. Ответов 39
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как перевести этот код на Vb.Net модуль:

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Option Compare Database
Option Explicit
 
Public Function JoinStrOnGrp7(on_id As Integer) As String
 
Dim db As Database
Dim rs As Recordset
 
Set db = CurrentDb()
Set rs = db.OpenRecordset("SELECT [Предмет] FROM [t7] WHERE [ID]=" & Str(on_id))
JoinStrOnGrp7 = ""
Do While Not rs.EOF
   If JoinStrOnGrp7 <> "" Then JoinStrOnGrp7 = JoinStrOnGrp7 + ","
   JoinStrOnGrp7 = JoinStrOnGrp7 + Nz(rs![Предмет], "                                      ")
   rs.MoveNext
Loop
 
End Function
Вложения
Тип файла: rar 123.rar (47.6 Кб, 6 просмотров)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.12.2015, 16:00
Ответы с готовыми решениями:

Невозможно соединиться с сервером(модуль Net::XMPP и Net::Jabber)
Добрый день! Пишу jabber бота на perl и столкнулся с такой проблемой -- мой скрипт не коннектится к серверу. Привожу пример кода: ...

VBA Function
Есть готовая функция написанная в VBA. Хочу узнать, что же значит каждая строка, да разобраться :) Напишите пожалуйста, кому не тяжело,...

Работа с Excel средствами VB.net. Как перевести код из VBA в VB.net?
Коллеги, добрый день! Нужна помощь! В свое время был написан макрос для Excel, но прошло и потребности выросли. Было принято...

39
Заблокирован
25.12.2015, 08:54
Студворк — интернет-сервис помощи студентам
XIST, Функцию можно вообще то использовать внутри Sql проса?
Пожалуйста помогите
0
34 / 34 / 6
Регистрация: 24.11.2015
Сообщений: 330
25.12.2015, 09:12  [ТС]
MGTU, Мне тоже нужен ответ на такой вопрос! А вам зачем это все?
0
 Аватар для edward_freedom
1569 / 1448 / 303
Регистрация: 01.10.2011
Сообщений: 2,636
25.12.2015, 12:09
MGTU, Я использовал в sqlserver вот так. SendMessage - это функция, @id, @to_whom - параметры функции
C#
1
2
3
4
5
6
7
8
string sql = "SendMessage";
                    SqlCommand cmd = new SqlCommand(sql, connection);
                    cmd.Parameters.AddWithValue("@id", GLOBAL.ID);
                    cmd.Parameters.AddWithValue("@to_whom", Id);
                    cmd.Parameters.AddWithValue("@message", textBox1.Text);
 
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.ExecuteNonQuery();
В самой базе функция такая
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
ALTER PROCEDURE [dbo].[Registration](@LOGIN VARCHAR(50), @pass VARCHAR(50), @secret_question VARCHAR(50), @secret_reply VARCHAR(50))
    AS
BEGIN
        DECLARE @RESULT VARCHAR(50) = '0'
        DECLARE @CHECK VARCHAR(50)
            SELECT @CHECK =  u.login
            FROM Users AS u
            WHERE u.login = @LOGIN
            IF(@LOGIN = '')
                RETURN
            IF(@pass = '')
                RETURN
            IF(@secret_question = '')
                RETURN
            IF(@secret_reply = '')
                RETURN
        IF((SELECT COUNT(*) FROM Users AS u WHERE u.login = @LOGIN) = 0)
        BEGIN
            SELECT @RESULT = '1'
            INSERT INTO Users (login, pass, secret_question, secret_reply) VALUES(@login, @pass, @secret_question, @secret_reply)
        END
0
34 / 34 / 6
Регистрация: 24.11.2015
Сообщений: 330
03.02.2016, 07:27  [ТС]
подниму прошлую тему...... хотел бы получить более точный ответ на свой вопрос.
0
 Аватар для Andrey PSt
174 / 172 / 34
Регистрация: 23.12.2015
Сообщений: 300
Записей в блоге: 3
03.02.2016, 18:22
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Khaker_tt, функцию JoinStrOnGrp7 ты почти правильно описал, только незачем применять в ней Адаптер, т.к. он служит для связки данных из БД и контролов на форме. А в нашем случае достаточно считать данные из БД через OleDbDataReader.
Дальше. Не получится сделать SQL запрос с этой функцией, так как это делается в БД Access.
Поэтому предлагаю следующее решение:
Проставлять результаты этой функции после SQL-запроса, уже в DataTable

VB.NET
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
    Sub conn1()
        Dim Con As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=1234.mdb")
        Dim stSQL As String
 
        'stSQL = "SELECT t7.ID, t7.student.Name AS ФИО, t7.klass.Name AS Класс, t7.data_ocen AS Дата, " & JoinStrOnGrp7("id") & " AS Сообшение FROM t7 GROUP BY t7.ID, t7.student.Name, t7.klass.Name, t7.data_ocen, " & JoinStrOnGrp7("id") & " HAVING (((t7.data_ocen)=Date())) ORDER BY t7.student.Name;"
 
        stSQL = "SELECT t7.ID, t7.student.Name AS ФИО, t7.klass.Name AS Класс, t7.data_ocen AS Дата, t7.student.Name AS Сообшение FROM t7 GROUP BY t7.ID, t7.student.Name, t7.klass.Name, t7.data_ocen HAVING (((t7.data_ocen)<Date())) ORDER BY t7.student.Name;"
 
        Dim da As New OleDbDataAdapter(stSQL, Con)
        Dim dt As New DataTable
        da.Fill(dt)
 
        For Each RW In dt.Rows
            RW("Сообшение") = JoinStrOnGrp7(RW("ID"))
        Next
 
        With DataGridView1
            .DataSource = dt
            .Columns(0).HeaderText = "№ "
            .Columns(0).Width = 50
            .Columns(1).Width = 150
            .Columns(2).Width = 50
            .Columns(3).Width = 70
            .Columns(4).Width = 350
            
        End With
    End Sub
 
    Public Function JoinStrOnGrp7(on_id As Integer) As String
        Dim Con As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=1234.mdb")
        Dim dbCmd As OleDbCommand
        Dim dbRead As OleDbDataReader
        Dim stSQL, rFields As String
 
        Con.Open()
        stSQL = "SELECT [Предмет] FROM [t7] WHERE [ID]=" & on_id
        dbCmd = New OleDbCommand(stSQL, Con)
        dbRead = dbCmd.ExecuteReader()
 
        JoinStrOnGrp7 = ""
        If dbRead.HasRows Then 'проверка на наличие строк в запросе
 
            Do While dbRead.Read()
                If JoinStrOnGrp7 <> "" Then JoinStrOnGrp7 = JoinStrOnGrp7 + ","
                If dbRead.GetValue(0) Is DBNull.Value Then
                    rFields = " "
                Else
                    rFields = dbRead.GetValue(0).ToString
                End If
                JoinStrOnGrp7 = JoinStrOnGrp7 + rFields
 
            Loop
        End If
        dbRead.Close()
        dbCmd.Dispose()
        Con.Close()
    End Function
Вложения
Тип файла: rar WinApp2_t7.rar (249.2 Кб, 4 просмотров)
2
34 / 34 / 6
Регистрация: 24.11.2015
Сообщений: 330
04.02.2016, 07:40  [ТС]
Andrey PSt, Спасибо огромное. Всё работает.
0
34 / 34 / 6
Регистрация: 24.11.2015
Сообщений: 330
05.02.2016, 18:32  [ТС]
Andrey PSt, Здравствуйте. У меня ещё возник вопрос. Хочу чтобы в сформированный смс добавить число + Фамилия и Первую
букву от Имя учеников. Например
05.02.2016;Иванов И;Алгебра - 2;Геометрия - 3;Гос.язык - 4;Информатика - 5; Заранее спасибо.
0
 Аватар для Andrey PSt
174 / 172 / 34
Регистрация: 23.12.2015
Сообщений: 300
Записей в блоге: 3
05.02.2016, 19:50
Вот доработанная функция:

VB.NET
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
    Public Function JoinStrOnGrp7(on_id As Integer) As String
        Dim Con As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=1234.mdb")
        Dim dbCmd As OleDbCommand
        Dim dbRead As OleDbDataReader
        Dim stSQL, rFields, Name As String
        Dim p As Integer
        Dim dateF As Date
        Name = "ФИО"
 
 
        Con.Open()
        stSQL = "SELECT student.Name, data_ocen, [Предмет] FROM [t7] WHERE [ID]=" & on_id
        dbCmd = New OleDbCommand(stSQL, Con)
        dbRead = dbCmd.ExecuteReader()
 
        JoinStrOnGrp7 = ""
        If dbRead.HasRows Then 'проверка на наличие строк в запросе
 
            Do While dbRead.Read()
                If JoinStrOnGrp7 <> "" Then JoinStrOnGrp7 = JoinStrOnGrp7 + ","
                If dbRead.GetValue(2) Is DBNull.Value Then
                    rFields = " "
                Else
                    rFields = dbRead.GetValue(2).ToString
                End If
                JoinStrOnGrp7 = JoinStrOnGrp7 + rFields
                Name = dbRead.GetValue(0).ToString
                dateF = dbRead.GetValue(1)
            Loop
        End If
 
        Name = Name.Replace("  ", " ")
        p = Name.IndexOf(" ")
        If p > -1 Then
            Name = Name.Substring(0, p + 2)
        End If
        JoinStrOnGrp7 = Format(dateF, "dd.mm.yyyy") + "; " + Name + "; " + JoinStrOnGrp7
 
        dbRead.Close()
        dbCmd.Dispose()
        Con.Close()
    End Function
2
34 / 34 / 6
Регистрация: 24.11.2015
Сообщений: 330
06.02.2016, 09:03  [ТС]
Andrey PSt, Отлично работает. Спасибо ВАМ.

Добавлено через 13 часов 4 минуты
Andrey PSt, Всё работает конечно, но знаете в чём проблема? В том что на дату не реагирует.
Например мне нужно оценки на #06/02/2016# и их объединить а здесь сформирует за вес период. В первый предложенный функции работает как надо а на втором, после изменение, на это функция не обращает внимания.
0
 Аватар для MORGAN_2016
11 / 11 / 2
Регистрация: 29.12.2015
Сообщений: 56
06.02.2016, 09:17
Khaker_tt,
Зачем тебя формат Data и время я не пойму оно уже у тебя в базе сохраняется же. Но если так попробуй без "dd.mm.yyyy" может получится.
VB.NET
1
 JoinStrOnGrp7 = Format(dateF) + "; " + Name + "; " + JoinStrOnGrp7
0
34 / 34 / 6
Регистрация: 24.11.2015
Сообщений: 330
06.02.2016, 09:23  [ТС]
MORGAN_2016,
Цитата Сообщение от MORGAN_2016 Посмотреть сообщение
Зачем тебя формат Data и время я не пойму
Чтобы вывести определённые число в определённом формате.
Спасибо но это не помог.
0
 Аватар для Andrey PSt
174 / 172 / 34
Регистрация: 23.12.2015
Сообщений: 300
Записей в блоге: 3
06.02.2016, 10:44
Из 25 сообщения:

VB.NET
1
stSQL = "SELECT t7.ID, t7.student.Name AS ФИО, t7.klass.Name AS Класс, t7.data_ocen AS Дата, t7.student.Name AS Сообшение FROM t7 GROUP BY t7.ID, t7.student.Name, t7.klass.Name, t7.data_ocen HAVING (((t7.data_ocen)<Date())) ORDER BY t7.student.Name;"
Меняйти запрос как над. В нашем случае t7.data_ocen < Date(), т.е за время до текущей даты. Если надо за текущую дату, то t7.data_ocen = Date()
0
34 / 34 / 6
Регистрация: 24.11.2015
Сообщений: 330
06.02.2016, 11:05  [ТС]
Andrey PSt, Я так и проверил. Но не помог.
0
 Аватар для Andrey PSt
174 / 172 / 34
Регистрация: 23.12.2015
Сообщений: 300
Записей в блоге: 3
06.02.2016, 11:17
Так в базе то с который ты работаешь нет данных за сегодняшнее число. поэтому программа ничего и не выводит.
0
34 / 34 / 6
Регистрация: 24.11.2015
Сообщений: 330
06.02.2016, 11:37  [ТС]
Andrey PSt, Программа сформирует выводит всё что есть в базе. А мне надо допустим на сегодня. вчерашний оценки мне не нужна.

Добавлено через 12 минут
Andrey PSt, Розница двух функций:
Миниатюры
Привести VBA модуль Function на VB.NET   Привести VBA модуль Function на VB.NET  
0
 Аватар для Andrey PSt
174 / 172 / 34
Регистрация: 23.12.2015
Сообщений: 300
Записей в блоге: 3
06.02.2016, 12:00
Прописываем условие data_ocen=Date()
В процедуре con1()
VB.NET
1
 stSQL = "SELECT t7.ID, t7.student.Name AS ФИО, t7.klass.Name AS Класс, t7.data_ocen AS Дата, t7.student.Name AS Сообшение FROM t7 GROUP BY t7.ID, t7.student.Name, t7.klass.Name, t7.data_ocen HAVING (((t7.data_ocen)=Date())) ORDER BY t7.student.Name;"
В функции JoinStrOnGrp7
VB.NET
1
stSQL = "SELECT student.Name, data_ocen, [Предмет] FROM [t7] WHERE data_ocen=Date() AND [ID]=" & on_id
1
 Аватар для Andrey PSt
174 / 172 / 34
Регистрация: 23.12.2015
Сообщений: 300
Записей в блоге: 3
06.02.2016, 12:03
В таблицу добавить данные за сегодня.
Миниатюры
Привести VBA модуль Function на VB.NET  
0
34 / 34 / 6
Регистрация: 24.11.2015
Сообщений: 330
06.02.2016, 13:06  [ТС]
Andrey PSt, Спасибо. Я ВАМ благодарен.

Добавлено через 6 минут
Когда удалил WindowsApplication1.EXE из папки BIN программа пришёл в себя. Что это а прикол. До сих пор не пойму.
0
 Аватар для Andrey PSt
174 / 172 / 34
Регистрация: 23.12.2015
Сообщений: 300
Записей в блоге: 3
06.02.2016, 13:21
В папке bin/Debug находится последний скомпилированный экзешник, при каждом запуске проекта в Студии - экзешник перекомпилируется заново.
1
34 / 34 / 6
Регистрация: 24.11.2015
Сообщений: 330
06.02.2016, 13:32  [ТС]
Значить у меня проблема с компилятором VS почему то даже я вставил в форму новый объект не показал раньше. Слава Богу сейчас всё в порядке.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.02.2016, 13:32

VBA Exel, function max
Добрый день, нужна помощь в написании на первый взгляд простой функции поиска максимума. По сути она должна являться аналогом встроенной...

VBA function. Количество принимаемых параметров
У меня есть VBA функция: Function ModelByInv(inv As String) ModelByInv = DLookup(&quot;&quot;, &quot;&quot;, &quot; ='&quot; &amp; inv &amp; &quot;'&quot;) End Function Я присвоил...

VBA модуль дает ошибку
Здравствуйте, с наступающим всех! Друзья, VBA для меня пока лес густой, но деваться некуда и нужно отладить модуль ;( Скрин ошибки и...

Модуль VBA (объединить два кода)
Здравствуйте! подскажите ка можно вот в эту функцию (скрывает оболочку Access) Option Compare Database #If VBA7 Then #If Win64...

Как в Access97 создать модуль из VBA
Я изучил Help. Проблема вот в чем: среди стандартных коллекций в Database нет коллекции Modules. Она стоит отдельно. В Modules входят...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru