AmirAh
یک شنبه 13 مرداد 1392, 04:39 صبح
دوستان سلام
من برنامه کوچکی نوشته ام که با مشکل مواجه شدم . روش کار و اجزا آن را در زیر شرح میدهم ، اما نمیدانم که خطا به چه علت بوجود آمده و اینکه آیا روش کار برای انجام این عمل درست بوده است یا خیر ؟
ممنون میشوم از کسانیکه لطف کنند و مرا راهنمایی کنند.
من یک جدول در اکسس دارم که دارای 4 فیلد است که عبارتند از
RecNo = فیلد عددی - شماره رکورد
IdNum= فیلد عددی - گروه رکوردهای مربوط به یک شخص
RegDate= فیلد استرینگ برای نگهداری تاریخ
فیلد جدیدی را جدیدا اضافه کرده ام بنام Radif
Radif = فیلد عددی برای نگهداری شماره ردیف رکوردهای مربوط به یک شخص
بنابراین فیلد ردیف خالی است.
108446
برای اینکه فیلد Radif را پر کنم ، ابتدا توسط یک DataReader را خواندم و بعد بر حسب گروهبندی
فیلدهای IdNum , RegDate ، در یک حلقه شروع به پر کردن فیلد Radif کردم . بعد از حدود 50 یا 60 رکورد خطا میدهد و کار نصفه میماند
سورس کار به ترتیب زیر است:
Imports Microsoft.VisualBasic
Imports System.Data
Imports System.Data.OleDb
Public Class FrmAAAAAAAAAAAAA
Public Class ArgumentType
Public _RecNo As Long
Public _Radif As Long
Public _RegDate As String
End Class
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim strSql As String
Dim myIdNum As Long
Dim myRadif As Long
Dim myRecCounter As Long = 0
() Dim args As ArgumentType = New ArgumentType
Dim myDbRun1 As New ClassRun
Dim totalRows As Long = myDbRun1.GetValueLong("SELECT COUNT(*) FROMtblVojooheVarizi ")
strSql = "SELECT tblVojooheVarizi.RecNo, tblVojooheVarizi.IdNum, tblVojooheVarizi.RegDate, tblVojooheVarizi.Radif " & _
" FROM(tblVojooheVarizi) " & _
" WHERE (((tblVojooheVarizi.IsBaygani)=False)) " & _
" ORDER BY tblVojooheVarizi.IdNum, tblVojooheVarizi.RegDate;"
Dim myDbRun As New ClassRun
Dim dr As OleDbDataReader
myDbRun.MakeDR(strSql (
dr = myDbRun.drRun
Label2.Text = totalRows
While dr.Read ()
myRecCounter += 1
Label1.Text = myRecCounter
myIdNum = dr("IdNum")
myRadif = 1
While myIdNum = dr("IdNum")
args._RecNo = dr("RecNo")
args._Radif = myRadif
args._RegDate = IIf(IsDBNull(dr("RegDate")), " ", dr("RegDate"))
myUpdate(args)
Application.DoEvents()
dr.Read()
If myIdNum <> dr("IdNum") Then
myRecCounter += 1
Label1.Text = myRecCounter
myIdNum = dr("IdNum")
myRadif = 1
Continue While
End If
myRadif += 1
myRecCounter += 1
Label1.Text = myRecCounter
End While
End While
End Sub
( Private Sub myUpdate(ByVal args As ArgumentType
Dim cmd As New OleDbCommand
Dim SwSuccess As Integer
Dim strSql As String
Dim bt As New BahramTools
_ & " strSql = "UPDATE tblVojooheVarizi SET
_ & " Radif = " & args._Radif
" WHERE tblVojooheVarizi.RecNo=" & args._RecNo
Dim myDbRun As New ClassRun
cmd.CommandText = strSql
( SwSuccess = myDbRun.ExecCommand(cmd
If SwSuccess = 0 Then
("خطا در تصحیح اطلاعات !!!!")MsgBox
Else
("اطلاعات با موفقیت تصحیح شد")MsgBox
End If
() cmd.Dispose
End Sub
End Class
'''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' ''
Imports Microsoft.VisualBasic
Imports System.Data
Imports System.Data.OleDb
Public Class ClassRun
Dim STrPath As String
Dim ConStr As String
Dim myCon As OleDbConnection
Public dsRun As DataSet
Public dvRun As DataView
Public drRun As OleDbDataReader
Public dtRun As DataTable
Public Sub New()
STrPath = Application.StartupPath & "\Region.mdb"
ConStr = (String.Format("Provider=microsoft.jet.oledb.4.0; data source='{0}';jet oledb:database password=2ronis", STrPath))
myCon = New OleDbConnection(ConStr)
End Sub
Public Function ExecCommand(ByVal myCmd As OleDbCommand) As Boolean
On Error GoTo myerrhand
myCon = New OleDbConnection(ConStr)
myCmd.Connection = myCon
If myCon.State = ConnectionState.Closed Then
myCon.Open()
End If
Dim SwSuccess As Integer = myCmd.ExecuteNonQuery()
If SwSuccess = 0 Then
ExecCommand = False
Else
ExecCommand = True
End If
Exit Function
myerrhand:
Dim nn, dd
nn = Err.Number
dd = Err.Description
'myCon.Close()
'If nn = 5 Then
' myCon.Open()
'End If
Resume Next
End Function
Public Sub MakeDs(ByVal strSql As String)
myCon = New OleDbConnection(ConStr)
dsRun = New DataSet
If myCon.State = ConnectionState.Closed Then
myCon.Open()
End If
Dim da As New OleDbDataAdapter(strSql, myCon)
da.Fill(dsRun, "xTable")
End Sub
Public Sub MakeDR(ByVal strSql As String)
On Error GoTo myErrorHand
myCon = New OleDbConnection(ConStr)
If myCon.State = ConnectionState.Closed Then
myCon.Open()
End If
Dim cmd As OleDbCommand = New OleDbCommand(strSql, myCon)
drRun = cmd.ExecuteReader()
Exit Sub
myErrorHand:
Dim nn, dd
nn = Err.Number
dd = Err.Description
Resume Next
End Sub
Public Function GetValueLong(ByVal strSql As String) As Long
Try
Dim myValue As Long
myCon = New OleDbConnection(ConStr)
Dim cmd As OleDbCommand = New OleDbCommand(strSql, myCon)
If myCon.State = ConnectionState.Closed Then
myCon.Open()
End If
If cmd.ExecuteScalar Is DBNull.Value Then
myValue = 0
Else
myValue = cmd.ExecuteScalar
End If
myCon.Close()
Return myValue
Catch ex As Exception
myCon.Close()
MsgBox(Err.Description)
End Try
End Function
End Class
خطای بوجود آمده و محل آن
108447
http://barnamenevis.org/images/misc/pencil.png
من برنامه کوچکی نوشته ام که با مشکل مواجه شدم . روش کار و اجزا آن را در زیر شرح میدهم ، اما نمیدانم که خطا به چه علت بوجود آمده و اینکه آیا روش کار برای انجام این عمل درست بوده است یا خیر ؟
ممنون میشوم از کسانیکه لطف کنند و مرا راهنمایی کنند.
من یک جدول در اکسس دارم که دارای 4 فیلد است که عبارتند از
RecNo = فیلد عددی - شماره رکورد
IdNum= فیلد عددی - گروه رکوردهای مربوط به یک شخص
RegDate= فیلد استرینگ برای نگهداری تاریخ
فیلد جدیدی را جدیدا اضافه کرده ام بنام Radif
Radif = فیلد عددی برای نگهداری شماره ردیف رکوردهای مربوط به یک شخص
بنابراین فیلد ردیف خالی است.
108446
برای اینکه فیلد Radif را پر کنم ، ابتدا توسط یک DataReader را خواندم و بعد بر حسب گروهبندی
فیلدهای IdNum , RegDate ، در یک حلقه شروع به پر کردن فیلد Radif کردم . بعد از حدود 50 یا 60 رکورد خطا میدهد و کار نصفه میماند
سورس کار به ترتیب زیر است:
Imports Microsoft.VisualBasic
Imports System.Data
Imports System.Data.OleDb
Public Class FrmAAAAAAAAAAAAA
Public Class ArgumentType
Public _RecNo As Long
Public _Radif As Long
Public _RegDate As String
End Class
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim strSql As String
Dim myIdNum As Long
Dim myRadif As Long
Dim myRecCounter As Long = 0
() Dim args As ArgumentType = New ArgumentType
Dim myDbRun1 As New ClassRun
Dim totalRows As Long = myDbRun1.GetValueLong("SELECT COUNT(*) FROMtblVojooheVarizi ")
strSql = "SELECT tblVojooheVarizi.RecNo, tblVojooheVarizi.IdNum, tblVojooheVarizi.RegDate, tblVojooheVarizi.Radif " & _
" FROM(tblVojooheVarizi) " & _
" WHERE (((tblVojooheVarizi.IsBaygani)=False)) " & _
" ORDER BY tblVojooheVarizi.IdNum, tblVojooheVarizi.RegDate;"
Dim myDbRun As New ClassRun
Dim dr As OleDbDataReader
myDbRun.MakeDR(strSql (
dr = myDbRun.drRun
Label2.Text = totalRows
While dr.Read ()
myRecCounter += 1
Label1.Text = myRecCounter
myIdNum = dr("IdNum")
myRadif = 1
While myIdNum = dr("IdNum")
args._RecNo = dr("RecNo")
args._Radif = myRadif
args._RegDate = IIf(IsDBNull(dr("RegDate")), " ", dr("RegDate"))
myUpdate(args)
Application.DoEvents()
dr.Read()
If myIdNum <> dr("IdNum") Then
myRecCounter += 1
Label1.Text = myRecCounter
myIdNum = dr("IdNum")
myRadif = 1
Continue While
End If
myRadif += 1
myRecCounter += 1
Label1.Text = myRecCounter
End While
End While
End Sub
( Private Sub myUpdate(ByVal args As ArgumentType
Dim cmd As New OleDbCommand
Dim SwSuccess As Integer
Dim strSql As String
Dim bt As New BahramTools
_ & " strSql = "UPDATE tblVojooheVarizi SET
_ & " Radif = " & args._Radif
" WHERE tblVojooheVarizi.RecNo=" & args._RecNo
Dim myDbRun As New ClassRun
cmd.CommandText = strSql
( SwSuccess = myDbRun.ExecCommand(cmd
If SwSuccess = 0 Then
("خطا در تصحیح اطلاعات !!!!")MsgBox
Else
("اطلاعات با موفقیت تصحیح شد")MsgBox
End If
() cmd.Dispose
End Sub
End Class
'''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' ''
Imports Microsoft.VisualBasic
Imports System.Data
Imports System.Data.OleDb
Public Class ClassRun
Dim STrPath As String
Dim ConStr As String
Dim myCon As OleDbConnection
Public dsRun As DataSet
Public dvRun As DataView
Public drRun As OleDbDataReader
Public dtRun As DataTable
Public Sub New()
STrPath = Application.StartupPath & "\Region.mdb"
ConStr = (String.Format("Provider=microsoft.jet.oledb.4.0; data source='{0}';jet oledb:database password=2ronis", STrPath))
myCon = New OleDbConnection(ConStr)
End Sub
Public Function ExecCommand(ByVal myCmd As OleDbCommand) As Boolean
On Error GoTo myerrhand
myCon = New OleDbConnection(ConStr)
myCmd.Connection = myCon
If myCon.State = ConnectionState.Closed Then
myCon.Open()
End If
Dim SwSuccess As Integer = myCmd.ExecuteNonQuery()
If SwSuccess = 0 Then
ExecCommand = False
Else
ExecCommand = True
End If
Exit Function
myerrhand:
Dim nn, dd
nn = Err.Number
dd = Err.Description
'myCon.Close()
'If nn = 5 Then
' myCon.Open()
'End If
Resume Next
End Function
Public Sub MakeDs(ByVal strSql As String)
myCon = New OleDbConnection(ConStr)
dsRun = New DataSet
If myCon.State = ConnectionState.Closed Then
myCon.Open()
End If
Dim da As New OleDbDataAdapter(strSql, myCon)
da.Fill(dsRun, "xTable")
End Sub
Public Sub MakeDR(ByVal strSql As String)
On Error GoTo myErrorHand
myCon = New OleDbConnection(ConStr)
If myCon.State = ConnectionState.Closed Then
myCon.Open()
End If
Dim cmd As OleDbCommand = New OleDbCommand(strSql, myCon)
drRun = cmd.ExecuteReader()
Exit Sub
myErrorHand:
Dim nn, dd
nn = Err.Number
dd = Err.Description
Resume Next
End Sub
Public Function GetValueLong(ByVal strSql As String) As Long
Try
Dim myValue As Long
myCon = New OleDbConnection(ConStr)
Dim cmd As OleDbCommand = New OleDbCommand(strSql, myCon)
If myCon.State = ConnectionState.Closed Then
myCon.Open()
End If
If cmd.ExecuteScalar Is DBNull.Value Then
myValue = 0
Else
myValue = cmd.ExecuteScalar
End If
myCon.Close()
Return myValue
Catch ex As Exception
myCon.Close()
MsgBox(Err.Description)
End Try
End Function
End Class
خطای بوجود آمده و محل آن
108447
http://barnamenevis.org/images/misc/pencil.png