Я занимаюсь программированием на своем компьютере, и он отлично работает - программа, сама база данных, вставка в базу данных также работает нормально. Но когда публикую и устанавливаю программу на другой компьютер. Он аварийно завершает работу и не выполняет команду INSERT.

Вот мой код.

Private Sub cmdBlank_Click(sender As System.Object, e As System.EventArgs) Handles cmdBlank.Click
strTariff1 = txtPart1.Text & " " & txtPName1.Text & " " & txtQty1.Text & " " & txtU1.Text
strTariff2 = txtPart2.Text & " " & txtPName2.Text & " " & txtQty2.Text & " " & txtU2.Text
strTariff3 = txtPart3.Text & " " & txtPName3.Text & " " & txtQty3.Text & " " & txtU3.Text
strTariff4 = txtPart4.Text & " " & txtPName4.Text & " " & txtQty4.Text & " " & txtU4.Text
'strTariff5 = txtPart5.Text & " " & txtPName5.Text & " " & txtQty5.Text & " " & txtU5.Text

Call saveToDb()
frmreportax.Show()
End Sub

Private Function saveToDb()
    conn.Close()

    Dim cmdAdd, cmdCount, cmdAdd2 As New iDB2Command
    Dim sqlAdd, sqlCount, sqlAdd2 As String
    Dim curr1, curr2, curr3, curr4 As String
    Dim count As Integer

    conn.ConnectionString = str
    conn.Open()

    'Check for duplicate entry
    sqlCount = "SELECT COUNT(*) AS count FROM cewe WHERE transport=@transport AND blnum=@blnum"

    With cmdCount
        .CommandText = sqlCount
        .Connection = conn

        .Parameters.AddWithValue("@transport", frmPart1.txtTransport.Text)
        .Parameters.AddWithValue("@blnum", frmPart1.txtNo.Text)
    End With

    count = Convert.ToInt32(cmdCount.ExecuteScalar())

    If count <> 0 Then
        MsgBox("Duplicate Entry: " & frmPart1.txtTransport.Text, vbOKOnly + vbExclamation)
    Else

        sqlAdd = "INSERT INTO cewe (page) " & _
                    "VALUES (@page) "

        With cmdAdd
            .Parameters.AddWithValue("@page", Val(frmPart1.txtPage.Text))
            .CommandText = sqlAdd
            .Connection = conn
            .ExecuteNonQuery()
        End With
    end if


    cmdAdd.Dispose()
    cmdAdd2.Dispose()
    conn.Close()
end function

Подскажите пожалуйста, что я делаю не так? Когда я запускаю и устанавливаю программу на свой компьютер, она работает отлично. Но когда я запускаю / устанавливаю его на другой компьютер, он вылетает после нажатия cmdBlank.

0
shesxue28 30 Сен 2014 в 08:21
Это может быть проблема с подключением к базе данных (либо с установкой, либо с настройкой для правильной работы с приложением). Регистрируйте исключения\ошибки через приложение, чтобы точно знать, в чем проблема.
 – 
souser
30 Сен 2014 в 08:28
Как я могу регистрировать исключения\ошибки?
 – 
shesxue28
30 Сен 2014 в 08:38
Ознакомьтесь с модулем ведения журнала корпоративной библиотеки. Или вы можете просто регистрировать сведения об исключении, выдаваемые вставкой, в простой текстовый файл.
 – 
souser
2 Окт 2014 в 05:12

2 ответа

Лучший ответ

AS400 iSeries DB2 необходимо обновить до версии 6.xx.0800, и все исправлено!

Установщик можно найти здесь http://www-03.ibm.com/systems /power/software/i/access/windows_sp.html

Задача решена!

0
shesxue28 30 Сен 2014 в 11:15

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

Есть ли у другого компьютера доступ к базе данных, на которую вы указываете? Указывает ли соединение с базой данных на localhost? В этом случае вам нужно убедиться, что у вас есть те же учетные данные (хост, имя пользователя, пароль, порт и т. Д.), Настроенные на сервере базы данных на новом компьютере. Установлены ли драйверы базы данных на новый компьютер? В чем принципиальные различия между двумя машинами?

0
cherrysoft 30 Сен 2014 в 08:30
Привет! помимо этой команды у меня есть еще одна форма, которая извлекает данные из базы данных. Я использую AS/400 iSeries DB2. Он работает хорошо, данные извлекаются из базы данных и отображаются в datagridview. Но в этой конкретной кнопке он добавляет новые данные в базу данных. Всякий раз, когда он добавляет данные или программа запускается по команде INSERT, приложение внезапно аварийно завершает работу. Это происходит только на тестовом ПК. Он отлично работает на моем компьютере.
 – 
shesxue28
30 Сен 2014 в 08:37
Я предполагаю, что это как-то связано с драйверами. Вы можете сделать крошечную программу, чтобы попытаться подключиться из тестовой коробки, чтобы посмотреть, что произойдет. Вы также можете проверить, есть ли у тестового блока доступ к AS/400, но устранить неполадки можно в следующем порядке. Проверьте драйверы (версии и т. д.), проверьте, есть ли у машины доступ, напишите небольшую программу для получения доступа.
 – 
cherrysoft
30 Сен 2014 в 08:43
Я думаю, что у программы есть доступ к базе данных, потому что, если бы ее не было, возникла бы проблема с просмотром/выборкой записей из базы данных. С тех пор он уже должен был разбиться. Но это не так, он отображает все записи. Он также подсчитывает количество записей, присутствующих в базе данных. Я думаю, что основная проблема заключается в INSERT COMMAND. Где я могу это сделать? Я имею в виду, что я не использую ADO.NET или DSN для подключения. Вот моя строка подключения:
 – 
shesxue28
30 Сен 2014 в 08:48
Импорт модуля IBM.Data.DB2.iSeries modCEWE Public conn As New iDB2Connection Public str As String = "Datasource=10.0.1.11;UserID=edit;password=edit;DefaultCollection=impexplib" End Module
 – 
shesxue28
30 Сен 2014 в 08:49
Если вы используете какие-либо реальные данные, я бы предложил редактировать фиктивные данные. Я ничего не знаю о разрешениях в DB2, но есть ли у пользователя с вашего исходного IP-адреса соответствующие разрешения? Если вы уверены, что это происходит в точке вставки (вы можете определить это только путем правильной отладки - установите точку останова в части кода для извлечения данных, чтобы гарантировать, что данные извлекаются и выполняются соответствующим образом). В какой-то момент код сработает, но вы, по крайней мере, будете точно знать, где именно.
 – 
cherrysoft
30 Сен 2014 в 08:54