如何使用 VB6 打印发票?






4.33/5 (5投票s)
使用 Data Report 和 VB6 代码设计和打印发票
引言
也许有些程序员会因为我写一篇关于 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# 打印发票。