Тихая просьба о помощи

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 10.11.2005 (Чт) 16:40

вот так сделал, и пошло

Код: Выделить всё
Public Shared Sub TimerEventProcessor(ByVal myObject As Object, _
    ByVal myEventArgs As EventArgs)
         Dim dMin As String
        dMin = "31"
        If (Date.Now.Minute = dMin) Then
            MessageBox.Show(Date.Now.Minute)       
        End If
    End Sub

    Public Shared Sub Main()
        AddHandler Timer1.Tick, AddressOf TimerEventProcessor
        Timer1.Interval = 60000
        Timer1.Start()
        While exitFlag = False
            Application.DoEvents()
        End While

    End Sub


А вот как из пограммы выходить это я правда не подумал

Но в конце концов ведь можно же (наверное : )) ):
кнопку вставить
команду для выхода написать
или процесс убить

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 10.11.2005 (Чт) 16:46

вот так сделал, и пошло

Код: Выделить всё
Public Shared Sub TimerEventProcessor(ByVal myObject As Object, _
    ByVal myEventArgs As EventArgs)
         Dim dMin As String
        dMin = "31"
        If (Date.Now.Minute = dMin) Then
            MessageBox.Show(Date.Now.Minute)       
        End If
    End Sub

    Public Shared Sub Main()
        AddHandler Timer1.Tick, AddressOf TimerEventProcessor
        Timer1.Interval = 60000
        Timer1.Start()
        While exitFlag = False
            Application.DoEvents()
        End While

    End Sub


А вот как из пограммы выходить это я правда не подумал

Но в конце концов ведь можно же (наверное : )) ):
кнопку вставить
команду для выхода написать
или процесс убить


Подскажи лучше, как получить вот такой формат:

(10.11.2005 14:45)

Я тут помучал Data.now, с Hour, Minute, DayofToday получил что угодно, кроме того, что мне надо

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 10.11.2005 (Чт) 16:54

Пошло-то оно пошло. Но когда минута будет 32, то сообщение показываться не будет (хотя события будут по-прежнему приходить)

Тебе зачем такой формат? 10.11.2005 14:45 Из чего ты его получить хочешь? На такой вопрос надо смотреть слова DateTime и Format.
Код: Выделить всё
Dim dt As DateTime = DateTime.Now
Msgbox dt.ToString("dd.MM.yyyy HH:mm")

http://msdn.microsoft.com/library/defau ... stopic.asp

Я тут помучал Data.now, с Hour, Minute, DayofToday получил что угодно, кроме того, что мне надо

Конкретнее вопрос задавай - тебе что получиь надо?
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 10.11.2005 (Чт) 17:14

Так в этом был , как мне казалось, и смысл, что бы опрашивать БД

Я хотел в БД в таком офрмате данные загонять

10.11.2005 14:45

досьавть их по средствам SQL

а потом сравнивать их с Data.now с интервалом 60 сек.

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 10.11.2005 (Чт) 17:32

Может это в принципе и не нужно, просто я хотел от секунд избавиться

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 10.11.2005 (Чт) 17:58

Мне кажется, что не нужно.
Процесс это никак не ускорит - скорее замедлит. А само вычисление следующего времени ничуть не длинне вычисления "надо сейчас запускать или нет". К тому же сервер может упасть и ты можешь пропустить время очередного запуска.

Нельзя дату хранить в базе как строку - иначе тебе придется сравнивать строки, а они наверняка окажутся разными (опоздаешь на одну секунду и все). Кстати, это тоже важный момент: надо давать какой-то небольшой запас. Иначе будешь пропускать много запусков.

Подумай еще над следующими вопросом: сколько примерно времени занимает обработка одного сервера. Возможно, минутный интервал слишком маленький. Представь, если есть 2 сервера - один требует каждую минуту, а второй каждый час. А обработка занимает, лдопустим, 50 секунд. Один раз в час ты будешь пропускать обработку первого сервера.

Если такая проблема есть, то придется еще о многопоточности думать.

Давай отвечай на эти вопросы. И дальше пиши сюда, как ты будешь вычислять, надо запускать или нет, для каждого типа.
Условия: У тебя есть стартовое время DateTime и интервал, заданный типом.
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 10.11.2005 (Чт) 18:36

Такой вопрос

Я создал таблицу с одним столбцом и набросал туда 7 записей в таком формате (10.11.2005 14:45:00) Иду от простого в сложному, что бы понять принцип.

Терепь после запроса:
SELECT * FROM Tabelle2 WHERE DT = (SELECT MIN(DT) FROM Tabelle2 WHERE DT > Now
Получаю, напрмер : 10.11.2005 18:45

Теперь я хочу присвоить результат переменной и сравнить его с Data.now

Так можно ?


Код: Выделить всё
Dim dMin As Date
        dMin = "SELECT * FROM Tabelle2 WHERE DT = (SELECT MIN(DT) FROM Tabelle2 WHERE DT > Now)"

        If Date.Now = dMin Then

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 10.11.2005 (Чт) 18:37

Странно, всталяю
OleDbConnection1.Open()
И не распознается, хотя в другом проекте все вроде бы точно так же

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 11.11.2005 (Пт) 12:35

1. Ты так и не ответил на вопрос, какая у тебя DB - Access, SQL Server?
2. Отвечая на твой вопрос, можно ли так - конечно, нет. Ты посмотри, что ты делаешь! Ты присваиваешь переменной типа дата строку и хочешь, чтобы у тебя исполнился запрос. Откуда эта несчастная строка знает, что там у нее написано?

Тебе нужен OLEDBDataReader
http://msdn.microsoft.com/library/defau ... stopic.asp

Строка коннекции зависит от базы.
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 11.11.2005 (Пт) 12:48

БД - Access

Я ответил (Добавлено 10.11.2005 (Чт) 11:41)

Смотрю твою ссылку

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 11.11.2005 (Пт) 13:24

Код: Выделить всё
Public Sub ReadMyData()
        Try
            Dim connStr As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=db1.mdb;"
            Dim myConnection As New OleDbConnection(connStr)
            Dim mySelectQuery As String = "SELECT * FROM Tabelle2 WHERE DT = (SELECT MIN(DT) FROM Tabelle2 WHERE DT > Now)"
            Dim myCommand As New OleDbCommand(mySelectQuery, myConnection)
            myConnection.Open()
            Dim myReader As OleDbDataReader
            myReader = myCommand.ExecuteReader()
            ' Always call Read before accessing data.
            While myReader.Read()
                MessageBox.Show(myReader.GetInt32(0).ToString() + ", " _
                    + myReader.GetString(1))


                'Console.WriteLine(myReader.GetInt32(0).ToString() + ", " _
                '   + myReader.GetString(1))
            End While
            ' always call Close when done reading.
            myReader.Close()
            ' Close the connection when done with it.
            myConnection.Close()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub


вот сдесь ошибка, не пойму почему.
Код: Выделить всё
MessageBox.Show(myReader.GetInt32(0).ToString() + ", " _
                    + myReader.GetString(1))

Дописал Catch ex As Exception ....
пишет: "ошибка конветрации, возможно носитель данных испорчен : ) , но цель была опрашиваемой (ивиняюсь за дурацкий перевод)

цель должна быть такой : 17.12.2005 10:15:00

Я опять по моему дату в ToString() конвертирую

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 11.11.2005 (Пт) 14:49

Учи матчасть.

Что у тебя оказывается в объекте Reader ты понимаешь? Там результат выполнения твоего запроса. И ты по одной записи считываешь с помощью Read(), пока не прочитаешь все записи.

Что делают методы Get...? Например, GetInt32(0)?
http://msdn.microsoft.com/library/defau ... stopic.asp
Этот метод считывает значение из первой (0 - это начало) колонки результата и конвертирует его в int32. Если там оказывается значение, которое не подходит по типу - бросается исключение (ошибка), которую ты ловишь в блоке catch, чтобы показать в сообщении.

Внимание, вопрос - сколько у тебя полей возвращает запрос и каких они типов? Используй правильные методы! Есть GetInt32(index), GetString(index), GetDateTime(index) и много еще других!
http://msdn.microsoft.com/library/defau ... stopic.asp
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 11.11.2005 (Пт) 15:08

:oops:

получилось

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 11.11.2005 (Пт) 15:15

Это хорошо :)
Ты хоть чуть-чуть разобрался?

Кстати, на groups.google.com довольно много сообщений на немецком. Заглядывай туда тоже.
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 11.11.2005 (Пт) 15:23

да спасибо.
Сижу, встраиваю таймер.

За выходные может что и выйдет
(если в роддом ехеть не придется : )

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 11.11.2005 (Пт) 16:08

Давай.... Удачи тебе!

Еще загляни на эти ссылки:
http://msdn.microsoft.com/library/defau ... dtopic.asp
http://msdn.microsoft.com/library/defau ... stopic.asp

Ты помнишь, что на равенство сравниваь нельзя - можно ошибиться на секунду и пропустишь запуск? Обпредели для себя допустимую погрешность и сравнивай так: <время из базы> - <погрешность> меньше Now
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 11.11.2005 (Пт) 16:34

То то я смотрю у меня третий раз не выходит

а я так написал
Код: Выделить всё

Public Shared Sub TimerEventProcessor(ByVal myObject As Object, _
    ByVal myEventArgs As EventArgs)

        Dim connStr As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=db1.mdb;"
        Dim myConnection As New OleDbConnection(connStr)
        Dim mySelectQuery As String = "SELECT * FROM Tabelle2 WHERE DT = (SELECT MIN(DT) FROM Tabelle2 WHERE DT > Now)"
        Dim myCommand As New OleDbCommand(mySelectQuery, myConnection)
        Dim aa As Date
        myConnection.Open()
        Dim myReader As OleDbDataReader
        myReader = myCommand.ExecuteReader()
        While myReader.Read()
            aa = myReader.GetDateTime(0)
        End While
        myReader.Close()
        myConnection.Close()

        If Date.Now = aa Then
            MessageBox.Show("Time of Login")
        End If
    End Sub

    Public Shared Sub Main()
        AddHandler Timer1.Tick, AddressOf TimerEventProcessor
        Timer1.Interval = 1000
        Timer1.Start()
        While exitFlag = False
            Application.DoEvents()
        End While

    End Sub

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 11.11.2005 (Пт) 17:13

Подозреваю, что ты напоролся кк раз на сравнение по равенству. То есть тот Now, который ты вычисляешь, уже больше на 1 секунду.

Проверь вот так:
Код: Выделить всё
        Dim dnow As DateTime = Date.Now
        If dnow = aa Then
            MessageBox.Show("Time of Login")
        Else
            Debug.WriteLine(dnow.ToString() & " " & aa.ToString())
        End If


Когда остановишь - посмотри в окошко Output - там увидишь, почему они не равны.
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 11.11.2005 (Пт) 17:18

понял, спасибо

срочно убегаю, проверить смогу только вечером

пока

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 14.11.2005 (Пн) 11:14

Пвтаюсь так:

Код: Выделить всё
If Format(Date.Now, "dd.MM.yyyy hh:mm") = Format(aa, "dd.MM.yyyy hh:mm") Then


и все равно не в какую

Код: Выделить всё
Date.Now, "dd.MM.yyyy hh:mm"

это без секунд возвращает
Код: Выделить всё

Format(aa, "dd.MM.yyyy hh:mm")

а здесь все равно секунды лепит

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 14.11.2005 (Пн) 12:07

не может быть
проверяй внимательней.
Format возвращает строку в заданном формате. Если секунды не указаны, то их и не будет.
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 14.11.2005 (Пн) 14:37

Ага, нашел, в чем дело.
Я в секундах в БД «00», ставил, и у программы практически не было времени на сравнение. При следуещем проходе SQL запрос выдавал уже другую дату сдедуюшего сеанса.
Поменял секуды на 59 и все пошло.
Теперь мне сказали, что интервал опроса должен быть 1 мин.
При плохом стечении обстоятельств я могу проскочить время сенса (теоретически).

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 15.11.2005 (Вт) 14:57

Вот этот таймер работает.
Он выбирает из таблицы, в которой всего 2 стролбца (Дата и время) дату и время следующего сеанса. И по наступлению его выдает мне
MessageBox.Show("lkdfjlsdkgjlkghjlgkhjflgj")
С интервалом 10 сек.

Код: Выделить всё
Public Shared Sub TimerEventProcessor(ByVal myObject As Object, _
    ByVal myEventArgs As EventArgs)

        Dim connStr As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=db1.mdb;"
        Dim myConnection As New OleDbConnection(connStr)
        Dim mySelectQuery As String = "SELECT * FROM Tabelle2 WHERE DT = (SELECT MIN(DT) FROM Tabelle2 WHERE [DT]+[Zeit] > Now)"
        Dim myCommand As New OleDbCommand(mySelectQuery, myConnection)
        Dim aa As Date
        myConnection.Open()
        Dim myReader As OleDbDataReader
        myReader = myCommand.ExecuteReader()
        While myReader.Read()
            aa = (myReader.GetDateTime(0) + ", " + myReader.GetDateTime(1))
        End While
        If Format(Date.Now, "dd.MM.yyyy hh:mm") = Format(aa, "dd.MM.yyyy hh:mm") Then
            MessageBox.Show("lkdfjlsdkgjlkghjlgkhjflgj")
        End If
        myReader.Close()
        myConnection.Close()
    End Sub

    Public Shared Sub Main()
        AddHandler Timer1.Tick, AddressOf TimerEventProcessor
        Timer1.Interval = 10000
        Timer1.Start()
        While exitFlag = False
            Application.DoEvents()
        End While

    End Sub
End Class

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 15.11.2005 (Вт) 15:13

Теперь пытаюсь вставить туда условие которое позволяло бы опрашивать Сервера в зависимости от типа опроса (на стр.1 я уже описывал таблицу). Тип 6 – одноразовый опрос по введённой дате; Тип 3 – ежедневно. Это самые простые варианты.

Пытаюсь написать условие для них через IF ....
Но чую, что нагородил огород, в котором уже и сам не разберусь
Код: Выделить всё

    Private Shared Timer1 As New System.Windows.Forms.Timer
    Private Shared exitFlag As Boolean = False

    Public Shared Sub TimerEventProcessor(ByVal myObject As Object, _
    ByVal myEventArgs As EventArgs)

   Try
        Dim connStr As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=Parametrierungs DB.mdb;"
        Dim TypConnection As New OleDbConnection(connStr)
        Dim TypSelectQuery As String = "SELECT Typ FROM Abfr_Zeit"
        Dim TypCommand As New OleDbCommand(TypSelectQuery, TypConnection)
        Dim Typ As String

        TypConnection.Open()
        Dim TypReader As OleDbDataReader
        TypReader = TypCommand.ExecuteReader()
        While TypReader.Read()
            Typ = TypReader.GetDateTime(0)
        End While

            If Typ = 6 Then
            Dim Typ6SelectQuery As String = "SELECT Abfr_Zeit.Typ,  Abfr_Zeit.Einmalig, Abfr_Zeit.Zeit  FROM Abfr_Zeit WHERE (((Abfr_Zeit.Typ)=6) AND ((Abfr_Zeit.Einmalig)=(SELECT MIN(Einmalig) FROM Abfr_Zeit WHERE [Einmalig] + [Zeit]  > Now )))"
            Dim Typ6Command As New OleDbCommand(Typ6SelectQuery, TypConnection)
            Dim Typ6Date As Date
            TypReader = Typ6Command.ExecuteReader()
                While TypReader.Read()
                Typ6Date = (TypReader.GetDateTime(1) + ", " + TypReader.GetDateTime(2))
                End While
                    If Format(Date.Now, "dd.MM.yyyy hh:mm") = Format(Typ6Date, "dd.MM.yyyy hh:mm") Then
                MessageBox.Show("Typ6")
                    End If

        ElseIf Typ = 3 Then
            Dim Typ3SelectQuery As String = "SELECT TOP 1 Abfr_Zeit.Typ, Abfr_Zeit.Zeit FROM Abfr_Zeit WHERE (((Abfr_Zeit.Typ)=3) AND ((Abfr_Zeit.Zeit)>Time())) ORDER BY Abfr_Zeit.Zeit"
            Dim Typ3Command As New OleDbCommand(Typ3SelectQuery, TypConnection)
            Dim Typ3Date As Date
            TypReader = Typ3Command.ExecuteReader()

                While TypReader.Read()
                Typ3Date = (TypReader.GetDateTime(1) + ", " + TypReader.GetDateTime(2))
                End While
                    If Format(Date.Now, "hh:mm") = Format(Typ3Date, "dd.MM.yyyy hh:mm") Then
                MessageBox.Show("Typ3")
                    End If

        End If
        TypReader.Close()
        TypConnection.Close()
   Catch ex As Exception
           MessageBox.Show(ex.Message)

   End Try
    End Sub

    Public Shared Sub Main()
        AddHandler Timer1.Tick, AddressOf TimerEventProcessor
        Timer1.Interval = 10000
        Timer1.Start()
        While exitFlag = False
            Application.DoEvents()
        End While

    End Sub

End Class

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 15.11.2005 (Вт) 16:37

Конечно, полную чущь я вверху написал и 150 ошибок в добавок.

While TypReader.Read()
Typ = TypReader.GetDateTime(0)
Вот в этом месте мне возвращается одномерный массив из которого я получается считываю только одно значение. А потом (естественно) ничего не происходит.

Правильно, как мне кажется, было бы этот массив нужным образом прочитать Reader(ом), а потом в проходить этот массив с For...Next или For Each и встраивать If Then ElseIf с моими условиями для каждого из 6-ти форм сеансов.

Кто нибудь мне скажет, следствие ведется в нужном направлении или нет? ...

Сдается ... «тихо сам с собою я веду беседу...»

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 15.11.2005 (Вт) 17:21

Ну, в принципе, правильно движешься. Есть несколько вопросов-замечаний:
1) Dim Typ As String
Typ = TypReader.GetDateTime(0)
Тип поля-то у тебя там какой? По идее, поле Typ должен быть типа Numeric. И тогда:
Dim Typ as Long (тебе даже и Integer хватит)

И доставать его надо, соответственно GetInt32 (возможно, GetDecimal, потому что Numeric это не обязательно целое)

2) Вместо If... Else If надо использовать конструкцию Select
Код: Выделить всё
Select case Typ
     Case 1:
        какой-то код

     Case 2:
        какой-то код

     и так далее перечисляешь все свои типы и делаешь нужные вызовы.
End select


Удобнее всего, когда "какой-то код" - это просто вызов процедуры или фукции.

Как мне кажется, у тебя должно быть 6 функций типа "НадоСейчас Запускать(reader) as Boolean". Внутри в зависимости от типа эта функция прочитает нужные поля из reader и примет решение. То есть код будет выглядеть так:
Dim bDoAction as Boolean
Код: Выделить всё
Select case Typ
     Case 1:
        bDoAction = НадоСейчасЗапускать1(reader)

     Case 2:
        bDoAction = НадоСейчасЗапускать2(reader)


     и так далее перечисляешь все свои типы и делаешь нужные вызовы.
End select
If (bDoAction) then
    делаешь опрос сервера   
end if


3) я не поняла, что у тебя сейчас в таблице хранится. Что у тебя во втором и третьем столбце? Почему ты даты складываешь?
Typ6Date = (TypReader.GetDateTime(1) + ", " + TypReader.GetDateTime(2))
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 15.11.2005 (Вт) 17:39

While TypReader.Read()
Typ = TypReader.GetDateTime(0)
Вот в этом месте мне возвращается одномерный массив из которого я получается считываю только одно значение. А потом (естественно) ничего не происходит.


Мне кажется, что структура твоего кода должна быть примерно такой:
Код: Выделить всё
MyReader = TypCommand.ExecuteReader()
while MyReader.Read()
     typ = MyReader.GetDecimal(0)
     select case type
         case 1:
            bDoAction = IsTimeToDo(reader)

         case 2:
         .....
     end select
     if bDoAction then 
          WorkOnServer(reader.GetDecimal(7))
     end if
end while

где в колонке номер 8 лежит IP сервера.

Кстати, второй вариант IsTimeToDo - это принимать не reader, а сразу время, если все-таки ты решишь время следующего запуска хранить в базе, как ты это делаешь сейчас. Но я думаю, что это нерационально, поскольку надо будет делать дополнительные запросы в базу, чтобы обновлять время следующего запуска. К тому же его придется еще дополнительно анализировать, потому что сервер может упасть и восвемя это время не будет обновлено.
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 16.11.2005 (Ср) 11:18

Так, по порядку . Сначала таблица:

Код: Выделить всё
ServIndex   Typ   Время       ДеньНед   ДеньМес     Однократно      Инттервал(минуты)
1           6    17:30:00          NULL      NULL               28.11.2005      NULL
1           3         22:00:00         NULL            NULL                NULL         NULL
2                 4           02:00:00      1               NULL                NULL        NULL
2                 4           02:00:00      3               NULL                NULL        NULL
2                 4           02:00:00      7               NULL                NULL        NULL
3                 5           05:00:00      NULL             1                  NULL        NULL
3                 5           05:00:00      NULL             15                 NULL          NULL
3                 5           05:00:00      NULL             28                 NULL       
4                 2           00:00:00      NULL             NULL              NULL             180
4                 1           00:00:00      NULL             NULL              NULL             15

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 16.11.2005 (Ср) 11:57

Опрос тип (1-Поминутно; 2-Почасово; 3-ежедневно; 4-Еженедельно; 5- Ежемесячно; 6-Однократно

Теперь по замечаниям:
Добавлено: 15.11.2005 (Вт) 17:21 Заголовок сообщения:

Rainbow писал(а):Dim Typ as Long (тебе даже и Integer хватит)

да, так правильно
Rainbow писал(а):Удобнее всего, когда "какой-то код" - это просто вызов процедуры или фукции.

Есть как бы две .exe. Мы сейчас находимся в первой. Из первой будет запускаться второя .exe с параметром, которая непосредственно будет опрашивать сервер. Параметром является «ServIndex» из таблицы, которую я показал выше. Во второй .exe есть соответствующая таблица, (связянная с вышепоказанной через «ServIndex»), в которой стоят параметры для Login по FTP (IP, Telefon for Rasdial, UsrName, Password и т.д.)

Поэтому "какой-то код" будет команда запуска второй .exe с параметром допустим 2

Rainbow писал(а):3) я не поняла, что у тебя сейчас в таблице хранится. Что у тебя во втором и третьем столбце? Почему ты даты складываешь?
Typ6Date = (TypReader.GetDateTime(1) + ", " + TypReader.GetDateTime(2))

Там в се правильно, (Здесь) 1- дата , 2 – время. Ошибка (одна из 150ти : ))) была ниже в Typ3Date

Rainbow писал(а):Как мне кажется, у тебя должно быть 6 функций типа "НадоСейчас Запускать(reader) as Boolean". Внутри в зависимости от типа эта функция прочитает нужные поля из reader и примет решение. То есть код будет выглядеть так:
Dim bDoAction as Boolean

С этим я пытаюсь сейчас разобраться. Больное место. Логика этого всего у меня в голове не укладывается. Не совсем понятно, что должно происходить в Case вот это:
bDoAction = IsTimeToDo(reader)

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 16.11.2005 (Ср) 13:08

Ага. Кое-что прояснилось.
Прежде, чем ответить на твои вопросы, скажи пожалуйста:
1) на основании каких данных ты будешь определять, надо сейчас запускать опрос сервера или нет
а) на основани сохраненного в базе следующего времени запуска для каждого сервера
б) на основании информации о расписании
2) как ты сейчас понимаешь, что мы достаем из базы и где вычисляется "надо зпускать сейчас или нет"

Не совсем понятно, что должно происходить в Case вот это:
bDoAction = IsTimeToDo(reader)

В моем варианте схемы процедуры из базы доставалось расписание. То есть, результат выполнения запроса - это как раз такая табличка, как ты показал. Далее, я делала цикл по строчкам (reader.Read). Для каждой строчки анализировался тип расписания (Select case Typ), для него вычислялось, надо запускать или нет "bDoAction = IsTimeToDo(reader)" - reader передавался, чтобы взять данные о расписании из текущей строчки. Собственно "запуск отдельно exe" - это моя строчка "делаешь опрос сервера"

Ты прочитал про "Select Case" оператор? Понимаешь, что он делает?
http://msdn.microsoft.com/library/defau ... ctcase.asp
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

Пред.След.

Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 47

    TopList  
cron