1

VB.NET 2010を使用して、通帳プリンター(Epson PLQ 20)を使用して通帳(銀行取引の記録に使用される紙の本)に印刷したい。

私の現在のmysqlテーブル構造は、

1. tblLoanRegistry(LoanID pk, EMPNumber, Date, Amount, NoOfInstallments, Teller)
2. tblLoanAccount(ID pk, LoanID fk, Date, Payment, Interest, Total, Auto bool, Installment int, teller)

私の問題は次のとおりです。

  1. 印刷された最後の行を検出する方法は?
  2. 印刷されなかった最初の行を本の正しい位置に印刷する方法(正しい行)。

上記の各テーブルに「Printed」(ブール値)フィールドを追加することにしました。印刷するかどうか。vb.netの同じプリンターを使用して、テキストや数字などを印刷できます(例:フロントページのアカウント所有者の詳細)。しかし、トランザクションを印刷するときに、上記の問題に直面しています。あなたの助け/意見は高く評価されます。

詳細情報: 実際、私は非営利団体向けにphpとmysqlを使用して、学位のプロジェクトとしてWebベースのアカウント処理システムを開発しました。今、彼らは私が前に説明したように通帳に取引を印刷したいと思っています。

そのため、VB.NET(VB.NETはまったく初めてですが、vb6の経験があります)を使用してアプリケーションを作成しています。簡単な印刷に成功しましたが、これは別のことです。

上記の2つの問題を解決するのは良い考えではありません。

更新: 私は別の(悪いかもしれない)方法でそれをしました。印刷ボタンのクリックイベント時。

    Dim sqlLoan As String

    conn = New MySqlConnection(cnString)

    sqlLoan = "SELECT tblLoanAccount.Date,if(Installment = 0, 'Interest', concat('Installment : ', Installment)) as Description, tblLoanAccount.Payment, tblLoanAccount.Interest, " &
        " tblLoanAccount.Total, tblLoanAccount.Auto, tblLoanAccount.Installment FROM tblLoanAccount join tblloanRegistry on  tblloanRegistry.LoanID = tblLoanAccount.LoanID " &
        " where(tblloanRegistry.EMPNumber = " & cmbEMPN.Text & " And tblLoanAccount.LoanID = tblLoanRegistry.LoanID) AND tblLoanAccount.Total <> 0 ORDER BY tblLoanAccount.ID"

    Using conn As New MySqlConnection(cnString)
        Using cmd As New MySqlCommand(sqlLoan, conn)
            conn.Open()
            Using myReader As MySqlDataReader = cmd.ExecuteReader()
                Using writer As StreamWriter = New StreamWriter("c:\file.txt")
                    While myReader.Read()
                        writer.WriteLine("{0}, {1}, {2}, {3}, {4}", myReader.Item(0), myReader.Item(1), myReader.Item(2), myReader.Item(3), myReader.Item(4))
                    End While
                End Using
                Call Printing()
            End Using
        End Using
    End Using

    ' Print the file. 
Public Sub Printing()
    Try
        streamToPrint = New StreamReader(("c:\file.txt"))
        Try
            printFont = New Font("Arial", 10)
            Dim pd As New PrintDocument()
            AddHandler pd.PrintPage, AddressOf pd_PrintPage
            ' Print the document.
            pd.Print()
        Finally
            streamToPrint.Close()
        End Try
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
End Sub 'Printing

その他のコードはmsdnPrintDocumentClassです

4

3 に答える 3

1

この質問には多くの未知数があります。たとえば、アイテムを印刷済みとしてマークする場合、それを普遍的に(すべてのアプリケーション、すべてのトランザクション、およびすべての時間に対して)マークしますか、それとも限られたコンテキスト(特定のアプリケーション、トランザクション、または時間枠)内でのみマークしますか?

トランザクションは単一の.NETスレッド内で開始および完了しますか、それともこのアプリケーションはマルチスレッドですか、それともトランザクションは複数の独立した実行にまたがっていますか?物理的な紙を超えて印刷されたアイテムの記録が必要ですか?

特定のトランザクション内でのみ印刷されたアイテムのレコードが必要な場合は、tblPrintTransactionなどと呼ばれる3番目のテーブルを作成し、主キーまたはその他の識別子列と必要な追加の列(トランザクション開始日、終了日、ユーザーID、コンテキスト情報など)。アプリケーションを起動するときに、このテーブルに新しい行を作成し、行IDを取得します。

次に、少なくとも2つの列を持つ、tblPrintTransactionArtifactのような4番目のテーブルを作成します。1つの列は(tblPrintTransactionテーブルからの)トランザクションを識別する外部キーになり、1つ以上の列は印刷されたアイテムを識別するために使用されます。たとえば、テーブルに印刷アイテムを識別する2つの列を含めることができます。1つの列は「レジストリ」または「アカウント」のいずれかを指定し、もう1つの列はアイテムのIDを指定します。

もちろん、この情報はすべて(変数などを使用して)アプリケーション自体の中で作成および維持できますが、テーブルに格納すると、アプリケーションの実行後も保持され、永続的な記録が得られます。データベース内ではほとんど使用されていないため、アプリケーション内の印刷ページの現在の「行」を追跡することをお勧めします。

于 2012-12-26T15:27:28.037 に答える
1

http://www.jcl.vdtec.netで、MySql&VB.Netで使用している使いやすく軽量なレポートライターを使用してみることができます。

于 2013-03-12T09:20:50.667 に答える
1

Dim sqlLoan As String

conn = New MySqlConnection(cnString)

sqlLoan = "SELECT tblLoanAccount.Date,if(Installment = 0, 'Interest', concat('Installment : ', Installment)) as Description, tblLoanAccount.Payment, tblLoanAccount.Interest, " &
    " tblLoanAccount.Total, tblLoanAccount.Auto, tblLoanAccount.Installment FROM tblLoanAccount join tblloanRegistry on  tblloanRegistry.LoanID = tblLoanAccount.LoanID " &
    " where(tblloanRegistry.EMPNumber = " & cmbEMPN.Text & " And tblLoanAccount.LoanID = tblLoanRegistry.LoanID) AND tblLoanAccount.Total <> 0 ORDER BY tblLoanAccount.ID"

Using conn As New MySqlConnection(cnString)
    Using cmd As New MySqlCommand(sqlLoan, conn)
        conn.Open()
        Using myReader As MySqlDataReader = cmd.ExecuteReader()
            Using writer As StreamWriter = New StreamWriter("c:\file.txt")
                While myReader.Read()
                    writer.WriteLine("{0}, {1}, {2}, {3}, {4}", myReader.Item(0), myReader.Item(1), myReader.Item(2), myReader.Item(3), myReader.Item(4))
                End While
            End Using
            Call Printing()
        End Using
    End Using
End Using

    ' Print the file. 
Public Sub Printing()
    Try
        streamToPrint = New StreamReader("c:\file.txt")
        Try
            printFont = New Font("Arial", 10)
            Dim pd As New PrintDocument()
            AddHandler pd.PrintPage, AddressOf pd_PrintPage
            ' Print the document.
            pd.Print()
        Finally
            streamToPrint.Close()
        End Try
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
End Sub 'Printing

その他のコードはmsdnPrintDocumentクラスです。

于 2013-01-10T04:22:33.167 に答える