[VisualStudio] Visual Basic6.0 动态操作 Crystal Report8.0 连接SQL Server

不知道现在是否还有人需要这个提示,我在一些旧程序升级时用到的。
- 首先需要一个Report文件;<xxx.rpt>
- 然后你需要把数据库连接字符串写好;

<connectPath = "Driver=SQL Server;Server=127.0.0.1;Uid=doublecells;Pwd=xxx;Database=pubs">
- 在使用程序中调用这个文件之前先要引入控件;<Crystal Report Control>
- 把控间拖到需要打印功能的"Form"窗体上,起个名字如"cr8";
- 接下来就是操作报表文件。
  - cr8.ReportFileName = App.Path & "/xxx.rpt"
  - cr8.Connect = connectPath //主要就是这句话
  -------------------------------------------------
  下面的语句只代表一种输出方法。
  这种方法需要把一些SQL语句写到Crystal Report文件中
  -------------------------------------------------
  - cr8.SelectionFormula = "{authers.au_id}='172-32-1176'"
  - cr8.RetrieveDataFiles
  - cr8.RetrieveStoredProcParams
  - cr8.PrintReport
有不同意见,欢迎交流探讨 

 


 

(更新 07-06-25)
看来世上很多事情是需要实践来验证的。
前几天本以为上面的方法已经解决了Crystal Report的动态连接数据库问题,
- 没想到把修改后的程序安装到新的机器上报表还是不能连接到数据库(因为数据库名称改变了)。
- 花了些时间,通过找资料什么的,又弄了下面这种方法。
- 开始:
  - 先定义个函数来检测连接新数据库的数据源是否建立,当然这是程序中来完成的。
  - exam Function CheckIsAlreadyCreateDSN();
  - 在实现功能前要引入一些API函数,来实现一些对注册表和系统的操作。
  - (1)Public Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" _
       (ByVal lpBuffer As String, ByVal nSize As Long) As Long
    - 检测当前系统的<Windows>目录所在的路径(exam <C:/Windows>),
    - 目的是为了找到"system32"目录下的<Sqlsrv32.dll>        
  - (2)Public Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" _
       (ByVal HKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
    - 创建新注册表项
  - (3)Public Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" _
       (ByVal HKey As Long, ByVal lpSubKey As String) As Long
    - 删除注册表项  
  - (4)Public Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" _
       (ByVal HKey As Long, ByVal lpValueName As String) As Long
    - 删除子键项
  - (5)Public Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" _
       (ByVal HKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
    - 打开注册表项
    - 如果打开成功返回值:0
  - (6)Public Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" _
       (ByVal HKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal _
       dwType As Long, lpData As Any, ByVal cbData As Long) As Long
    - 设置子键键值
  - 设置一些公共的常量在声明中
    - '----------------------------
    - ' Declare some need contants
    - '----------------------------
    - Const HKLM_SOFTWARE = "SOFTWARE"
    - Const HKLM_ODBC = "ODBC"
    - Const HKLM_ODBC_INI = "ODBC.INI"
    - Const HKLM_ODBC_DATA_SOURCE = "ODBC Data Sources"
    - Const KEY_VALUE_DATABASE = "Database"
    - Const KEY_VALUE_DRIVER = "Driver"
    - Const KEY_VALUE_LASTUSER = "LastUser" 
    - Const ERROR_SUCCESS = 0
  - 定义一些变量后,先获取Sql Server数据源驱动(看个人爱好也可以先做其他的)
    - '-----------------------------------------
    - ' Get the sql server driver DLL file path
    - '-----------------------------------------
      - lDriver = GetWindowsDirectory(sTemp, Len(sTemp))
      - sWindowsPath = Left(sTemp, lDriver)
      - sDriverPath = sWindowsPath & "/system32/Sqlsvr32.dll"
  - 可以用读取配置文件方式来获取用户设置的数据库名称/IP地址,
  - 当获取到数据库连接名称/IP地址后,开始进行对注册表的设置。
    - '-----------------------------------
    - ' Set an new DSN to Windows regedit
    - '-----------------------------------
    - KEY_DATA_SERVER = g_sServerName
    - HKLM_TEMPLATE = g_sServerName
    - sPath = HKLM_SOFTWARE & "/" & HKLM_ODBC & "/" & HKLM_ODBC_INI & "/" & HKLM_TEMPLATE
      - 获取注册表中<HKLM的"Software/ODBC/ODBC.INI">
    - sPath2 = HKLM_SOFTWARE & "/" & HKLM_ODBC & "/" & HKLM_ODBC_INI & "/" & HKLM_ODBC_DATA_SOURCE
      - 获取注册表中<HKLM的"Software/ODBC/ODBC.INI/ODBC Data Source">
    - lRegResult = RegOpenKey(HKEY_LOCAL_MACHINE, sPath, hCurKey)
      - 尝试打开注册表项
    - If lRegResult = ERROR_SUCCESS Then
      - 'this part allow to add some detail operate
    - Else
      - 没有打开需要的注册表项,进行创建。
    - lResult = RegCreateKey(HKEY_LOCAL_MACHINE, sPath, hCurKey)
    - If lResult = ERROR_SUCCESS Then
      - RegSetValueEx hCurKey, KEY_VALUE_DATABASE, 0, 1, ByVal KEY_DATA_DATABASE, Len(KEY_DATA_DATABASE)
      - RegSetValueEx hCurKey, KEY_VALUE_DRIVER, 0, 1, ByVal sDriverPath, Len(sDriverPath)
      - RegSetValueEx hCurKey, KEY_VALUE_LASTUSER, 0, 1, ByVal KEY_DATA_LASTUSER, Len(KEY_DATA_LASTUSER)
    - End If  
    - lResult2 = RegOpenKey(HKEY_LOCAL_MACHINE, sPath2, hRctKey)
    - If lResult2 = ERROR_SUCCESS Then
      - RegSetValueEx hRctKey, HKLM_TEMPLATE, 0, 1, ByVal KEY_DATA_SQLSERVER, Len(KEY_DATA_SQLSERVER)
    - End If
    - End If
创建完成后可以到控制面板里的数据源管理界面查看一下,是否存在了建立的数据源。
很多地方都可以进行细加工,甚至可以进一步把功能以DLL的形式来完成。那就看客自便了。
先写到这吧,有新发现的问题再续,欢迎交流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Crystal Reports 9.2 中文版(水晶报表) 下载,,软件版本:9.2.0.448不过现已出了Crystal Reports Professional v9.2.2.634 (c) Crystal Decisions,有足够的空间就提供.这是一个很不错的报表控件,我相信很多朋友都听说过吧!Crystal Reports 用于处理数据库,帮助用户分析和解释重要信息。使用 Crystal Reports 可以方便地创建简单报表,同时它也提供了创建复杂或专用的报表所需的整套工具。 创建所能想象的任何报表 Crystal Reports几乎可以从任何数据源生成您需要的报表。内置报表专家在您生成报表和完成一般的报表任务过程中,会一步一步地指导您进行操作报表专家通过公式、交叉表、子报表和设置条件格式帮助表现数据的实际意义,揭示可能被隐藏掉的重要关系。如果文字和数字确实不够充分,则用地理地图和图形进行形象的信息交流。 将报表扩展到 Web Crystal Reports 的灵活性并未停留在创建报表这一功能上 ?您可以用各种各样的格式发布报表,包括用 Microsoft 的 Word 和 Excel 发布、通过电子邮件甚至 Web 发布。高级的 Web 报表功能允许工作组中的其他成员在他们自己的 Web 浏览器中查看或更新共享报表。 将报表并入应用程序通过将 Crystal Reports 的报表处理功能整合到自己的数据库应用程序中,应用程序和 Web 开发人员可以节省开发时间并满足用户的需求。Crystal Reports 支持大多数流行的开发语言,可以方便地在任何应用程序中添加报表。 不论您是 IT 行业的站点管理员,还是营销推广经理,也无论您是金融业的数据库管理员还是 CEO,Crystal Reports 都堪称是一个功能强大的工具,它可以帮助每一个人分析、解释重要信息。感谢 revenant 上传!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值