ACCESSレポート出力に関して


asami  2012-01-20 01:59:46  No: 147466

汚いソースで申し訳ありませんが、以下のように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()


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加