Foxtable(狐表)用户栏目专家坐堂 → ★华海仓管之庖丁解牛篇★←菜鸟学习帮手(1月3日2楼更新gdlgh老师倾心讲解)


  共有39001人关注过本帖树形打印复制链接

主题:★华海仓管之庖丁解牛篇★←菜鸟学习帮手(1月3日2楼更新gdlgh老师倾心讲解)

帅哥哟,离线,有人找我吗?
菜鸟foxtable
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 菜鸟中的老鸟
等级:七尾狐 帖子: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对话框/项目属性各事件的运用

 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:登陆测试.rar

只下不顶不是好同志哦...

动态控件代码:
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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
菜鸟foxtable
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 菜鸟中的老鸟
等级:七尾狐 帖子:1486 积分:10064 威望:0 精华:9 注册:2008/11/14 8:54:00
  发帖心情 Post By:2009/1/1 11:35:00 [只看该作者]

此代码解说转自gdlgh老师置顶贴,听老师一言,胜读十遍帮助...图片点击可在新窗口打开查看
先看看这行超级代码...是不是有点晕?..图片点击可在新窗口打开查看
s1 = "SELECT '0' AS 序号, 库名, (SELECT COUNT(*) FROM (SELECT DISTINCT 库名,货品编码 FROM CKKC,仓库信息 WHERE 仓库 = 库名) WHERE 库名 = M.库名) AS 商品种类, (SELECT COUNT(*) FROM CYMX WHERE 方向='入库' AND 仓库 = M.库名 @#$) AS 本期入库_笔数,  Round((SELECT SUM(金额) FROM CYMX WHERE 方向='入库' AND 仓库 = M.库名 @#$),2) AS 本期入库_金额, (SELECT COUNT(*) FROM CYMX WHERE 方向='出库' AND 仓库 = M.库名 @#$) AS 本期出库_笔数,  Round((SELECT SUM(金额) FROM CYMX WHERE 方向='出库' AND 仓库 = M.库名 @#$),2) AS 本期出库_金额, (SELECT COUNT(*) FROM CYMX WHERE 仓库 = M.库名 AND (类型='调拨入库' OR 类型='调拨出库') @#$) AS 本期调拨_笔数, (SELECT COUNT(*) FROM CYMX WHERE 仓库 = M.库名 AND 类型='调拨入库' @#$) AS 本期调拨_调入笔数, (SELECT COUNT(*) FROM CYMX WHERE 仓库 = M.库名 AND 类型='调拨出库' @#$) AS 本期调拨_调出笔数, Round((SELECT SUM(金额) FROM CYMX WHERE 仓库 = M.库名 AND (类型='调拨入库' OR 类型='调拨出库') @#$),2) AS 本期调拨_金额, (SELECT COUNT(*) FROM CYMX WHERE 仓库 = M.库名 AND (类型='盘盈' OR 类型='盘亏') @#$) AS 本期盘点_笔数, (SELECT COUNT(*) FROM CYMX WHERE 仓库 = M.库名 AND 类型='盘盈' @#$) AS 本期盘点_盘盈笔数, (SELECT COUNT(*) FROM CYMX WHERE 仓库 = M.库名 AND 类型='盘亏' @#$) AS 本期盘点_盘亏笔数, Round((SELECT SUM(金额) FROM CYMX WHERE 仓库 = M.库名 AND (类型='盘盈' OR 类型='盘亏') @#$),2) AS 本期盘点_金额, '' AS 备注 FROM 仓库信息 AS M"

@#$符号的解释:

之所以用@#$,系用来简化代码!

===找到TreeView4控件查看代码=====

'生产明细表

s 13 = "SELECT M.序号, M.日期, M.部门, M.货品编码, N.货品名称, N.规格型号, N.计量单位, VAL(M.入库数量) AS 数量, M.单价, M.金额, N.备注 FROM CYMX AS M LEFT JOIN 库存商品 AS N ON M.货品编码=N.货品编码 WHERE 类型='生产入库' @#$ ORDER BY 日期, 部门, M.货品编码"     '这里有个'@#$'

略..........

            select case value2  '判断选定节点内容,赋值全局变量

  略.........

               case "生产明细表"   '把SQL字符串赋值给全局变量Vars("str2") 
                    Vars("str2") = s13
               case "部门领用汇总表"
                    Vars("str2") = s14
               case "物品领用汇总表"
                    Vars("str2") = s15
               case "领用明细表"
                    Vars("str2") = s16
            end select


========报表查询窗口查询按钮代码=============

with e.form
    dim sql,str1,str2,str3,kz as string
    kz = "TextBox4,ComboBox4,ComboBox3,ComboBox5,ComboBox6,TextBox1,TextBox3,DateTimePicker1,DateTimePicker2"   '查询条件的控件数组
    str1 = "单号='@$0',类型= '@$1',仓库= '@$2',供应单位= '@$3',经办人= '@$4',货品编码 = '@$5',部门= '@$6',日期 >= #@$7#,日期 <= #@$8#"    '对应查询条件的条件数组(@$为替换符,作用是可简化代码!)
    dim i as integer
    For Each k as string In kz.split(",")    '分解控件数组,循环组合查询条件串sql
        if .Controls(k).Value isnot nothing then    '若条件控件内容为空,跳过,否则组合查询条件串
            if i=0 and .Controls("CheckBox1").Checked then    '判断使用模糊单号还是精确单号查询
                sql = sql & " AND " & str1.split(",")(i).Replace("='@$" & i," like '%" & .Controls(k).Value & "%")    '组合条件串,条件值替换@$i。(模糊查询)
            else
                sql = sql & " AND " & str1.split(",")(i).Replace("@$" & i,.Controls(k).Value)    '组合条件串,条件值替换@$i。(精确查询)
            end if
        end if
    i += 1
    Next
    Dim cmd As New SQLCommand
    cmd.C
    Dim dst As WinForm.DataList = Forms("窗口1").Controls("DataList7")  
    cmd.CommandText = Vars("str2").Replace("@#$",sql)   '把 Vars("str2")=s13 中的'@#$'替换为条件串sql,组成一个完整的SQL查询语句!!
    msgbox(Vars("str2").Replace("@#$",sql))    '要查看完整的SQL查询语句串,加入这条代码就明白了!!!!!!
    '生成序列号
    dst.DataTable = cmd.ExecuteReader()
    dst.Build()
    For i=1 to dst.count
        Dim dr as DataRow = dst.GetDataRow(i-1)
        dr("序号") = "" & i
    Next
end with

[此贴子已经被作者于2009-1-3 10:13:27编辑过]

[本帖被加为精华]
 回到顶部
帅哥哟,离线,有人找我吗?
菜鸟foxtable
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 菜鸟中的老鸟
等级:七尾狐 帖子:1486 积分:10064 威望:0 精华:9 注册:2008/11/14 8:54:00
  发帖心情 Post By:2009/1/1 11:35:00 [只看该作者]

图片点击可在新窗口打开查看留位置更新

 回到顶部
帅哥哟,离线,有人找我吗?
菜鸟foxtable
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 菜鸟中的老鸟
等级:七尾狐 帖子:1486 积分:10064 威望:0 精华:9 注册:2008/11/14 8:54:00
  发帖心情 Post By:2009/1/1 11:36:00 [只看该作者]

图片点击可在新窗口打开查看留位置更新

 回到顶部
帅哥哟,离线,有人找我吗?
舜风
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 小学文化
等级:小狐 帖子:374 积分:2318 威望:0 精华:0 注册:2008/12/6 20:34:00
  发帖心情 Post By:2009/1/1 12:18:00 [只看该作者]

请问:为何时而可用CTRL+SHIRT+F12调出系统菜单
时而又不能调出呢

 回到顶部
帅哥哟,离线,有人找我吗?
菜鸟foxtable
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 菜鸟中的老鸟
等级:七尾狐 帖子:1486 积分:10064 威望:0 精华:9 注册:2008/11/14 8:54:00
  发帖心情 Post By:2009/1/1 12:58:00 [只看该作者]

以下是引用舜风在2009-1-1 12:18:00的发言:
请问:为何时而可用CTRL+SHIRT+F12调出系统菜单
时而又不能调出呢

以开发者用户登陆系统即可以调出菜单,否则不能.


 回到顶部
帅哥哟,离线,有人找我吗?
gaoqr
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:353 积分:3058 威望:0 精华:0 注册:2008/9/1 6:39:00
  发帖心情 Post By:2009/1/1 14:01:00 [只看该作者]

感谢楼主的讲解!


 回到顶部
美女呀,离线,留言给我吧!
julia
  8楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:57 积分:489 威望:0 精华:0 注册:2008/12/5 14:52:00
  发帖心情 Post By:2009/1/1 14:12:00 [只看该作者]

为何在华海软件里看不到表?比如说员工信息,商品入库表等这些表是做在哪里的?

 回到顶部
帅哥哟,离线,有人找我吗?
菜鸟foxtable
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 菜鸟中的老鸟
等级:七尾狐 帖子:1486 积分:10064 威望:0 精华:9 注册:2008/11/14 8:54:00
  发帖心情 Post By:2009/1/1 14:16:00 [只看该作者]

不是看不到,是隐藏了,你可以把项目属性AfterOpenProject里的代码删除,看看有什么不同.
并且,许多数据是通过SQL语句提取的....


图片点击可在新窗口打开查看此主题相关图片如下:001.jpg
图片点击可在新窗口打开查看
[此贴子已经被作者于2009-1-1 14:20:43编辑过]

 回到顶部
美女呀,离线,留言给我吧!
julia
  10楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:57 积分:489 威望:0 精华:0 注册:2008/12/5 14:52:00
  发帖心情 Post By:2009/1/1 14:47:00 [只看该作者]

我已经删除掉项目属性AfterOpenProject里的代码,但是还是看不到表格呀,是怎么回事?


 回到顶部
总数 33 1 2 3 4 下一页