ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3353|回复: 1

[其他资源] ★SQL挂接的例子

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-6-2 23:36 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
http://club.excelhome.net/dispbbs.asp?BoardID=4&replyID=339946&id=158226&skin=0 9楼
以下是引用[I]hayxb[/I]在2006-4-1 12:50:36的发言:

谢谢,有和SQL挂接的例子吗。

主要技术: 制作本程序需要以下的知识:(再次强调,这里他只是个例子,虽然他在实际工作是开始服役了的!) Excel的简单操作 这个是当然的,也是最基本的! 对工作薄的锁定,设定密码以防止用户随便修改,该密码可以放权给实际操作员。 对文件的密码,可以防止未授权的人随便打开使用,相当于用户登录界面了,当然这也可以在Excel的界面中制作登录界面,然后调用数据库中的用户名表进行验证! Excel的高级应用 起码需要会用VBA呀,宏什么的! 以及为了美化界面而隐藏不需要的工具条、菜单等。 至于用不用Office助手只是界面上的一种美化! 工程文件的密码设定,相当于保护源代码!使不能让未授权的人随意修改代码! ADO的应用 想做数据库就不能不会他了! 在此需要通过ADO来连接SQL-Server数据库,并通过ADO的RecordSet来返回记录集! 在VFP中不管SPT也好、远程视图也好用的再熟练都不能说明能将ADO用的如何! SQL-Server 数据库的熟练应用 为什么说要熟练应用呢,我发现不少的人只是拿SQL的数据库中的表来用而已! 最起码建几个视图,写上一些存储过程来提高效率嘛! 代码分析: 开始查询按钮 Private Sub cmdSearch_Click() On Error GoTo ErrorHandler ShowBallon "正在查找,请稍侯…" If Assistant.Visible = False Then Assistant.Visible = True Assistant.Animation = msoAnimationSearching '清除数据 ClearData Dim strPerCode As String Dim intYear As Integer, intMonth As Integer Dim strSQL As String, strConnectString As String Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim n As Integer Dim strExp As String cmdSearch.Enabled = False strPerCode = Range("C" & StartRow + 1).Value '工号 intYear = Range("C" & StartRow + 2).Value '年 intMonth = Range("C" & StartRow + 3).Value '月 '查询命令 strSQL = "usp_GetPayroll '" & strPerCode & "'," & intYear & "," & intMonth '连接串 strConnectString = "Driver={SQL Server};Server=redtiger;UID=sa;PWD=;DataBase=hr2000" cn.Open strConnectString rs.Open strSQL, cn, 2, 3 n = 0 Do While Not rs.EOF Range("G" & StartRow + 1).Value = rs("nYear").Value Range("G" & StartRow + 2).Value = rs("nMonth").Value Range("G" & StartRow + 3).Value = rs("cDptCode").Value Range("G" & StartRow + 4).Value = rs("cDptName").Value Range("G" & StartRow + 5).Value = rs("per_code").Value Range("G" & StartRow + 6).Value = rs("per_name").Value '-- 以下需要循环 ' 从4行开始循环 30 下(考虑不会超过30个工资项目) n = n + 1 Range("I" & StartRow + n).Value = n Range("J" & StartRow + n).Value = rs("cItemName").Value Range("K" & StartRow + n).Value = rs("nAmount").Value rs.MoveNext Loop Assistant.Animation = msoAnimationCheckingSomething cmdSearch.Enabled = True If n = 0 Then MsgBox "对不起,根据你的条件找不到相关数据,请重新查询!", _ vbExclamation, "查询结果" Else With Range("J" & StartRow + n + 1) .Value = "合 计" End With With Range("K" & StartRow + n + 1) strExp = "K" & StartRow + 1 & ":K" & StartRow + n .Value = "=sum(" + strExp + ")" End With End If ShowBallon "查询完毕,请核对工资项目,如有问题请及时联系管理员!" Exit Sub ErrorHandler: '-- 错误处理 MsgBox "执行有错:(" & Err.Number & ") " & Err.Description, _ vbCritical, "执行错误" ShowBallon "查询错误!" End Sub 重新设置按钮 Public Sub cmdReset_Click() Dim n As Integer Range("C5").Select cmdSearch.Enabled = True ShowBallon "就绪" '清除数据 ClearData With Windows.Application .Caption = "工资查询子系统" .DisplayFormulaBar = False .DisplayNoteIndicator = False .DisplayCommentIndicator = xlNoIndicator .DisplayExcel4Menus = False .DisplayScrollBars = False .DisplayAlerts = False .DisplayFullScreen = False .EditDirectlyInCell = True End With With Windows.Item(1) .DisplayGridlines = False .DisplayFormulas = False .DisplayHeadings = False .DisplayHorizontalScrollBar = False .DisplayOutline = False .DisplayVerticalScrollBar = False .DisplayWorkbookTabs = False End With With Toolbars For n = 1 To .Count .Item(n).Visible = False Next End With With MenuBars On Error Resume Next .Item("工资工具条").Delete .Add "工资工具条" For n = 1 To .Count .Item(n).Activate Next On Error GoTo ErrorHandler With .Item("工资工具条") .Menus.Add "工资查询系统 Excel + SQL Server 前后台 版权所有? 红虎工作室(honghoo.NET) 1998-2003" .Menus(1).Enabled = False ' .Menus.Add "帮助(&H)" ' .Menus("我的菜单(&M)").MenuItems.Add "退出(&X)" ' .Menus("帮助(&H)").MenuItems.Add "关于(&A)…" .Activate End With End With Exit Sub ErrorHandler: End Sub 退出系统按钮 Private Sub cmdExit_Click() ShowBallon "退出工资查询系统…" If MsgBox("是否要退出工资查询系统?", _ vbQuestion + vbYesNo, _ Windows.Application.Caption) = vbYes Then '-- 退出 Excel Windows.Application.Quit Else ShowBallon "欢迎您又回来了…" End If End Sub 清除数据的自定义过程 '-- 清除数据 Private Sub ClearData() Dim n As Integer '清除员工信息数据 For n = 1 To 6 Range("G" & StartRow + n).Value = "" Next '清除工资项目数据 For n = 1 To 30 Range("I" & StartRow + n).Value = "" Range("J" & StartRow + n).Value = "" Range("K" & StartRow + n).Value = "" Next End Sub 显示泡泡的自定义过程: '-- 显示泡泡 Private Sub ShowBallon(strMessage As String) Range("A2").Value = strMessage Windows.Application.StatusBar = strMessage Dim objBal As Balloon Set objBal = Assistant.NewBalloon With objBal .Heading = "工资查询小助手: " & Now() & Chr(13) & Chr(10) .Text = strMessage .BalloonType = msoBalloonTypeBullets .Mode = msoModeModeless .Icon = msoIconAlertInfo .Button = msoButtonSetNone .Show End With End Sub 当打开该文件时,ThisWorkbook 自动执行的代码(即进行“重新刷新”按钮的执行!): Private Sub Workbook_Open() Sheet1.cmdReset_Click End Sub 全局定义: Const StartRow = 4 存储过程的定义: usp_GetPayroll 这里简单说明一下,具体代码省略! 工资表由 人事档案表、部门表、工资项目表、工资记录表四个表关联得到的一个视图。 工资项目表中明确了每种工资是属于应扣还是应发,因而又通过自定义函数返回正负号,这些又由存储过程usp_GetPayroll完成,并接受3个参数:工号、年、月,返回一个记录集。 比如图上所示个人所得税在数据库中是正数的,但工资项目中的设定决定了他是需要被减的,因此他的数要乘以-1得到一个负数。 总结: 以上便是该程序制作的总体思想,基本上已经说的很明朗了,当然也不太可能说的面面俱到,篇幅、时间、精力都是有限的。只是希望能通过此文给大家一点启发,从而使以后的工作中找到更好的解决方案! 总算也完成了此文的编排工作,不知道这种东西对大家的感觉如何,我也希望能收到一些反馈意见,使下次的工作中做的更好!
[此贴子已经被作者于2006-6-3 20:19:02编辑过]

TA的精华主题

TA的得分主题

发表于 2006-6-2 23:45 | 显示全部楼层

好贴!楼主还有什么好东东,继续哦

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-24 04:43 , Processed in 0.034257 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表