
加好友 发短信
菜鸟中的老鸟
等级:七尾狐
帖子:1486
积分:10064
威望:0
精华:9
注册:2008/11/14 8:54:00
|
★华海仓管之庖丁解牛篇★←菜鸟学习帮手(1月3日2楼更新gdlgh老师倾心讲解) Post By:2009/1/1 11:28:00 [只看该作者]
贴子已被锁定 为了方便广大菜鸟朋友学习华海仓管实例,本人在研究的同时逐步为各位献上代码解说,错误之处请多多包涵.
把gdlgh老师的登陆代码分离出来搞了个自定义登陆实例,大家慢慢学习. 学习重点: 全局变量/sql命令及select ; update ; insert into语句/动态控件生成/字符串加密解密/各权限功能实现方法
相关知识: 状态栏设置/MessageBox对话框/项目属性各事件的运用
只下不顶不是好同志哦...
动态控件代码: Dim cmd As New SQLCommand 设置SQL命令 cmd.C 设置连接数据库ckgl dim x,y,i1,i2 as integer 设置整数变量x,y,i1,i2 Dim dt As DataTable cmd.CommandText = "select 名称 From [权限]" 获取权限表名称列的值 dt = cmd.ExecuteReader() i2 = dt.datarows.count '生成用户列表 Dim rad As WinForm.RadioButton 定义rad为单选框控件 for y = 0 to Math.Ceiling(i2/5)-1 y=0至用户列表数除于5再减1的最小整数 for x = 0 to iif(y = Math.Ceiling(i2/5)-1 and (i2 mod 5)<>0,(i2 Mod 5)-1,4) x=0至用户列表数除于5再减1的最小整数并且 (这里我无法用语言表达...) rad = Forms("管理").CreateControl("rad" & i1,ControlTypeEnum.RadioButton) 在管理窗口建立单选框控件 rad.Text = dt.datarows(i1)("名称") 设置控件名称 rad.Left = 2+x*80 rad.Top = y*70 rad.Width = 80 rad.Height = 70 设置控件位置及长宽 rad.TextAlign = ContentAlignment.BottomCenter 设置控件文本位置 rad.ImageFile = ProjectPath & "Images\ne.ico" 设置控件图标 rad.ImageAlign = ContentAlignment.TopCenter 设置图标位置 rad.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText 设置图标文本相对位置 rad.Appearance = System.Windows.Forms.Appearance.Button Forms("管理").Controls("Panel1").AddControl(rad) 设置新增控件所处位置 i1 += 1 next next e.Form.Controls("rad0").Select()
权限设置窗口确定按钮:
Dim lst As WinForm.CheckedListBox lst = e.form.Controls("CheckListBox1") 设置lst为"CheckListBox1"字串 if Vars("用户").split(",")(0) = "rad0" and len(lst.value)<>158 then 如果是第一个用户并且字串长度不等于158则 msgbox("管理员必须拥有所有权限!",64,"提示") 弹出提示窗口 Return 返回 end if 结束 dim str1,str2,str3 as string 设置字符串str1.2.3 str1 = e.Form.Controls("TextBox1").value str2 = e.Form.Controls("TextBox2").value str3 = e.Form.Controls("TextBox3").value 设置相对应的TextBox if str1 is nothing then 如果str1为空则 msgbox("用户名不能为空!",64,"提示") 弹出提示窗口 else if str2 is nothing then 如果str2为空则 msgbox("密码不能为空!",64,"提示") 弹出提示窗口 else if str3 <> str2 then 如果str3为空则 msgbox("两次输入的密码不一致,请重新输入!",64,"提示") 弹出提示窗口 e.Form.Controls("TextBox2").value = nothing e.Form.Controls("TextBox3").value = nothing 相应的TextBox清空 else str2 = EncryptText(str2,"lgh","1qaz2wsx3edc") str2=加密后的str2 str3 = EncryptText(lst.Value & "","gdlgh","4rfv5tgb6yhn") str3=加密后复选列表框(lst)的值 Dim cmd As New SQLCommand 设置一个SQL命令 cmd.Con nection Name = "ckgl" 连接数据ckgl if Vars("用户")<>"" then 如果全局变量(用户)不为空则 cmd.CommandText = "UPDATE [权限] SET 名称 = '" & str1 & "',密码 = '" & str2 & "',权限 = '" & str3 & "' WHERE 名称 = '" & Vars("用户").split(",")(1) & "'" 向权限表写入数据 cmd.ExecuteNonQuery() 执行SQL命令 Forms("管理").Controls(Vars("用户").split(",")(0)).text = str1 管理窗口相对应的动态控件文本更改为str1的值 else cmd.CommandText = "select count(*) from [权限] where 名称 = '" & str1 & "'" 查询权限表里名称=str1的值 if cmd.ExecuteScalar() > 0 then 如果找到则 msgbox("用户名已存在!",64,"提示") 弹出提示窗口 e.Form.Controls("TextBox1").value = "" 当前窗口textBox1里的值清空 Return 返回 end if cmd.CommandText = "Insert Into [权限] (名称,密码,权限) values('" & str1 & "','" & str2 & "','" & str3 & "')" 权限表新增一行并写入相应数据 cmd.ExecuteNonQuery() 执行SQL命令 with Forms("管理").Controls("CheckBox1") .Checked = not .Checked end with 返回管理窗口CheckBox1控件,并使它呈非选中状态 end if Forms("管理").Controls("rad0").Select() 将焦点转到管理窗口第一个动态控件上 e.form.close 当前窗口关闭 end if
登陆窗口AfterLoad代码:
if Vars("用户")<>"gdlgh" then 如果全局变量(用户)不是gdlgh则 For Each tb As Table In Tables tb.Visible = false Next 隐藏所有表 QAT.Visible = False 隐藏快速访问栏 ConfigBar.Visible = False 隐藏配置栏 end if Dim cmd As New SQLCommand cmd.C Dim dt As DataTable cmd.CommandText = "select 名称 From [权限]" 获取权限表名称列的值 dt = cmd.ExecuteReader() 变量dt=获取的值 Dim cbox As WinForm.ComboBox = e.Form.Controls("ComboBox1") 设置cbox=ComboBox1 For Each dr As Datarow In dt.Datarows cbox.Items.Add(dr("名称")) Next 把获取的值加入到cbox中
------------------------------------分割线2009年1月2日更新-------------------------------------
登陆窗口确定按钮:
Dim cmd As New SQLCommand '定义一个SQL命令 cm d.Con nection Name = "c k g l" '指定数据源ckgl cmd.CommandText = "select 密码 From [权限] where 名称 = '" & e.Form.Controls("ComboBox1").value & "'" '设置SQL命令=从权限表的密码列寻找名称等于ComboBox1的字符串 dim str as string = cmd.ExecuteScalar() '定义STR为找到的这个字符串 str = DecryptText(str,"lgh","1qaz2wsx3edc") 'str=解密后的字符串,其中密钥1密钥2分别为"lgh"和"1qaz2wsx3edc" cmd.CommandText = "select 权限 From [权限] where 名称 = '" & e.Form.Controls("ComboBox1").value & "'" '设置SQL命令=从权限表的权限列寻找名称等于ComboBox1的字符串 Vars("权限") = DecryptText(cmd.ExecuteScalar(),"gdlgh","4rfv5tgb6yhn") '全局变量(权限)=解密后的找到的字符串,其中密钥1密钥2分别为"gdlgh","4rfv5tgb6yhn" if str = e.Form.Controls("TextBox1").value and str <> "" then '如果解密后的str=当前窗口TextBox1里面的字符串并且不为空则 Vars("用户") = e.Form.Controls("ComboBox1").value '全局变量(用户)=当前窗口ComboBox1里的字符串 QAT.Visible = True '快速访问栏可见 ConfigBar.Visible = True '配置栏可见 Tables("查询表").Visible = True '查询表可见 StatusBar.Reset() '重设状态栏 StatusBar.Message1= " 单机版[试用] V1.0 || 操作员: " & Vars("用户") '设置左边状态栏 StatusBar.Message2= "" '中间状态栏 StatusBar.Message3= " 广州华海软件工作室" '设置右边状态栏 e.form.close '当前窗口关闭 else '否则 msgbox("密码不正确!",64,"提示") '弹出提示窗口 end if
'登陆窗口取消按钮:
if Vars("用户")<>"gdlgh" then '如果全局变量(用户)不等于gdlgh则 e.form.close 当前窗口关闭 system.diagnostics.process.GetProcessesByName("foxtable")(0).kill 'foxtable进程关闭 else '否则 e.form.close 当前窗口关闭 end if
[此贴子已经被作者于2009-1-3 9:59:00编辑过]
|
|