我用datagrid1和ado连好了。可能正常显示SQL中的数据了。但我用什么控件或方法可以打印出我想要的内容?
具体点好吗。
谢!
或提供一点文章之类的。

解决方案 »

  1.   

    这是一个小的打印模块
    Public rowlab As Integer  '定义一个公用变量Function prnt11(X As Integer, Y As Integer, Font As Single, txt As String, Val As Integer)
    Dim str As String
    Dim str1 As String
    Dim str2 As String
    Dim i As Integer
    Printer.CurrentX = X
    Printer.CurrentY = Y
    Printer.FontBold = False
    Printer.FontSize = Font
    str = txt
    str2 = str
    i = 0
    rowlab = 0
    If Len(Trim(str)) = 0 Then
         rowlab = 1   '待打印字符串为空的标志
    Else
      Do While Len(str) > 0
         Printer.CurrentX = X
         Printer.CurrentY = Y + rowlab * 240
         rowlab = rowlab + 1
         If Len(str) >= Val Then
            str1 = Mid(str, 1, Val)
            Printer.Print str1
            i = i + 1
            str = Mid(str2, i * Val + 1)
         Else
           Printer.Print str
           Exit Do
         End If
       Loop
    End If
    End Function'---- 注: Prnt11函数原形:prnt11(X As Integer, Y As Integer, Font As Single, Txt As String, Val As Integer),其各参数含义如下:
    '---- X、Y为待打印字符串左上角起始座标;
    '---- Font为字体大小;
    '---- Txt为待打印字符串;
    '---- Val为字符串打印折行长度这是一个打印按钮代码,你可以修改一下数据库的信息调试打印!
    Private Sub CmdPrnt_Click()
    Dim fnt As Single
    Dim pp As Integer
    Dim stry As Integer, strx As Integer
    Dim stry1 As Integer, strx1 As Integer, linw As Integer
    Dim page1 As Integer, p As Integer, gridrow As Integer, ii As Integer
    p = 0
    ii = 1                                     'ii记录MSFGRID1表格同一记录内字段最大打印行
    pp = 0                                     '开始页码
    ss$ = "海南省邮政商函广告局仓库管理系统"  ' 表头
    Static a(4) As Integer
    kan = 0
    a(0) = 1200
    a(1) = 2800
    a(2) = 1800
    a(3) = 1800
    a(4) = 1800
    page1 = 46                                  '定义每页行数
      strx = 200
      strx1 = 200
      stry = 1400
      stry1 = 1400
      linw = 240                                '定义行宽
      fnt = 10                                  '定义字体大小
      For i = 0 To 4
          kan = kan + a(i)
      Next
      gridrow = Data1.Recordset.RecordCount  If gridrow = 0 Then
         MsgBox "无满足条件记录打印!"
         Exit Sub
      End If
      Printer.FontName = "黑体"
      dd = prnt11(3300, 700, fnt, ss$, 26)       '打印标题
      dd = prnt11(200, stry - 250, fnt, "物品 ID", 26)
      dd = prnt11(1600, stry - 250, fnt, "物品名称", 26)
      dd = prnt11(4180, stry - 250, fnt, "物品数量", 26)
      dd = prnt11(5980, stry - 250, fnt, "库存时间", 26)
      dd = prnt11(7780, stry - 250, fnt, "签收人员", 26)
      Printer.Line (strx - 20, stry - 30)-(10460, stry - 30)
      Printer.FontName = "宋体"
      For j = 1 To gridrow                        '打印gridrow条记录
           MSFGrid1.Row = j
           strx = strx1
           For i = 0 To 4                         '打印0—4 列
             MSFGrid1.Col = i
             dd = prnt11(strx, stry, fnt, MSFGrid1.Text, IIf(i = 3, 13, 55))
             If ii < rowlab Then
                                                  'ii记录同一记录内字段最大打印行
               ii = rowlab
             End If
             strx = strx + a(i)
           Next
           p = p + ii
           rowlab = ii
           ii = 1                                  '重新初始化
           If p > page1 Then
               p = 0
               strx = strx1
               For n = 0 To 4
                 strx = strx + a(n)
               Next
               pp = pp + 1
               stry = stry + rowlab * linw
               foot$ = "第" + CStr(pp) + "页"
               dd = prnt11(strx / 2, stry + 3 * linw, 10, foot$, 26)
               stry = stry1
               Printer.NewPage
               Printer.FontName = "黑体"
                dd = prnt11(3300, 700, fnt, ss$, 26)       '打印标题
                dd = prnt11(200, stry - 250, fnt, "物品 ID", 26)
                dd = prnt11(1600, stry - 250, fnt, "物品名称", 26)
                dd = prnt11(4180, stry - 250, fnt, "物品数量", 26)
                dd = prnt11(5980, stry - 250, fnt, "库存时间", 26)
                dd = prnt11(7780, stry - 250, fnt, "签收人员", 26)
               Printer.FontName = "宋体"
               strx = strx1
             Else
               stry = stry + rowlab * linw
             End If
          Next
          If p < page1 Then
              For p = 0 To page1 + 1
                 strx = strx1
              Next
          End If
          strx = strx1
          For n = 0 To 4
              strx = strx + a(n)
          Next
          pp = pp + 1
          foot$ = "第" + CStr(pp) + "页"
          dd = prnt11(strx / 2, stry + 3 * linw, 10, foot$, 26)
          Printer.EndDoc
          
      End Sub
      

  2.   

    方便的用datareport (功能局限)
    直接的用printer (代码繁琐) 
    强大的用水晶报表 (学习困难)
    容易的用写excel (速度缓慢,并要求客户机有excel软件)
      

  3.   

    先看看这个:
    http://www.dapha.net/down/show.asp?classid=1&Nclassid=140