汚いソースで申し訳ありませんが、以下のようにMySQLから検索したデータをACCESSのテーブルに格納し、
ACCESSのレポートを使って帳票を出力しています。
その際に、当然画面上の条件によって出力されるデータが変わるように作成してありますが、なぜかアクセスのレポート
を出力した際に、1回目だけは前の条件で検索した内容が表示されてしまいます。
2回目を実行すると問題なく条件に合致したデータがレポートとして表示されます。
何かキャッシュみたいなのが残ってしまっているのでしょうか。。。。
教えて下さい。
《記述内容》
Dim Connection As New MySqlConnection
Dim Command As MySqlCommand
Dim DataReader As MySqlDataReader
Dim IN_ZAN() As structh_date = Nothing
ReDim Preserve IN_ZAN(1000)
Dim icount, jcount As Integer
icount = 0
jcount = 0
Dim IN_発注日FROM As String
Dim IN_発注日TO As String
Dim IN_発注先コード As String
Dim IN_発注番号FROM As String
Dim IN_発注番号TO As String
IN_発注日FROM = TXT_発注日FROM.Text
IN_発注日TO = TXT_発注日TO.Text
IN_発注先コード = TXT_発注先コード.Text
IN_発注番号FROM = TXT_発注番号FROM.Text
IN_発注番号TO = TXT_発注番号TO.Text
'発注日FROMのスラッシュ文字をすべて削除
Dim str1 As String
Dim str1_IN_発注日FROM As String
str1 = IN_発注日FROM
str1_IN_発注日FROM = str1.Replace("/", "")
'発注日TOのスラッシュ文字をすべて削除
Dim str2 As String
Dim str2_IN_発注日TO As String
str2 = IN_発注日TO
str2_IN_発注日TO = str2.Replace("/", "")
'接続文字列を設定
Connection.ConnectionString = "server=localhost;database=DB_KIKAN;user id=root;password=000000"
'オープン
Connection.Open()
'コマンド作成
Command = Connection.CreateCommand
'SQL文作成
Command.CommandText = "SELECT * FROM t_発注データ"
Dim SQL1 As String
Dim SQL2 As String
If str1_IN_発注日FROM <> "" Then
If str2_IN_発注日TO <> "" Then
SQL2 = " WHERE 発注日付 BETWEEN " + str1_IN_発注日FROM + " AND " + str2_IN_発注日TO
Command.CommandText = String.Concat(Command.CommandText, SQL2)
Else
SQL1 = " WHERE 発注日付 = " + str1_IN_発注日FROM
Command.CommandText = String.Concat(Command.CommandText, SQL1)
End If
Else
If IN_発注先コード <> "" Then
End If
End If
'データリーダーにデータ取得
DataReader = Command.ExecuteReader
'データを全件出力
Do Until Not DataReader.Read
If IsDBNull(DataReader.Item("発注番号")) Then
IN_ZAN(icount).IN_発注番号 = ""
Else
IN_ZAN(icount).IN_発注番号 = DataReader.Item("発注番号").ToString
End If
If IsDBNull(DataReader.Item("発注日付")) Then
IN_ZAN(icount).IN_発注日付 = ""
Else
IN_ZAN(icount).IN_発注日付 = DataReader.Item("発注日付").ToString
End If
icount = icount + 1
Loop
'データベースファイル名
Dim sfina As String = "C:\sample1.mdb"
'データベースパラメータ
Dim strDatbasePara As String
Dim ObjCnn As New ADODB.Connection
Dim ObjRst As New ADODB.Recordset
strDatbasePara = "Provider=Microsoft.Jet.OLEDB.4.0;" + _
"Data Source=" + sfina + ";" + _
"Jet OLEDB:Engine Type=5;"
Try
ObjCnn.Open(strDatbasePara)
ObjRst.Open("table1", ObjCnn, ADODB.CursorTypeEnum.adOpenDynamic, ADODB.LockTypeEnum.adLockOptimistic)
'テーブル全件削除
Do Until ObjRst.EOF
ObjRst.Delete()
ObjRst.MoveNext()
Loop
If ObjRst.EOF Then
For jcount = 0 To icount - 1
'該当すれば更新します
ObjRst.AddNew()
ObjRst.Fields("発注番号").Value = IN_ZAN(jcount).IN_発注番号
ObjRst.Fields("発注日付").Value = IN_ZAN(jcount).IN_発注日付
ObjRst.Update()
Next
End If
ObjRst.Close()
Catch ex As Exception
End Try
ObjCnn = Nothing
ObjRst = Nothing
' Microsoft Access 9.0 Object Library
ac = CreateObject("Access.Application")
' データベースを開く
ac.OpenCurrentDatabase("C:\sample1.mdb")
' アプリケーションを表示する
ac.Visible = True
' 名前を指定してレポートを開く
ac.DoCmd.OpenReport("発注一覧表", 2) 'acViewPreview
' レポートの最大化
ac.DoCmd.Maximize()
ツイート | ![]() |