2016-04-10 3 views
0

Фон:Запрос возвращает те же данные каждый раз, когда он запускается

С помощью этих кодов я добавляю различные номера апелляции в базу данных. Каждый номер апелляции имеет код назначения, назначенный ему через эти коды.

Проблема:

Проблема заключается в том, когда я добавляю более 2 обращений одновременно, этот код определяет только код присвоения присвоено 1-й призыва добавил, но не обнаруживает следующее добавленное количество назначений.

Я пробовал добавить метод Thread.sleep, но результат такой же.

Try 
     ' Find out last assignment code 
     Dim fillCommand As String 
     Dim FillList As New OleDb.OleDbDataAdapter 
     Dim dt As New DataTable 
     Dim rowdata As Integer 

     Dim ConnString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\ComplianceDB.accdb;Jet OLEDB:Database Password=xxxxxxx;" 'D:\Important Programing links\Programming Learning\Compliance Diary\ComlianceDiary\ComlianceDiary\database\ComplianceDB.accdb" 
     Dim Conn As New OleDb.OleDbConnection(ConnString) 
     Conn.Open() 

     If ListView1.Items.Count = 0 Then 
      MessageBox.Show("Please enter valid information to add appeal.", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error) 
     ElseIf BenchComboBox.Text = "" Or NoticeLocationTextBox.Text = "" Or BenchMembersTextBox.Text = "" Then 
      MessageBox.Show("Please enter all the required information to add appeal.", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error) 

     Else 

      For i = 0 To ListView1.Items.Count - 1 
       'Add Appeals to ATIR list 
       Me.ATIRTableAdapter.Insert(ClientComboBox.Text, ListView1.Items(i).SubItems.Item(1).Text, ListView1.Items(i).Text, ListView1.Items(i).SubItems.Item(2).Text, BenchComboBox.Text, BenchMembersTextBox.Text, HearingDate.Value.Date, ListView1.Items(i).SubItems.Item(4).Text, mgrComboBox.Text, txtdescription.Text, ListView1.Items(i).SubItems.Item(3).Text, NoticeLocationTextBox.Text, ChangePassword.GUIDTextBox.Text, DateAndTime.Today) 

       Dim AssignmentCommand = New OleDbCommand("select AssignmentCode, AssignmentName from Assignment where AssignmentName = 'ATIR Appeal - " & ListView1.Items(i).Text & "' AND ClientName = '" & ClientComboBox.Text & "'", Conn) ' (select max(AssignmentCode) from Assignment)" 'SELECT * FROM Assignment Where AssignmentName = '" & AssignmentNameTextBox.Text & "' AND ClientName = '" & ClientNameComboBox.Text & "'" ' WHERE DateofHearing BETWEEN " & Today.Date & " AND " & Today.Date.AddDays(15) 
       Dim Reader As OleDbDataReader = AssignmentCommand.ExecuteReader 
       'Check if the assignment name already exists, if yes, fetch old assignment code and add it to new compliance 
       If Reader.Read Then 
        Dim ATIRCodeCmd = New OleDbCommand("select ID from ATIR where ID = (select max(ID) from ATIR)", Conn) 'SELECT * FROM Assignment Where AssignmentName = '" & AssignmentNameTextBox.Text & "' AND ClientName = '" & ClientNameComboBox.Text & "'" ' WHERE DateofHearing BETWEEN " & Today.Date & " AND " & Today.Date.AddDays(15) 
        Dim ReaderATIRCode As OleDbDataReader = ATIRCodeCmd.ExecuteReader 
        While ReaderATIRCode.Read() 
         Me.NoticeComplianceTableAdapter1.Insert(ClientComboBox.Text, Reader.Item(1).ToString, Today.Date, Today.Date, Reader.Item(1).ToString, NoticeLocationTextBox.Text, txtdescription.Text, Reader.Item(0).ToString, "No", "", "", "Pending", ListView1.Items(i).SubItems.Item(1).Text, "", "", "", "Fresh Notice", "", "", ChangePassword.GUIDTextBox.Text, DateAndTime.Today, mgrComboBox.Text, PartnerNameTextBox.Text, SrManagerNameTextBox.Text, "AppellateCompliance", HearingDate.Value.Date, "", "", "", "", "", ReaderATIRCode.Item(0).ToString, "ATIR") 
        End While 
       Else 

        'if assignment does not exists, then create a new one and give new assignment number to new compliance. 
        Me.AssignmentTableAdapter1.Insert(ListView1.Items(i).SubItems.Item(1).Text, ClientComboBox.Text, "ATIR Appeal - " & ListView1.Items(i).Text, "N/A", "Pending", "No", Today.Date, HearingDate.Value.Date, HearingDate.Value.Date, mgrComboBox.Text, SrManagerNameTextBox.Text, PartnerNameTextBox.Text, "Income Tax Ordinance, 2001", "Pending", "", "Pending", "", "Pending", "", Today.Date, "", Today.Date, "Pending", Today.Date, "") 
        Dim AssignmentCodeCmd = New OleDbCommand("select AssignmentCode from Assignment where AssignmentCode = (select max(AssignmentCode) from Assignment)", Conn) 'SELECT * FROM Assignment Where AssignmentName = '" & AssignmentNameTextBox.Text & "' AND ClientName = '" & ClientNameComboBox.Text & "'" ' WHERE DateofHearing BETWEEN " & Today.Date & " AND " & Today.Date.AddDays(15) 
        Dim ReaderCode As OleDbDataReader = AssignmentCodeCmd.ExecuteReader 
        While ReaderCode.Read() 
         rowdata = ReaderCode.Item(0).ToString 
         ReaderCode.NextResult() 
        End While 

        Dim ATIRCodeCmd = New OleDbCommand("select ID from ATIR where ID = (select max(ID) from ATIR)", Conn) 'SELECT * FROM Assignment Where AssignmentName = '" & AssignmentNameTextBox.Text & "' AND ClientName = '" & ClientNameComboBox.Text & "'" ' WHERE DateofHearing BETWEEN " & Today.Date & " AND " & Today.Date.AddDays(15) 
        'Thread.Sleep(1000) 
        Dim ReaderATIRCode As OleDbDataReader = ATIRCodeCmd.ExecuteReader 
        While ReaderATIRCode.Read() 
         Me.NoticeComplianceTableAdapter1.Insert(ClientComboBox.Text, "ATIR Appeal - " & ListView1.Items(i).Text, Today.Date, Today.Date, "ATIR Appeal - " & ListView1.Items(i).Text, NoticeLocationTextBox.Text, txtdescription.Text, rowdata, "No", "", "", "Pending", ListView1.Items(i).SubItems.Item(1).Text, "", "", "", "Fresh Notice", "", "", ChangePassword.GUIDTextBox.Text, DateAndTime.Today, mgrComboBox.Text, PartnerNameTextBox.Text, SrManagerNameTextBox.Text, "AppellateCompliance", HearingDate.Value.Date, "", "", "", "", "", ReaderATIRCode.Item(0).ToString, "ATIR") 
        End While 

       End If 
       Reader.Close() 
      Next 

      MessageBox.Show("ATIR Appeal(s) have been noted.", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Information) 
      Conn.Close() 

      Me.Close() 
     End If 

    Catch ex As Exception 
     MessageBox.Show(ex.Message, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Information) 
    End Try 
+1

*** НИКОГДА НИКОГДА *** не делайте что-то вроде 'SELECT MAX (...) + 1', чтобы получить идентификационный номер« следующий самый высокий »- это просто *** НЕ БЕЗОПАСНО *** в системе с несколько пользователей! Пусть база данных справится с этим - просто используйте автоматическую нумерацию для этих типов счетчиков - «Автономный номер» в MS Access или столбец «INT IDENTITY» в SQL Server. Не пытайтесь катиться самостоятельно - просто нет - используйте то, что дает вам база данных! –

+0

Благодарим вас за ответ. –

+0

Пожалуйста, предложите мне, как я могу достичь своей цели. Выбрать MAX (..) используется для получения следующего максимального значения ID из другой таблицы в базе данных. Это более подходящая команда для получения максимального значения из другой таблицы. –

ответ

0

Ничего. Я решил проблему с помощью команды @@IDENTITY sql. Спасибо всем за ваш вклад.

Смежные вопросы