Foxtable(狐表)用户栏目专家坐堂 → [分享][原创]狐表学习笔记及我做的订单查询系统思路


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

主题:[分享][原创]狐表学习笔记及我做的订单查询系统思路

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


加好友 发短信
等级:一尾狐 帖子:495 积分:4870 威望:0 精华:0 注册:2012/4/20 8:42:00
[分享][原创]狐表学习笔记及我做的订单查询系统思路  发帖心情 Post By:2012/5/24 8:56:00 [显示全部帖子]

断断续续学习狐表差不多有一个月的时间,在论坛上得到了狐爸的支持很是感激,但是我感觉狐表刚入门的时候,如果不能沉下心去,基本上就找不到北,光看帮助,基本上难度很大,今天我就关于我刚开始学习狐表遇到的困惑以及解决的方法告诉大家,希望大家不走弯路,并且更容易去接触狐表,闲话不多说,开始!

学习前提:学习狐表之前,大家应该对office的表格有所了解,如果你不知道office的表格,那么建议先去了解一下,了解之后,再去了解一下数据库的概念,如果这两样你都有所了解的话,那么学习狐表,基本上难度不大。

在这里我班门弄斧,说一下我对数据库,以及狐表的理解,所谓数据库,就是一个装载数据的仓库,这个仓库里面又有很多的小仓库,分类装载很多的东东,就产生了,数据库表的概念。也就是说:一个大仓库(数据库),包含很多小仓库(数据表),小仓库包含很多东东(数据表的行),很多东东又有很多属性,比如材质,数量,规格等,(数据表的列),这样就形成了所谓的数据库。

说道这里,我想没学过数据库的朋友应该对数据库有了直观的了解,还是用仓库举例子,我们知道了什么是数据库,而且知道了数据库相当于一个仓库,但是我们怎么能从仓库里准确的把一个东东拿出来呢?这就需要对仓库进行操作了,比如查找仓库里面的东东(数据库查语句),比如把查找到的东东拿出来(数据库删语句),把找到的东东改个标签或者打个标记(数据库改语句),往仓库加东东(数据库添语句),这样我们可以对仓库进行类似的操作,数据库也是一样的,写到这里,大家对数据库应该有个了解了吧?

再说狐表,在我的理解里,狐表就是一个仓库,里面有很多小仓库(数据表),小仓库里有很多东东按照各自的规格排列好,就是数据行,然后呢,狐表中有自带的数据表,也就是table,还有datatable,这两个的区别是,table是你能在界面中看到的表,datatable是你在界面中看不到的表,是在狐表中的内建数据库或者外部数据库存在的表。这是这两个关键字的区别。

 


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


加好友 发短信
等级:一尾狐 帖子:495 积分:4870 威望:0 精华:0 注册:2012/4/20 8:42:00
  发帖心情 Post By:2012/5/24 9:04:00 [显示全部帖子]

office表和狐表:

狐表集成了office表的所有功能,并且增加了通过狐表中的表格,可以绑定到好几种数据库中比如(mssql),这样的话就有利于我们统计很早以前的数据,并调出以前的数据,并且我们可以通过对狐表操作,找到我们关心的数据。

估计大家有个问题,就是说,以前所做的表格数据如何导入到狐表进行操作呢?有的表格比较少,有的则有很多了,在这里,我告诉大家,狐表有导入功能的,当然不是狐表菜单中的导入功能,那个功能比较死板,如果你做的表格格式不一样的话,就不能导入了,即使能导入也是混乱的数据,这个就需要咱们结合狐表的窗口功能去做一个按钮来实现导入功能了,不过这个导入功能建议在你理解了狐表主界面和窗口界面中函数的调用的时候再用吧。


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


加好友 发短信
等级:一尾狐 帖子:495 积分:4870 威望:0 精华:0 注册:2012/4/20 8:42:00
  发帖心情 Post By:2012/5/24 9:11:00 [显示全部帖子]

函数作用的对象:

其实在狐表的数据表中,也就是table中,有很多事件,也是格式化好的事件,在这些个事件中,我们足以做好多事情了,这些所谓的事件,也就是判断表状态用的,表状态改变时,需要做什么操作。还有窗口,实际上狐表的窗口制作,就和软件工程里面的写代码一样,只不过他们把很多常用的功能对象化了,也就是说,你不用知道button这个按钮到底是怎么做出来,你只知道把他拉到窗口中,然后点击双击,根据你的动作来添加事件就行了。当然,狐表中的函数有的是作用于主界面的,有的是作用于窗口的,大家在学习的时候可以去看看。

 


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


加好友 发短信
等级:一尾狐 帖子:495 积分:4870 威望:0 精华:0 注册:2012/4/20 8:42:00
  发帖心情 Post By:2012/5/24 9:23:00 [显示全部帖子]

了解了基本概念之后,我们会产生一个想法,既然狐表能做出很多管理系统,比如仓库管理系统,人事管理系统,财务管理系统,那么我们自己能用狐表做一个吗?答案是肯定的!

我们现在开始设计一个系统!

设计系统之前,我们要先了解,我们设计的系统的功能,比如我自己要设计一个订单录入系统,那么我要先了解我们公司关于订单的所有流程,了解了所有流程之后,书写一个流程说明。

我说一下我们公司的订单流程:

客户确定了终端客户的需要做的产品尺寸、产品种类、产品数量之后,会发送一个测量单到我们客服部,然后我们客服部根据测量单,分解数据,并录入单价,计算总价,然后再回传给客户确认签字,客户签字再回传,然后我们客服就把确认的单子,转入到技术部,并且由技术部把订货单进行产品分解,分解成单一产品物料,分解完毕后,产生生产单,然后下入到生产,然后生产完毕后,通知客服,订单已经完成,可以发货,然后发货。

这里个过程产生了很多的数据。具体产生什么数据,叙述太多,我不一一说明了,反正咱现在要做的是先明确流程,然后再设计系统。。

流程明确之后,我要建立数据库,我用的是mssql数据库,因为数据量比较大,而且还需要进行联网操作,这里我就要在外部数据库中建立一些我所用到的表,比如订单表、订单明细表、客户表、产品信息表等等。这些表建立好之后,我们可以再进行下一步的设计了。

 


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


加好友 发短信
等级:一尾狐 帖子:495 积分:4870 威望:0 精华:0 注册:2012/4/20 8:42:00
  发帖心情 Post By:2012/5/24 9:24:00 [显示全部帖子]

今天不写了,抽时间再写。大家有看的吗?共同交流一下。。

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


加好友 发短信
等级:一尾狐 帖子:495 积分:4870 威望:0 精华:0 注册:2012/4/20 8:42:00
  发帖心情 Post By:2012/5/24 11:10:00 [显示全部帖子]

关于对话框,

在我们编写代码的过程中,大家要善于运用对话框,就是MessageBox.Show(),这个函数。可以在运行过程中直接体现出中间过程的数据,或者变量,让你代码出错的时候,可以一目了然!


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


加好友 发短信
等级:一尾狐 帖子:495 积分:4870 威望:0 精华:0 注册:2012/4/20 8:42:00
  发帖心情 Post By:2012/7/13 11:28:00 [显示全部帖子]

权限设置:第一张图是未设置完成的权限窗口界面,我的思路是这样的:

先建立一张权限表:

这个权限表包含字段为:

用户名,密码,分组,权限,订单新增,订单修改,订单删除(其中订单的,为逻辑列),然后在内部函数中自定义函数,授权:

'args(0)用户名
Dim tb As Table =Tables("授权")
tb.Filter = "[用户] = '" & args(0) & "'" '找出当前行
If tb.Current("订单新增") = True Then
    Tables("订单").AllowAddNew = False
Else
   Tables("订单").AllowAddNew = True
End If
If tb.Current("订单修改") = True Then
    Tables("订单").AllowEdit = True
Else
   Tables("订单").AllowEdit = False
End If
If tb.Current("产品新增") = True Then
  Forms("共享窗口").Controls("productedit").Enabled = True 
Else
Forms("共享窗口").Controls("productedit").Enabled = False
End If
'Return Nothing

然后登录自定义用户名,使用户名存放于全局代码的某个变量中,我设置为:_username,

上面的函数,只获取用户名就可以。

用法为:Functions.Execute("授权",_UserName)


图片点击可在新窗口打开查看此主题相关图片如下:权限.png
图片点击可在新窗口打开查看


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


加好友 发短信
等级:一尾狐 帖子:495 积分:4870 威望:0 精华:0 注册:2012/4/20 8:42:00
  发帖心情 Post By:2012/7/13 11:50:00 [显示全部帖子]

关于老数据批量导入思路:

比如我有很多订单数据,其中订单号唯一,而每条订单编号中,有很多条产品销售记录,怎么从表格中提取这些数据呢?

第一建立三张表,表名为:订单,订单明细,订单备注(订单表订单编号为唯一字段,订单明细为产品销售记录,以订单编号为记录,订单备注为每个编号的订单,有可能有很多条,但是打印到A4纸上,只能打印十行或者多一点,那么每张纸都有一个对当页产品的备注.)

这三个表建立完成之后,考虑如何去做导入.

 由于需要导入的表格文件很多,那么我们不能一张一张的导入,因此我们在帮助中找一下关于取值文件夹结合的例子,然后,再做一个可以自选择目录进行导入的按钮:

Dim dlg As New FolderBrowserDialog '定义文件夹选择框
Dim tx5 As WinForm.TextBox = e.Form.Controls("TextBox5") '定义文本输入框
If dlg.ShowDialog = DialogResult.Ok Then ' 如果选择完毕,点击确定
    tx5.Value = dlg.SelectedPath '文本输入框的值为,刚才选取的路径,
    Dim tb As Table =Tables("授权") '定义授权表
    tb.filter ="[用户]='" & _username & "'" '搜索授权表中用户列中的数值为当前登录用户名的字段。
    tb.Current("导入路径") = dlg.SelectedPath '然后当前行的字段导入路径为刚才选取的路径,
    DataTables("授权").save() '保存授权表。
End If

以上这段代码,可以放到按钮的click事件里,或者是图片控件的click事件里.

然后下面的导入代码比较长

pause = True '停止表事件按钮
Dim path As WinForm.TextBox = e.Form.Controls("TextBox5") '目录,
Dim cmd As new SQLCommand
cmd.C '指定数据源
Dim Listo As String
Dim filess As String
Dim d As Integer
Dim tb As Table = Tables("订单")
Dim oi As Table = Tables("订单明细") '订单明细表
Dim Listorder As String
Dim val() As String '分解字符串
For Each file As String In filesys.GetFiles(path.Value)
 ' MessageBox.Show(file)
    If right(file,3) <> "xls" Then
        MessageBox.Show(file & "文件类型不符!","提示")
        Return
    Else
        Dim Book As New XLS.Book(file)
        Dim Sheet1 As XLS.Sheet = Book.Sheets(0)
        If sheet1(0,0).Value.Replace(" ","") <> "山东鑫迪家居装饰有限公司尚品本色木门订货单" Then
          '  MessageBox.Show(sheet1(0,0).Value.Replace(" ",""))
           MessageBox.Show(file & "工作表不在第一页,请查看!")
            Return
        End If '这段代码是判断工作表是不是在第一页。以及格式是否正确。
        
        If sheet1(2,15).Value <> "" Then
            val=sheet1(2,15).Value.split(":")
            Listorder = val(1)
        ElseIf sheet1(2,14).Value <> "" Then
            val=sheet1(2,14).Value.split(":")
            Listorder = val(1)
        End If '以上判断是订单编号在那一列.
       
        cmd.CommandText = "Select 订单编号 From {订单} Where 订单编号 = '" & listorder & " ' "
        Listo = cmd.ExecuteScalar()       
        If Listo = "" Then
            '判断数据库中订单号是否存在
            tb.AddNew()
            tb.Current("订单编号") = listorder '订单编号
tb.Current("订单状态") = "已发货" '订单编号
            tb.Current("销售区域") = sheet1(4,0).Value.Remove(0,5) '销售区域
            If sheet1(4,4).Value = ""   Then '判断联系人是否为空
                tb.Current("联系人") = sheet1(4,5).Value.Remove(0,4) '联系人
            ElseIf sheet1(4,4).value.Remove(0,3) = "" Then
                tb.Current("联系人") = ""
            Else
                ' MessageBox.Show(sheet1(4,4).Value.Remove(0,3),"联系人")
                tb.Current("联系人") = sheet1(4,4).Value.Remove(0,4) '联系人
            End If
            If sheet1(4,7).Value = "" And sheet1(4,8).Value <> "" Then
               tb.Current("联系电话") = sheet1(4,8).Value.Remove(0,5) '联系电话
            Else
            tb.Current("联系电话") = sheet1(4,7).Value.Remove(0,5) '联系电话
            End If
            If sheet1(4,10).Value = "" And sheet1(4,11).Value <> "" Then
                tb.Current("安装用户") = sheet1(4,11).Value.Remove(0,5) '安装用户
            Else
            tb.Current("安装用户") = sheet1(4,10).Value.Remove(0,5) '安装用户
            End If
            If sheet1(3,14).Value = "" Then
            tb.Current("订货日期") = sheet1(3,15).Value.Remove(0,5) '订货日期
            Else
            tb.Current("订货日期") = sheet1(3,14).Value.Remove(0,5) '订货日期
            End If
            If sheet1(4,15).Value = "" Then
                tb.Current("预定交货日期") = ""
            Else
                tb.Current("预定交货日期") = sheet1(4,15).Value.Remove(0,5) '交货日期
            End If
            For i As Integer = 8 To sheet1.Rows.count - 1 '查找所有行
                Select Case sheet1(i,0).value
                    Case "订单总货款:"
                        If Integer.TryParse(sheet1(i,2).value,d) Then '如果第二列为为数字时
                            tb.Current("订单金额") = sheet1(i,2).Value '订单总金额
                        ElseIf Integer.TryParse(sheet1(i,3).value,d) Then
                            tb.Current("订单金额") = sheet1(i,3).Value '订单总金额
                        End If
                    Case "购货单位业务章/签字:"
                        tb.Current("sys_用户") = sheet1(i,10).value.Remove(0,11) '用户
                End Select
            Next
            
                 For i As Integer = 8 To sheet1.Rows.Count - 1
                If Integer.TryParse(sheet1(i,0).Value,d) AndAlso sheet1(i,0).Value <> "" AndAlso tb.Current("订单编号") <> "" AndAlso sheet1(i,19).Value <> "" Then
                    '判断第一列是否为空 是否为数字,和订单表的订单号码是否为空.
                    oi.AddNew()
                    oi.Current("订单编号")  = tb.Current("订单编号") 

                    oi.Current("门洞尺寸")  = Replace(sheet1(i,1).Value," ","") '

                    oi.Current("门框尺寸")  = Replace(sheet1(i,2).Value," ","") '

                    oi.Current("产品型号")  = Replace(sheet1(i,3).Value," ","") '

                    oi.Current("门扇_素门_材质")  = Replace(sheet1(i,4).Value," ","") '

                    oi.Current("门扇_素门_尺寸")  = Replace(sheet1(i,5).Value," ","") '

                    oi.Current("门扇_油漆_颜色")  = Replace(sheet1(i,6).Value," ","") '

                    oi.Current("门扇_玻璃_名称")  = Replace(sheet1(i,7).Value," ","") '

                    oi.Current("门扇_数量")  = Replace(sheet1(i,8).Value," ","") '

                    If Integer.TryParse(sheet1(i,14).Value,d) Then
                        oi.Current("单套价格")  = Replace(sheet1(i,14).Value," ","") '

                    End If
                    oi.Current("配件_名称")  = Replace(sheet1(i,16).Value," ","") '

                    oi.Current("配件_数量")  = Replace(sheet1(i,17).Value," ","") '

                    oi.Current("配件_单价")  = Replace(sheet1(i,18).Value," ","") '

                    If Integer.TryParse(sheet1(i,19).Value,d) Then
                    oi.Current("合计金额")  = Replace(sheet1(i,19).Value," ","") '

                    End If
                    oi.Current("输入日期")  = CDate(sheet1(3,15).Value.Remove(0,5)) '

                Else
                End If
            Next
            End If
       
        For i As Integer = 8 To sheet1.Rows.Count - 1 '对表做循环
            If Integer.TryParse(sheet1(i,19).Value,d) And sheet1(i,0).Value <> "合计" And sheet1(i,0).value = "" And sheet1(i,14).Value <> ""  Then '如果合计列可以转换为数字
                oi.AddNew()
                oi.Current("订单编号")  = tb.Current("订单编号") 

                oi.Current("单套价格")  = Replace(sheet1(i,14).Value," ","") '

                oi.Current("合计金额") = Replace(sheet1(i,19).Value," ","")
            End If
        Next
      End If
    FileSys.MoveFile(file,"C:\Users\Administrator\Desktop\订单测试\" & filesys.GetName(file))
DataTables("订单").Save()
DataTables("订单明细").Save()
Next
pause = False

 以下附件是表结构.

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:structure.rar


图片点击可在新窗口打开查看此主题相关图片如下:导入.png
图片点击可在新窗口打开查看

 回到顶部