贴子已被锁定
为了方便广大菜鸟朋友学习华海仓管实例,本人在研究的同时逐步为各位献上代码解说,错误之处请多多包涵.
把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编辑过]