【VB.net】Accessのデータをファイル出力したいが一部データが削れてしまう

実現したいこと

前任者が作成したVB.netで作成されたアプリケーションをWinodws7からWindows10へ移行してプグラム修正しています。

環境
windows10
visualstudio2022
access2021

発生している問題・分からないこと

Accessのデータを”TDAT.DAT”のファイルへデータ出力するプログラムですが、実行するとなぜかデータ後半部分の一部が消えてしまいます。
xconnection = "Provider=Microsoft.Jet.OLEDB.12.0; Data Source = " & "C:\KEDI\TDAT.MDB" 以外の箇所はいじっていません。
詳しい方はご意見頂けますと幸甚です。
コードが長いので一部省力しています。

該当のソースコード

Public Class F送信データ作成 Private olecn As OleDb.OleDbConnection Private olecnG As OleDb.OleDbConnection Private olecmd As OleDb.OleDbCommand Private olecmd1 As OleDb.OleDbCommand Private olecmd2 As OleDb.OleDbCommand Private olecmdG As OleDb.OleDbCommand Private oleadp As OleDb.OleDbDataAdapter Private dts As DataSet Private dr As OleDb.OleDbDataReader Private dr1 As OleDb.OleDbDataReader Private dr2 As OleDb.OleDbDataReader Private NullObj As Object Dim チェックOK As Boolean Dim Lエラー名 As String Dim IN件数 As Double Dim OT件数 As Double Dim xconnection As String Dim XREC As String Dim WREC As String Dim ZREC As String Dim LENW As Integer Dim L発注部署 As String     ~略~ Dim LK発注番号 As String Dim R1REC As String Dim R2REC As String Dim R3REC As String Dim R4REC As String Dim R1レコード識別コード As String '* 2     ~略~ Dim R1余白 As String '* 180 Dim R2レコード識別コード As String '* 2     ~略~ Dim R2余白 As String '* 33 Dim R3レコード識別コード As String '* 2     ~略~ Dim R3余白 As String '* 17 Dim R4レコード識別コード As String '* 2     ~略~ Dim R4余白 As String '* 20 Private Sub F送信データ作成_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing olecn.Close() End Sub Private Sub F送信データ作成_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim fso As IO.StreamWriter Dim encode As System.Text.Encoding Dim 開始 As Boolean Dim CSVMEI As String Dim CSVNO As Integer Dim L送信時間 As String Dim L送信日付 As String Dim LL発注数 As Double Dim XX発注数 As String CSVMEI = "c:\Kdata\work\TDAT.DAT" CSVNO = 1 encode = System.Text.Encoding.GetEncoding("Shift-JIS") fso = New IO.StreamWriter(CSVMEI, False, encode) 'xconnection = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source = " & "C:\KEDI\TDAT.MDB" xconnection = "Provider=Microsoft.Jet.OLEDB.12.0; Data Source = " & "C:\KEDI\TDAT.MDB" olecn = New OleDb.OleDbConnection(xconnection) olecn.Open() olecmd = olecn.CreateCommand olecmd1 = olecn.CreateCommand olecmd2 = olecn.CreateCommand L送信日付 = Mid(Today, 1, 4) & Mid(Today, 6, 2) & Mid(Today, 9, 2) L送信時間 = Mid(Now, 12, 2) & Mid(Now, 15, 2) & Mid(Now, 18, 2) チェックOK = True 開始 = True IN件数 = 0 OT件数 = 0 R1レコード識別コード = "C1" R1業務識別コード = "ORDERS" R1発注元識別コード = "000012" R1発注元支店 = "01 " R1発注先コード = "DCTS" R1システム日付 = Mid(Today, 1, 4) & Mid(Today, 6, 2) & Mid(Today, 9, 2) R1システム時間 = Mid(Now, 12, 2) & Mid(Now, 15, 2) & Mid(Now, 18, 2) R1余白 = Space$(180) R1REC = R1レコード識別コード R1REC = R1REC & R1業務識別コード R1REC = R1REC & R1発注元識別コード R1REC = R1REC & R1発注元支店 R1REC = R1REC & R1発注先コード R1REC = R1REC & r1システム日付 R1REC = R1REC & R1システム時間 R1REC = R1REC & R1余白 WREC = R1REC fso.WriteLine(WREC) olecmd.CommandText = "SELECT * FROM T発注明細 WHERE 済 <> '1' AND チェック = '1' ORDER BY 顧客コード,納入先名,納入先支店名" dr = olecmd.ExecuteReader Do While dr.Read = True Call ヘダー編集() WREC = R2REC fso.WriteLine(WREC) WREC = R3REC fso.WriteLine(WREC) L発注部署 = Trim(dr("発注部署"))          ~略~ L金額 = Format(Val(dr("金額")), "0000000000") If L発注単位 = "KGM" Or L発注単位 = "KG" Or L発注単位 = "kgm" Or L発注単位 = "kg" Or L発注単位 = "Kgm" Or L発注単位 = "Kg" Then olecmd1.CommandText = "SELECT * FROM MT変換 " olecmd1.CommandText = olecmd1.CommandText & " WHERE " olecmd1.CommandText = olecmd1.CommandText & "K営業所コード='" & dr("発注部署") & "' AND " olecmd1.CommandText = olecmd1.CommandText & "K得意先コード='" & dr("K得意先コード") & "' AND " olecmd1.CommandText = olecmd1.CommandText & "K得意先支店コード='" & dr("K支店コード") & "' AND " olecmd1.CommandText = olecmd1.CommandText & "K納入先コード='" & dr("K納入先コード") & "' AND " olecmd1.CommandText = olecmd1.CommandText & "K商品コード='" & dr("K商品コード") & "' " dr1 = olecmd1.ExecuteReader If dr1.Read = True Then If Trim(dr1("単位")) = "EA" Or Trim(dr1("単位")) = "ea" Or dr1("単位") = "Ea" Then If dr("予備2") <> 0 Then L発注単位 = Trim(dr1("単位")) LL発注数 = dr("発注数") / dr("予備2") XX発注数 = Format(LL発注数, "000000.000") If Mid(XX発注数, 8, 3) <> "000" Then LL発注数 = Val(Mid(XX発注数, 1, 6)) + 1 Else LL発注数 = Val(Mid(XX発注数, 1, 6)) End If L発注数 = Format(Val(LL発注数), "0000000.000") End If End If End If dr1.Close() Else L発注単位 = "EA" End If R4レコード識別コード = "L1" & Space$(100) R4行 = "000001" & Space$(100) R4品種コード = LT商品コード & Space$(100) R4品名 = L品名 & Space$(100) R4希望納期 = L納期 & Space$(100) R4発注単位 = L発注単位 & Space$(100) R4発注数 = L発注数 & Space$(100) R4単価 = L単価 & Space$(100) R4金額 = L金額 & Space$(100) R4自由欄 = Space$(110) R4キャンセルマーク = Space$(100) R4連絡事項 = Space$(180) R4余白 = Space$(120) XREC = R4レコード識別コード R4REC = MidB(XREC, 1, 2) XREC = R4行 R4REC = R4REC & MidB(XREC, 1, 6)          ~略~ XREC = R4余白 R4REC = R4REC & MidB(XREC, 1, 20) fso.WriteLine(R4REC) IN件数 = IN件数 + 1 T件数.Text = IN件数 Application.DoEvents() Loop dr.Close() olecmd2.CommandText = "UPDATE T発注明細 SET 済 = '1' WHERE 済 <> '1' AND チェック = '1' " olecmd2.ExecuteNonQuery() MsgBox("完了しました") Me.Close() End Sub Private Sub

試したこと・調べたこと

上記の詳細・結果

"fso.WriteLine(WREC)"の直前に"MsgBox(WREC)"でAccessからデータが読み込めているか確認しましたが特に問題無いようでした。出力の部分で異常が起きているようです。

補足

宜しくお願い致します。

コメントを投稿

0 コメント