質問するログイン新規登録
Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

334閲覧

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

mononga

総合スコア5

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2024/01/30 07:32

編集2024/01/31 06:52

0

0

実現したいこと

前任者が作成した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

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

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

補足

宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

fso.Close()をしたら解決しました

投稿2024/01/31 06:53

mononga

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問