Member 11385046 Ответов: 1

Добавление дат в базу данных с возможностью повторения VB.NET


Я боролся с режимом повторения для вставки моих дат в базу данных.
Я способен добавлять начальные и конечные дни, но не нашел хорошего способа повторять свои дни в течение определенного периода времени.
Пользователь должен быть способен повторять событие ежедневно, еженедельно, ежемесячно и ежегодно.
Все учебники в интернете предназначены либо для ASP.NET/C#. Я использую VB.NET и база данных доступа.
Заранее спасибо.

PIEBALDconsult

Вам это не понравится, но : http://en.wikipedia.org/wiki/ISO_8601#Repeating_intervals

Member 11385046

Так есть ли какой-то способ реализовать это в VB-коде ?

Sergey Alexandrovich Kryukov

Что вы подразумеваете под словом "ВБ"? Что это значит, ASP/C#? Я никогда не слышал о C# , используемом с ASP. Если ты имеешь в виду ... APS.NET-это не аспид.
—СА

Member 11385046

В настоящее время я пишу местную программу в VB.NET-да. Все учебники для повторяющихся дат либо написаны на C#, либо ASP.NET.

Sergey Alexandrovich Kryukov

Хорошо, спасибо Вам за разъяснение. Тогда лучше нажмите кнопку "улучшить вопрос" и добавьте этот ".NET" в "VB" и "ASP", чтобы сделать ваш пост не таким запутанным. Вы тот, кто заинтересован в этом больше всего.
Кроме того, будет полезно точно определить, как должен работать "повторяющийся". Я не думаю, что это ясно.
—СА

Member 11385046

Спасибо за информацию, вопрос обновляется !

Sergey Alexandrovich Kryukov

Нет проблем, но вы пропустили еще два места, которые я обновил для вас... :-)
—СА

1 Ответов

Рейтинг:
9

Maciej Los

Если я вас хорошо понимаю...

База данных MS Access не поддерживает повторение запросов. Вы должны написать метод, как показано ниже:

Dim startDate As Date = Date.Today()
Dim endDate As Date = startDate.AddDays(15)
Dim currDate As Date = startDate

Do While (currDate < endDate)
    Console.WriteLine("INSERT INTO TableName (StartDate, EndDate) VALUES ({0}, {1})", currDate, endDate)
    currDate = currDate.AddDays(1)
Loop


Как вы можете видеть, я использую Делать... Петля[^] оператор для циклического перебора дат.


Member 11385046

Спасибо,
Я пытался заменить консоль.Команда Writeline с командами Oledb.
Он не работает и выдает ошибку : http://i.imgur.com/WqB1k3v.png
Есть ли какой-нибудь способ решить эту проблему ?
Руководство По Публичному Классу

Private Sub Manual_Load(отправитель как система.Объект, как система.EventArgs) Обрабатывает MyBase.Load
'Команды и соединения
Dim con как новый OleDb.OleDbConnection
Дим УМК как нового oledb для.Объект oledbcommand
Dim Sql Как Строка
против.Параметр ConnectionString = "Поставщика=Майкрософт.Туз.Oledb для.12.0;Источник данных=с:\TonesToDoList\1tabel1.# то # "
против.Открыть()
-Повторение
Дим начальная дата как дата = дата.Сегодня()
Дим конечная дата как дата = начальная дата.AddDays(15)
Dim currDate As Date = startDate

Do While (currDate < endDate)
Sql = ("вставить в tblManual (StartDate, EndDate)" & "значения ({0}, {1})", currDate, endDate)
УМК.Метод executenonquery()
currDate = currDate.AddDays(1)
Петля
против.Закрывать()
Конец Подводной Лодки

End Класса

Maciej Los

Заменить этот: Sql = ("INSERT INTO tblManual (StartDate, EndDate)" & "VALUES ({0}, {1})", currDate, endDate) с: Sql = String.Format("INSERT INTO tblManual (StartDate, EndDate) VALUES (#{0}#, #{1}#)", currDate, endDate)

Member 11385046

Текущий код ничего не добавляет в базу данных. Однако код работает без ошибок.

Общественного Класса Form1

Private Sub Recurrence_Click(отправитель как система.Объект, как система.EventArgs) Обрабатывает Повторение.Щелчок
-Делкаререн
Тусклый cnnRecurrence как новый OleDb.OleDbConnection
Dim scmdRecurrence как новая команда OleDb.Oledb
Dim SQL как строка
'Параметр connectionString
cnnRecurrence.ConnectionString = My.Settings._1tabel1ConnectionString
scmdRecurrence.Соединение = cnnRecurrence
cnnRecurrence.Открыть()
-Повторение
Дим начальная дата как дата = дата.Сегодня()
Дим конечная дата как дата = начальная дата.AddDays(15)
Dim currDate As Date = startDate
Do While (currDate < endDate)
SQL = строка.Формат("вставить в tblManual (StartDate, EndDate) значения (#{0}#, #{1}#)", currDate, endDate)
currDate = currDate.AddDays(1)
Петля
cnnRecurrence.Закрывать()
Конец Подводной Лодки
End Класса

Maciej Los

Потому что ты никогда не звонишь: 'REM: after SQL = String.Format("...")
scmdRecurrence.CommandText = SQL
scmdRecurrence.ExecuteNonQuery()
'REM: before currDate = ....
:)

Member 11385046

Спасибо ,это удачно ! Итак, это для ежедневных случаев, так как же мне добавить ежемесячные/еженедельные/ежегодные события?

Maciej Los

Используйте ту же логику и значение datetime.Метод AddMonth() [^] и-или AddYears() метод ;)
Пожалуйста, примите мой ответ (зеленая кнопка) - формально, чтобы удалить ваш вопрос из списка без ответа.

Bartt_dmr

Пожалуйста, помогите мне.

Я адаптировал приведенный выше пример к asp.net (vb), но он записывает ту же дату.

Пример: с 08/01/2019 по 31.08.2019, интервал 7 дней.

Правильным было бы записать 08/01 ... 08/08 ... 15/08 ... 22/08 ... 29/08 ... Но записал эти 5 дней как 01/08.

Следует коду и заранее благодарит.

Dim conexao как SqlConnection
Dim cmd как SqlCommand
Dim sql как строка

Дим начальная дата как дата = txtDataCurso.Текст
Dim endDate As Date = startDate.AddDays(txtIntervalo.Text) - "этот интервал представляет собой количество дней (конечная дата - начальная)"
Dim currDate As Date = startDate

Do While (currDate < endDate)

sql = "вставить в tre_Eventos (Id_Curso, DataEvento) значения ('" & ddlCursos.SelectedValue &ампер; "', '" &амп; конечная дата &усилителя; "')"

currDate = currDate.AddDays(7)

Попробуй

conexao = новый SqlConnection(strConn)

conexao.Открыть()

cmd = New SqlCommand(sql, conexao)

УМК.Метод executenonquery()

conexao.Закрывать()

SetFocus(Label1)

Метка1.Видимое = Истинное
Этикетка 1.Text = "Evento Cadastrado com Sucesso"

Поймать

SetFocus(Label1)

Метка1.Видимое = Истинное
Этикетка 1.Текст = "Ocorreu um erro!" + Err.описание

Конец Попытки