65.9K
CodeProject 正在变化。 阅读更多。
Home

如何使用 VB6 打印发票?

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.33/5 (5投票s)

2011 年 5 月 13 日

CPOL

2分钟阅读

viewsIcon

84700

downloadIcon

7257

使用 Data Report 和 VB6 代码设计和打印发票

Invoice_VB6/image0023.JPG

引言

也许有些程序员会因为我写一篇关于 VB6 的文章而感到生气,但我知道仍然有很多程序员在使用 VB6 - 这篇文章就是为他们准备的。

本文介绍如何使用 VB6 打印发票,这是一个使用 VB6 打印发票的尝试。我的项目包含三个窗体:

  • frmInvoice 用于将 DataGrid 与 Northwind 数据库文件中的所有 Orders 绑定。
  • frmInput 用于选择您想要打印发票的 Order
  • frmOrder 用于在 DataGrid 上显示 Invoice,然后您可以预览或打印发票作为报告。

请确保您在引用中添加了 Microsoft ActiveX Data Objects 2.x Library。我们向项目中添加了 Data Report 用于打印发票。您可以使用任何数据库文件代替 Northwind.mdb,并更改我的代码以连接到您的数据库文件。 此外,您可以更改我的 SQL string 以绑定 DataGrid 中的数据。

Using the Code

连接到数据库文件并加载所有 Orders(您可以在 frmInvoice 窗体中阅读此代码)。

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim MyPass As String
Dim MyDataFile As String
Dim InvSql As String
Dim strCon As String

    MyPass = ""
    MyDataFile = App.Path & "\DataFile\Northwind.mdb"
    strCon = "provider=microsoft.jet.oledb.4.0;data source=" _
    & MyDataFile & ";" & "Jet OLEDB:Database Password=" & MyPass & ";"

    InvSql = "SELECT Customers.CompanyName, Customers.City, " _
    & "Employees.FirstName & Space(1) & Employees.LastName AS Salesperson, " _
    & "Orders.OrderID, Orders.OrderDate, " _
    & "[Order Details].ProductID, Products.ProductName, [Order Details].UnitPrice, " _
    & "[Order Details].Quantity, [Order Details].Discount, " _
    & "CCur([Order Details].UnitPrice*_
    [Quantity]*(1-[Discount])/100)*100 AS ExtendedPrice, " _
    & "Orders.Freight " _
    & "FROM Products INNER JOIN ((Employees INNER JOIN " _
    & "(Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID) " _
    & "ON Employees.EmployeeID = Orders.EmployeeID) " _
    & "INNER JOIN [Order Details] ON Orders.OrderID = [Order Details].OrderID) " _
    & "ON Products.ProductID = [Order Details].ProductID;"

    Set cn = New ADODB.Connection
    cn.CursorLocation = adUseClient
    cn.Open strCon

    Set rs = New ADODB.Recordset
    rs.Open InvSql, cn, adOpenStatic, adLockOptimistic

    Set datGrid.DataSource = rs 

以下代码用于将 DataGrid 与一个 Order 绑定(您可以在 frmOrder 窗体中阅读此代码)。

Dim rs As ADODB.Recordset
Dim intOrder As Integer
Dim InvSql As String
Dim strCon As String

    'InvoiceOrder is the number of Order which you select:
    intOrder = Val(InvoiceOrder) 

    ' Get Invoice Data:
    InvSql = "SELECT [Order Details].ProductID, " _
    & "Products.ProductName, [Order Details].UnitPrice, " _
    & "[Order Details].Quantity, [Order Details].Discount, " _
    & "CCur([Order Details].UnitPrice*[Quantity]*(1-[Discount])/100)*100 " _
    & "AS ExtendedPrice " _
    & "FROM Products INNER JOIN [Order Details] " _
    & "ON Products.ProductID=[Order Details].ProductID " _
    & "WHERE [Order Details].OrderID = " & intOrder

    Set rs = New ADODB.Recordset
    rs.Open InvSql, cn, adOpenStatic, adLockOptimistic
    Set ordGrid.DataSource = rs
   

以下代码用于将 Data Report 与一个 Order 绑定(您可以在 frmOrder 窗体中阅读此代码)。

Dim repSql As String

    repSql = "SHAPE {SELECT Orders.OrderID,Orders.OrderDate,Orders.Freight," _
    & "Customers.CustomerID,Customers.CompanyName," _
    & "Customers.City,Customers.Phone," _
    & "(Employees.FirstName + Space(1) + Employees.LastName) As SalesName " _
    & "FROM ((Orders " _
    & "INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID) " _
    & "INNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID) " _
    & "WHERE Orders.OrderID = " & intOrder & " } AS ParentCMD " _
    & "APPEND ({SELECT DISTINCTROW [Order Details].OrderID,_
    Products.ProductID,Products.ProductName," _
    & "[Order Details].UnitPrice,[Order Details].Quantity,[Order Details].Discount," _
    & "CCur([Order Details].UnitPrice*[Order Details].Quantity*_
    ((1-[Discount])/100)*100) As ExtendedPrice " _
    & "FROM [Order Details] " _
    & "INNER JOIN Products ON [Order Details].ProductID = Products.ProductID} " _
    & "AS ChildCMD RELATE OrderID TO OrderID)"

    Set invReport = New ADODB.Recordset

    invReport.ActiveConnection = cn

    If invReport.State = adStateOpen Then
        invReport.Close
    End If

    invReport.Open repSql, cn
    invReport.Requery

    Set repInvoice.DataSource = invReport

设计 Data Report

  • 报表页眉(Section 4):包含一个 'PictureBox' 用于设置任何图像(如果有的话),以及四个 'Label' 控件用于发票标题。
  • 组页眉(Section 6):包含客户名称、城市、销售人员、订单 ID、订单日期和数据表头。
  • 明细(Section 1):包含六个 'TextBox' 控件用于显示数据表中的字段。
  • 组页脚(Section 7):用于显示发票总计。

请阅读所有窗体和 Data Report 中的代码,然后运行代码查看结果。我希望这篇文章对您有所帮助。如果您有任何想法或发现任何问题,请告诉我。您可以阅读我的其他文章,了解如何使用 VB.NET 或 C# 打印发票。

© . All rights reserved.