标题:学习一个月,开始开发系统,开贴做个记念!
只看楼主
kings12333
Rank: 2
等 级:论坛游民
帖 子:112
专家分:59
注 册:2012-11-29
得分:0 
回复 6楼 hmj0745
感谢....
2021-12-08 16:22
kings12333
Rank: 2
等 级:论坛游民
帖 子:112
专家分:59
注 册:2012-11-29
得分:0 
回复 2楼 约定的童话
有老师真好....
2021-12-08 16:23
hmj0745
Rank: 2
等 级:论坛游民
帖 子:52
专家分:83
注 册:2021-11-6
得分:0 
主框架已确定好了,为了方便后续布署,选择了VB做前端,Access做数据库的形式。具体思路如下:
1. ADO 连接ACCESS 全部写到模块 Function 里面,如果后面要升级把数据移到Mysql或是云数据库,只要重写这些连接就行了。
2. 考虑到Access的容量和并发有限,软件分多个功能模块,为每个功能模备独立的MDB数据库, 数据交互时要用到比较多的平面合查询,共用全局联接函数需要设计的好一些。
3. 图片,文件类体积较大的全部用加载读到界面,和指定转存到局域网设定的文件夹内,这样数据库内只用来存纯数据。
这样的话,通过多数据库,和文件存文件夹的方式,应该是可以比较有效的缓解了Access的容量和并发的短处了
这两天做好了登陆窗体,和主框架
1. 登陆窗体上有 单选按钮,可以指定程序路径方式,计划设为:单机、局域网、互联网(目有没有做,要买云数据库)
2. TXT做为,登陆窗体的登陆信息的配置文件,登陆时可以加载上次登陆的信息(这里在想能不能把TXT加密转换成乱码,但又怕影响加载时的读入,后面有空时试一下)
3. 主窗体用MID 窗口,左边用treeview 做功能菜单,点击Node 可以在各功能菜单中转换。tree是通过从数据库加载的,所以支持更换名字和图片。
4. 主窗体左边的功能菜单具备往左边滑入隐藏和拉出效果。子窗体同MID窗体无缝同步缩放(为了解决拉动缩放时的闪屏问题花了我一些时间)
下面上图,和部分代码。 (不知怎么做哪种点击演示的Gif动图,也不知论坛是否支持这个功能)
这是几做好的几个界面,下面附上登陆界面的代码,好像前几天看到有人在找这个。
程序代码:
Private Sub Form_Load() '//登陆界面加载
YN = False
Call LoadPath '''加载路径
Call LoadData '''加载预存信息
Call AddIDist '''加载账号list
Rem MeLogo.Picture = LoadPicture(FindPic("\Images\TPIC", "logo001"))'// 用于设计登陆界面加公司logo
End Sub

Private Sub Timer1_Timer()
Unload Me
A0MDIForm1.Show 0
Timer1.Interval = 1000 '开启时钟给予显示登陆成功的提示时间
End Sub


Private Sub Option1_Click() '// 点击后单机路径载入本地数据库
On Error GoTo errmsg
If YN = True Then Exit Sub '如果是由备存记忆带来的触发直接跳转
myPath = App.Path '// 点击后将单机路径赋给变量
Call SavePath '// 路径信息存盘
GoTo 111
errmsg:
    MsgBox Err.Description, , "错误报告"
111
End Sub

Private Sub Option2_Click() '// 把共享数据库路径写入本地数据库
On Error GoTo errmsg
If YN = True Then Exit Sub '//如果是由备存记忆带来的触发直接跳转
myPath = C_SelectPath(Me.hwnd, App.Path)
If myPath = "" Then '//如果没有选择文件夹路径回到选择单机路径
Option1.Value = True
End If
Call SavePath '// 路径信息存盘
GoTo 111
errmsg:
    MsgBox Err.Description, , "错误报告"
111
End Sub

Private Sub AddIDist() '//账号获取list
On Error GoTo errmsg
StrDB = "\data\1系统设置.accdb"
myTable = "A2账号管理"
SQL = "select 账号 from " & myTable & ""
Opendb (StrDB)
Set RS = CreateObject("adodb.recordset") '//创建一个数据集保存数据
RS.Open SQL, cnn, 1, 3 '//数据集保存数据
For x = 0 To RS.RecordCount - 1
Me.账号.AddItem RS.Fields!账号
RS.MoveNext
Next
GoTo 111
errmsg:
    MsgBox Err.Description, , "错误报告"
111
Disconnect
End Sub

Private Sub 登陆_Click(index As Integer)
On Error GoTo errmsg
Static try_times As Byte '设置一个静态变量来保存登错次数
If Me.账号 = "" Or IsNull(Me.账号) = True Then
Msg ("账号不能为空!")
Me.账号.SetFocus
Exit Sub
End If
If Me.密码 = "" Or IsNull(Me.密码) = True Then
Msg ("密码不能为空!")
Me.密码.SetFocus
Exit Sub
End If

StrDB = "\data\1系统设置.accdb"
myTable = "A2账号管理"
SQL = "select 密码 from " & myTable & " where 账号='" & Me.账号 & "'"
Opendb (StrDB)
Set RS = CreateObject("adodb.recordset") '//创建一个数据集保存数据
RS.Open SQL, cnn, 1, 3 '//数据集保存数据

If Me.密码.Text = RS.Fields!密码 Then
Disconnect '//断开数据库,避免给备存账号造成影响

Frame2.Visible = True
Timer1.Interval = 150 '//开启时钟显示登陆成功字标1秒后关闭

Call SaveData '//对登陆信息进行存盘
Call SavePath '//对设置路径进行存盘

Else
   try_times = try_times + 1
    If try_times >= 5 Then
     Msg ("密码错误5次请联系管理员,系统自动退出!")
     Unload Me
     End
     Exit Sub
    End If

 Msg ("密码不正确,请重新输入")

 Me.密码 = ""

 Me.密码.SetFocus

 Exit Sub
End If
GoTo 111
errmsg:
    MsgBox Err.Description, , "错误报告"
111
End Sub

Private Sub SaveData() 'Rem 把保存密码和勾选状态保存到本地
On Error GoTo errmsg
MyId = Me.账号 '//把当前登陆账号赋值给全局
Dim ID, PW, Ck1, Ck2
ID = Me.账号
PW = Me.密码
Ck1 = Check1.Value
Ck2 = Check2.Value
Open App.Path & "\savedata.txt" For Output As #1
Print #1, ID
Print #1, PW
Print #1, Ck1
Print #1, Ck2
GoTo 111
errmsg:
    MsgBox Err.Description, , "错误报告"
111
Close #1
End Sub

Private Sub SavePath() 'Rem 把路径数据备份到本地
On Error GoTo errmsg
If Option1.Value = True Then
Ms = "单机"
Else
Ms = "局网"
End If
Dim Path As String, Op1, Op2 As Boolean
Op1 = Option1.Value
Op2 = Option2.Value
Path = myPath
Open App.Path & "\Savepath.txt" For Output As #1
Print #1, Op1
Print #1, Op2
Print #1, Path
GoTo 111
errmsg:
    MsgBox Err.Description, , "错误报告"
111
Close #1
End Sub

Sub LoadPath() '// 加载路径
On Error GoTo errmsg
YN = True '// 加入一个标记判断,登陆自加载中不触发单选框事件
Dim str As String
Dim arr(3) As String
Open App.Path & "\Savepath.txt" For Input As #1
For x = 1 To 3
Line Input #1, str
If str = "" Then '//如果没有加载到路径信息视为第1次直接加载为单机路径
myPath = App.Path
Me.Option1 = True
GoTo 111
End If
arr(x) = str '//把读取到的数据3条写入数组
Next
If arr(1) = True Then '//如果加载的是单机
myPath = App.Path
Me.Option1 = True
Else '//如果加载的是局网就把存盘的路径写入并点选标记
myPath = arr(3)
Me.Option2 = True
End If
GoTo 111
errmsg:
    MsgBox Err.Description, , "错误报告"
111
Close #1
End Sub

Sub LoadData() '从TXT文件中把登陆备存数据加载进来
On Error GoTo errmsg
YN = True '// 加入一个标记判断,登陆自加载中不触发单选框事件
Dim str As String
Dim arr(4) As String
Open App.Path & "\SaveData.txt" For Input As #1
For x = 1 To 4
Line Input #1, str
If str = "" Then GoTo 111
arr(x) = str '//把读取到的数据3条写入数组
Next
If arr(3) <> 1 Then GoTo 111 '//如果账号是非记录状态直接结束
If arr(3) = 1 Then
Me.账号 = arr(1)
Me.Check1.Value = Checked
End If
If arr(4) = 1 Then '//如密码是记录状态
Me.密码 = arr(2)
Me.Check2.Value = Checked
End If

GoTo 111
errmsg:
    MsgBox Err.Description, , "错误报告"
111
YN = False
Close #1
End Sub

Private Sub 退出_Click()
Unload Me
End
End Sub

'*****************************************************************************************
'01函数名:  GetPath
'函数功能:  读档取得数据库路径
'*****************************************************************************************
Rem 从本机存盘加载数据库路径
Function GetPath()
Dim str As String
Dim arr(3) As String
Open App.Path & "\Savepath.txt" For Input As #1
For x = 1 To 3
Line Input #1, str
If str = "" Then '//如果没有加载到路径信息视为第1次直接加载为单机路径
myPath = App.Path
GoTo 222
Else
arr(x) = str '//把读取到的数据3条写入数组
End If
Next
myPath = arr(3) '//如果加载的是单机
222
Close #1 '// 关闭加载
GetPath = myPath
End Function

'*****************************************************************************************
'02函数名:  Opendb
'函数功能:  连接到指定名称的数据库
'*****************************************************************************************
Public Sub Opendb(StrDB As String) '//输入一个数据库名,连接到数据库,(前面要带/)
If isConnect = True Then Exit Sub '//如果连接为真
myPath = GetPath
Rem 加载路径结束
Set cnn = CreateObject("adodb.connection")  '定义CNN为一个数据集
cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
myPath + StrDB + ";jet oledb:database password=" & "0745"
If cnn.State <> adStateOpen Then '对连接做出判断,不成功终止
MsgBox "数据库连接失败!", , "系统提示!"
Else
isConnect = True
End If
End Sub

'*****************************************************************************************
'03函数名:  Disconnect
'函数功能:  断开数据库连接
'*****************************************************************************************
Public Sub Disconnect() '// 断开连接
If isConnect = False Then Exit Sub '// 如果处于断开状态直接跳转
cnn.Close
Set cnn = Nothing
isConnect = False
End Sub





[此贴子已经被作者于2021-12-8 19:27编辑过]


不去做永远没有结果!
2021-12-08 18:50
hmj0745
Rank: 2
等 级:论坛游民
帖 子:52
专家分:83
注 册:2021-11-6
得分:0 
回复 7楼 罗达
建议现在直接就就用VB 来写。
你有VBA 的基础,会学的很快,就是有一点,移到VB里做,表格方面的操作就没有哪么方便了。
另外就是VB因为年代久远,微软没有再更新了,里面的一些功能控件很旧,如果不是想要脱离office 的环境,达到独立的目的。
其实,用access开发,里面有很多功能和控件要超过VB的。

不去做永远没有结果!
2021-12-08 19:24
hmj0745
Rank: 2
等 级:论坛游民
帖 子:52
专家分:83
注 册:2021-11-6
得分:0 
回复 8楼 约定的童话
版主,想请教你一下。
我在后面的开发中很多地方要用到表格,因为有进销存的模块。
但我找了几天都找不到合适的表格控件。所有只好选择自带的MSHFlexGrid1
网上的一些好的表格控件,都是要付费的控件,我也不了解需要多少代价,所以心里也没有底。
你有没有什么好的建议?
目前一个是表格问题,还有一个是想在程序里加入像QQ,微信一样的截图功能方便操作。但都是一下子解决不了,暂时只有使用自带的表格。 和暂时使用上载图片再转存的方法。

不去做永远没有结果!
2021-12-08 20:02
约定的童话
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:47
帖 子:190
专家分:1061
注 册:2021-8-1
得分:0 
回复 15楼 hmj0745
VB表格控件灵活性不太友好,如果你有大批量数据操作,建议放在csv或者SQL数据库里面
2021-12-08 20:18
hmj0745
Rank: 2
等 级:论坛游民
帖 子:52
专家分:83
注 册:2021-11-6
得分:0 
回复 9楼 独木星空
谢谢,是的初学者一起讨论也是一个很开心的过程。
可惜现在学VB的人太少,大部分是做一个过渡吧。

不去做永远没有结果!
2021-12-08 20:55
hmj0745
Rank: 2
等 级:论坛游民
帖 子:52
专家分:83
注 册:2021-11-6
得分:0 
回复 16楼 约定的童话
的确是很不灵活,所以VB表格基本上只是有来展示数据。
但就是这样,这个表格还是不够用。不支持中间滚轮,用代码实现后也不顺。
滑动条用起来也不够丝滑。
但后面的功能模块上必须要用到表格也是没有办法的事。先做做看。

不去做永远没有结果!
2021-12-08 21:03
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:4 
网络,美化的话,我是自定义显示,使用 print 向 pic控件输出,自己画网格线,代码量最大。
如果求简单,不需要编辑,我就使用 listview 显示,可以整行选择,更适合使用习惯,自我感觉这个控件要快一些,当然代码要求更多一点。



授人于鱼,不如授人于渔
早已停用QQ了
2021-12-08 21:23
kings12333
Rank: 2
等 级:论坛游民
帖 子:112
专家分:59
注 册:2012-11-29
得分:0 
回复 19楼 风吹过b
版主,Listview控件能改变单行的字体大小吗?
2021-12-09 09:10



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-507778-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.403560 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved