需要的引用:

下面的代码涉及excel对access数据库的增删改查,可以按照需要查找使用

  1 '远程链接模块
2 Option Explicit
3 Dim con As New ADODB.Connection '创建连接对象
4 Dim rs As New ADODB.Recordset '声明记录集对象变量
5 Dim rsDS As New ADODB.Recordset '声明记录集对象变量
6 Dim rsPage As Integer '用于记录当前处于第几页
7 Dim mytable As String '当前表名称
8 Dim Opt() As Btns '定义类模块
9
10
11
12
13 Private Sub cmdBefore_Click()
14 If rsPage <> 1 Then
15 ListBox1.Clear
16 rsPage = rsPage - 1
17 Call AddRows(rsPage)
18 End If
19
20 End Sub
21
22 Private Sub cmdFirst_Click()
23 rsPage = 1
24 ListBox1.Clear
25 Call AddRows(rsPage)
26 End Sub
27
28 '添加数据
29 Private Sub CommandButton2_Click()
30 Dim i As Integer
31 Call ComboBox1_Change '刷新查询和显示
32
33 MsgBox ("请填写各项数据,除ID和add_time字段外均需要填写,填写完成后请点击保存按钮!")
34 CommandButton5.Visible = True
35 CommandButton2.Visible = False
36 End Sub
37
38
39 '修改记录
40 Private Sub CommandButton3_Click()
41 Dim sql As String
42 Dim i As Integer
43 Dim k As Integer
44 Dim savename As String
45
46 If MsgBox("本操作将更新编号为<" & Frame3.Controls.Item(1).Value _
47 & ">的记录,请确认详细数据中数值是否正确" & vbCrLf & "是否更新?", _
48 vbQuestion + vbYesNo, "更新记录") = vbNo Then Exit Sub
49 '如果待修改数据为空,退出修改
50 If Frame3.Controls.Item(1) = Empty Then
51 MsgBox ("请点击待修改数据!")
52 Exit Sub
53 End If
54 '确认修改权限
55 Dim rsuser As New ADODB.Recordset
56 sql = "SELECT " & mytable & ".user_name FROM " & mytable & " where ID=" & Frame3.Controls.Item(1)
57 rsuser.Open sql, con, adOpenKeyset, adLockOptimistic
58 If (rsuser.Fields(0).Value <> (Environ$("username") & "@" & Environ$("computername")) Or IsNull(rsuser.Fields(0).Value)) And Environ$("username") <> "xue-pc" Then
59 MsgBox ("该数据由" & rsuser.Fields(0).Value & "创建,请联系本人或管理员修改")
60 rsuser.Close
61 Exit Sub
62 End If
63 rsuser.Close
64
65 sql = ""
66 For i = 1 To Frame3.Controls.Count / 2 - 2
67 If i = Frame3.Controls.Count / 2 - 2 Then
68 sql = sql & Frame3.Controls.Item(2 * i).Caption & "='" & Frame3.Controls.Item(2 * i + 1) & "',user_name='" & Environ$("username") & "@" & Environ$("computername") & "'"
69 'bool类型进行区分赋值
70 ElseIf Frame3.Controls.Item(2 * i + 1).Name Like "mycheck*" Then
71 sql = sql & Frame3.Controls.Item(2 * i).Caption & "=" & Frame3.Controls.Item(2 * i + 1) & ","
72 ElseIf Frame3.Controls.Item(2 * i).Caption Like "image*" Then
73 '保存图片
74 sql = sql & Frame3.Controls.Item(2 * i).Caption & "='" & Frame3.Controls.Item(2 * i + 1) & "',"
75 savename = Frame3.Controls.Item(2 * i + 1).Value & "_" & Frame3.Controls.Item(9).Value & "_" & Frame3.Controls.Item(1).Value
76 k = saveimage(Frame3.Controls.Item(2 * i).Caption, savename)
77 Else
78 sql = sql & Frame3.Controls.Item(2 * i).Caption & "='" & Frame3.Controls.Item(2 * i + 1) & "',"
79 End If
80 Next i
81
82
83 sql = "update " & mytable & " set " & sql & " where ID=" & Frame3.Controls.Item(1).Value
84 'Debug.Print sql
85 con.Execute (sql)
86
87 MsgBox "已经成功将编号为<" & Frame3.Controls.Item(1).Value _
88 & ">的记录更新。", vbInformation, "更新记录"
89 '刷新查询和显示
90 Dim oldrspage As Integer '保存之前页面
91 oldrspage = rsPage
92 Call ComboBox1_Change '刷新查询和显示
93 ListBox1.Clear
94 Call AddRows(oldrspage) '显示当前页面
95 End Sub
96
97 '删除记录
98 Private Sub CommandButton4_Click()
99 On Error Resume Next
100 If Frame3.Controls.Item(1).Value = "" Then
101 MsgBox ("请在左侧列表中选择待删除数据")
102 Exit Sub
103 End If
104 Dim sql As String
105 '确定删除权限
106 Dim rsuser As New ADODB.Recordset
107 sql = "SELECT " & mytable & ".user_name FROM " & mytable & " where ID=" & Frame3.Controls.Item(1)
108 rsuser.Open sql, con, adOpenKeyset, adLockOptimistic
109 If (rsuser.Fields(0).Value <> (Environ$("username") & "@" & Environ$("computername")) Or IsNull(rsuser.Fields(0).Value)) And Environ$("username") <> "xue-pc" Then
110 MsgBox ("该数据由" & rsuser.Fields(0).Value & "创建,请联系本人或管理员删除")
111 rsuser.Close
112 Exit Sub
113 End If
114 rsuser.Close
115 sql = ""
116 If MsgBox("本操作将删除编号为<" & Frame3.Controls.Item(1).Value _
117 & ">的记录。" & vbCrLf & "是否要删除?", _
118 vbQuestion + vbYesNo, "删除记录") = vbNo Then Exit Sub
119 sql = "delete from " & mytable & " where ID=" & Frame3.Controls.Item(1).Value
120 Kill (DBIMGPATH & "*" & Frame3.Controls.Item(1) & ".bmp")
121
122 con.Execute (sql)
123 MsgBox "已经成功将编号为<" & Frame3.Controls.Item(1).Value _
124 & ">的记录删除。", vbInformation, "删除记录"
125 '刷新查询和显示
126 Dim oldrspage As Integer '保存之前页面
127 oldrspage = rsPage
128 Call ComboBox1_Change '刷新查询和显示
129 ListBox1.Clear
130 Call AddRows(oldrspage) '显示当前页面
131
132 End Sub
133 '保存记录
134 Private Sub CommandButton5_Click()
135 '判断是否输入数据
136
137 Dim i As Single
138 Dim imageflag As Integer '判断是否添加图片
139 Dim k As Integer
140 Dim savename As String
141 For i = 2 To rs.Fields.Count - 2
142 If Frame3.Controls.Item(2 * i - 1).Value = "" Then
143 MsgBox Frame3.Controls.Item(2 * i - 2).Caption & "数据为空,保存后可通过修改按钮进行编辑。", vbInformation
144 ElseIf Frame3.Controls.Item(2 * i - 2).Caption Like "image*" And Sheet5.Shapes.Count <> 0 Then
145 imageflag = MsgBox("确定添加sheet5中的图片到记录" & Frame3.Controls.Item(2 * i - 2).Caption & "中么?", vbYesNo + vbQuestion)
146 End If
147 Next i
148 If MsgBox("本操作将新增数据到数据库。" & vbCrLf & "是否添加?", vbQuestion + vbYesNo, "添加记录") = vbNo Then Exit Sub
149 '[开始添加数据
150
151 '其他数据添加
152 With rs
153 .AddNew
154 For i = 1 To rs.Fields.Count - 3
155 If .Fields(i).Name Like "Spectrum*" Then
156 .Fields(i) = fullspectrum(Frame3.Controls.Item(2 * i + 1).Value)
157 '图片数据添加
158 ElseIf .Fields(i).Name Like "image*" And imageflag = 6 Then
159 .Fields(i) = Frame3.Controls.Item(2 * i + 1).Value
160 '保存图片
161 savename = .Fields(i) & "_" & .Fields(4) & "_" & .Fields(0)
162 k = saveimage(.Fields(i).Name, savename)
163 Else
164 .Fields(i) = Frame3.Controls.Item(2 * i + 1).Value
165 End If
166
167 Next i
168 .Fields(rs.Fields.Count - 1) = Environ$("username") & "@" & Environ$("computername")
169 .Update
170 End With
171 MsgBox "添加数据成功。", vbInformation, "添加记录"
172
173
174 Call ComboBox1_Change '刷新查询和显示
175
176 Call AddRows(rs.PageCount) '显示当前页面
177 CommandButton5.Visible = False
178 CommandButton2.Visible = True
179
180
181 Exit Sub
182 Err_handle:
183 MsgBox Err.Description
184 End Sub
185
186
187 '导出所有数据
188 Private Sub CommandButton6_Click()
189 Sheet3.Cells.Clear
190 rs.MoveFirst
191 Dim i As Integer
192 For i = 0 To rs.Fields.Count - 2
193 Sheet3.Cells(1, i + 1) = rs.Fields(i).Name
194 Next i
195 Sheet3.Range("A2").CopyFromRecordset rs, , rs.Fields.Count - 1
196 Sheet3.Select
197
198 End Sub
199
200
201 Private Sub CommandButton7_Click()
202
203 End Sub
204
205
206
207 Private Sub Frame2_Click()
208
209 End Sub
210
211 Private Sub Frame3_Click()
212
213 End Sub
214
215 Private Sub Image1_Click()
216
217 End Sub
218
219 '将选择数据加载于文本框
220 Private Sub ListBox1_Click()
221 Dim i As Integer
222 Dim j As Integer
223 Dim clicknum As Integer '定义所点击的位置
224 clicknum = ListBox1.ListIndex
225 rsDS.MoveFirst
226 Dim imagenum As Integer
227 imagenum = 0
228 For i = 0 To rsDS.RecordCount - 1
229 If clicknum = i Then
230 For j = 0 To rsDS.Fields.Count - 2
231
232 DBconnection.Frame3.Controls.Item(2 * j + 1).Value = rsDS.Fields(j).Value
233 '修改image按钮caption
234 If rsDS.Fields(j).Name Like "image*" Then
235 Frame4.Controls.Item(imagenum).Caption = rsDS.Fields(j).Value & "_" & rsDS.Fields(4).Value & "_" & rsDS.Fields(0).Value
236 imagenum = imagenum + 1
237 End If
238
239
240 Next j
241 End If
242 rsDS.MoveNext
243
244 Next i
245
246 rsDS.MoveFirst
247
248
249
250
251 End Sub
252
253
254
255
256 Private Sub UserForm_Initialize()
257 '循环方式为组合框添加项目,提供显示条数的选择
258 Dim i As Integer '循环变量
259 For i = 1 To 20
260 cmbRecNum.AddItem i
261 Next
262 '链接数据库
263 con.Open "provider=microsoft.ace.oledb.12.0;data source=" & DBPATH & ";persist security info=false;jet oledb:database password='数据库密码'"
264 Set rs = con.OpenSchema(adSchemaTables)
265 ComboBox1.Clear
266 Do Until rs.EOF
267 If rs!table_type = "TABLE" And rs("table_name") <> "cal_need" Then '隐藏 cal_need 数据库
268 ComboBox1.AddItem (rs("table_name"))
269 End If
270 rs.MoveNext
271 Loop
272 rs.Close
273 '赋值初始数据
274 ComboBox1.ListIndex = 0
275 CommandButton5.Visible = False
276 CommandButton2.Visible = True
277
278 End Sub
279 '刷新DB输出的数据
280 Private Sub ComboBox1_Change()
281 '如果数据集开启则先关闭
282 CommandButton5.Visible = False '数据表变更后保存和新增按钮重置
283 CommandButton2.Visible = True '数据表变更后保存和新增按钮重置
284 If rs.State = 1 Then
285 rs.Close
286 End If
287 If rsDS.State = 1 Then
288 rsDS.Close
289 End If
290 Dim sql As String '定义SQL语句
291 Dim i As Integer '循环变量
292 Dim j As Integer '循环变量
293 Dim col As Integer '记录列数
294 mytable = ComboBox1.Value '赋值所选表数据
295 Dim myfield As ADODB.Field
296 Dim mytext As Control
297 sql = "select * from " & mytable & ";"
298 rs.Open sql, con, adOpenKeyset, adLockOptimistic
299 Dim rslist As New ADODB.Recordset '定义输入单元格list集合
300 Dim arr '定义list数组
301 Dim longtextnum As Integer '定义长文本个数,方便计算frame高度
302 Dim imagenum As Integer
303 imagenum = 0
304 longtextnum = 0
305 '添加表头数据
306 ListBox1.Clear
307 ListBox2.Clear
308 Frame3.Controls.Clear
309 Frame4.Controls.Clear
310 '当列数少时全部显示,大于mylistnum则显示mylistnum个列
311 mylistnum = 7 '默认列为7列
312 If rs.Fields.Count - 1 < mylistnum Then
313 mylistnum = rs.Fields.Count - 1 '
314 ListBox2.ColumnCount = rs.Fields.Count - 1
315 ListBox1.ColumnCount = rs.Fields.Count - 1
316 End If
317
318
319 With ListBox2
320 .Font.Name = "微软雅黑"
321 .AddItem
322 End With
323 For i = 0 To rs.Fields.Count - 2
324 If i < mylistnum + 1 Then
325 ListBox2.List(0, i) = rs.Fields(i).Name
326 End If
327
328 '增加详细数据的标签
329
330 Set mytext = DBconnection.Frame3.Controls.Add("Forms.Label.1", "mylabel" & i, True)
331 With mytext
332 .Caption = rs.Fields(i).Name
333 .Top = 10
334 .Left = 10
335 .Font.Name = "微软雅黑"
336 .Height = 30
337 If rs.Fields(i).Type = 203 Then
338 .Height = 100
339 longtextnum = longtextnum + 1
340 ElseIf rs.Fields(i).Type = 4 Or rs.Fields(i).Type = 11 Then '如果是数字格式,则给出提示,并使用蓝色字体
341 .ForeColor = RGB(0, 0, 255)
342 .Caption = rs.Fields(i).Name & Chr(13)
343 End If
344 If i > 0 Then
345 .Top = Frame3.Controls.Item(2 * i - 1).Top + Frame3.Controls.Item(2 * i - 1).Height + 10
346 End If
347
348 End With
349
350
351
352 Select Case mytable '根据不同的table确定不同的输入框格式
353 Case "spectrum_lc"
354 '如果是短文本格式,使用复选框
355 If rs.Fields(i).Type = 202 Then
356 Set mytext = DBconnection.Frame3.Controls.Add("Forms.combobox.1", "mytext" & i, True)
357 sql = "SELECT DISTINCT " & mytable & "." & rs.Fields(i).Name & " FROM " & mytable
358 rslist.Open sql, con, adOpenKeyset, adLockOptimistic '打开数据集
359 ReDim arr(0 To rslist.RecordCount - 1) '重新定义数组大小
360 '赋值给Arr列表值
361 For j = 0 To rslist.RecordCount - 1
362 arr(j) = rslist.Fields(0)
363 rslist.MoveNext
364 Next j
365 rslist.Close
366 With mytext
367 .List = arr '赋值数组
368 .Top = 10
369 .Left = 80
370 .Width = 250
371 .Height = 30
372 .Font.Name = "微软雅黑"
373 ' If rs.Fields(i).Type = 203 Then
374 ' .Height = 100
375 ' End If
376 If i > 0 Then
377 .Top = Frame3.Controls.Item(2 * i - 1).Top + Frame3.Controls.Item(2 * i - 1).Height + 10
378 End If
379 End With
380 Else
381 '如果是其他格式,添加文本框
382 Set mytext = DBconnection.Frame3.Controls.Add("Forms.textbox.1", "mytext" & i, True)
383 With mytext
384 .Top = 10
385 .Left = 80
386 .Width = 250
387 .MultiLine = True
388 .Height = 30
389 .Font.Name = "微软雅黑"
390 If rs.Fields(i).Type = 203 Then
391 .Height = 100
392
393 ElseIf rs.Fields(i).Type = 4 Then '如果是数字格式,则给出提示,并使用蓝色字体
394 .ForeColor = RGB(0, 0, 255)
395 .Value = "请输入数字格式,避免出错"
396 End If
397 If i > 0 Then
398
399 .Top = Frame3.Controls.Item(2 * i - 1).Top + Frame3.Controls.Item(2 * i - 1).Height + 10
400 End If
401 End With
402 End If
403
404
405
406
407 Case "spectrum_blu"
408 '如果是短文本格式,使用复选框
409 If rs.Fields(i).Type = 202 Then
410 Set mytext = DBconnection.Frame3.Controls.Add("Forms.combobox.1", "mytext" & i, True)
411 sql = "SELECT DISTINCT " & mytable & "." & rs.Fields(i).Name & " FROM " & mytable
412 rslist.Open sql, con, adOpenKeyset, adLockOptimistic '打开数据集
413 ReDim arr(0 To rslist.RecordCount - 1) '重新定义数组大小
414 '赋值给Arr列表值
415 For j = 0 To rslist.RecordCount - 1
416 arr(j) = rslist.Fields(0)
417 rslist.MoveNext
418 Next j
419 rslist.Close
420 With mytext
421 .List = arr '赋值数组
422 .Top = 10
423 .Left = 80
424 .Width = 250
425 .Height = 30
426 .Font.Name = "微软雅黑"
427 If rs.Fields(i).Type = 203 Then
428 .Height = 100
429 End If
430 If i > 0 Then
431 .Top = Frame3.Controls.Item(2 * i - 1).Top + Frame3.Controls.Item(2 * i - 1).Height + 10
432 End If
433 End With
434 Else
435 '如果是其他格式,添加文本框
436 Set mytext = DBconnection.Frame3.Controls.Add("Forms.textbox.1", "mytext" & i, True)
437 With mytext
438 .Top = 10
439 .Left = 80
440 .Width = 250
441 .MultiLine = True
442 .Height = 30
443 .Font.Name = "微软雅黑"
444 If rs.Fields(i).Type = 203 Then
445 .Height = 100
446 End If
447 If i > 0 Then
448
449 .Top = Frame3.Controls.Item(2 * i - 1).Top + Frame3.Controls.Item(2 * i - 1).Height + 10
450 End If
451 End With
452 End If
453
454
455 Case "spectrum_pr"
456 '如果是短文本格式,且在第二个字段之后,使用复选框
457 If rs.Fields(i).Type = 202 And i > 1 Then
458 Set mytext = DBconnection.Frame3.Controls.Add("Forms.combobox.1", "mytext" & i, True)
459 sql = "SELECT DISTINCT " & mytable & "." & rs.Fields(i).Name & " FROM " & mytable
460 rslist.Open sql, con, adOpenKeyset, adLockOptimistic '打开数据集
461 ReDim arr(0 To rslist.RecordCount - 1) '重新定义数组大小
462 '赋值给Arr列表值
463 For j = 0 To rslist.RecordCount - 1
464 arr(j) = rslist.Fields(0)
465 rslist.MoveNext
466 Next j
467 rslist.Close
468 With mytext
469 .List = arr '赋值数组
470 .Top = 10
471 .Left = 80
472 .Width = 250
473 .Height = 30
474 .Font.Name = "微软雅黑"
475 If rs.Fields(i).Type = 203 Then
476 .Height = 100
477 End If
478 If i > 0 Then
479 .Top = Frame3.Controls.Item(2 * i - 1).Top + Frame3.Controls.Item(2 * i - 1).Height + 10
480 End If
481 End With
482 Else
483 '如果是其他格式,添加文本框
484 Set mytext = DBconnection.Frame3.Controls.Add("Forms.textbox.1", "mytext" & i, True)
485 With mytext
486 .Top = 10
487 .Left = 80
488 .Width = 250
489 .Height = 30
490 .Font.Name = "微软雅黑"
491 If rs.Fields(i).Type = 203 Then
492 .Height = 100
493 .MultiLine = True
494 ElseIf rs.Fields(i).Type = 4 Then '如果是数字格式,则给出提示,并使用蓝色字体
495 .ForeColor = RGB(0, 0, 255)
496 .Value = "请输入数字格式,避免出错"
497 End If
498 If i > 0 Then
499
500 .Top = Frame3.Controls.Item(2 * i - 1).Top + Frame3.Controls.Item(2 * i - 1).Height + 10
501 End If
502 End With
503 End If
504
505
506 Case "db_lc"
507 '如果是短文本格式,且在第二个字段之后,使用复选框
508 If rs.Fields(i).Type = 202 And i > 1 Then
509 Set mytext = DBconnection.Frame3.Controls.Add("Forms.combobox.1", "mytext" & i, True)
510 sql = "SELECT DISTINCT " & mytable & "." & rs.Fields(i).Name & " FROM " & mytable
511 rslist.Open sql, con, adOpenKeyset, adLockOptimistic '打开数据集
512 ReDim arr(0 To rslist.RecordCount - 1) '重新定义数组大小
513 '赋值给Arr列表值
514 For j = 0 To rslist.RecordCount - 1
515 arr(j) = rslist.Fields(0)
516 rslist.MoveNext
517 Next j
518 rslist.Close
519 With mytext
520 .List = arr '赋值数组
521 .Top = 10
522 .Left = 80
523 .Width = 250
524 .Height = 30
525 .Font.Name = "微软雅黑"
526 If rs.Fields(i).Type = 203 Then
527 .Height = 100
528 End If
529 If i > 0 Then
530 .Top = Frame3.Controls.Item(2 * i - 1).Top + Frame3.Controls.Item(2 * i - 1).Height + 10
531 End If
532 End With
533 Else
534 '如果是其他格式,添加文本框
535 Set mytext = DBconnection.Frame3.Controls.Add("Forms.textbox.1", "mytext" & i, True)
536 With mytext
537 .Top = 10
538 .Left = 80
539 .Width = 250
540 .Height = 30
541 .Font.Name = "微软雅黑"
542 If rs.Fields(i).Type = 203 Then
543 .Height = 100
544 ElseIf rs.Fields(i).Type = 4 Then '如果是数字格式,则给出提示,并使用蓝色字体
545 .ForeColor = RGB(0, 0, 255)
546 .Value = "请输入数字格式,避免出错"
547 End If
548 If i > 0 Then
549
550 .Top = Frame3.Controls.Item(2 * i - 1).Top + Frame3.Controls.Item(2 * i - 1).Height + 10
551 End If
552 End With
553 End If
554
555
556 Case "spectrum_backup"
557 '如果是短文本格式,且在第二个字段之后,使用复选框
558 If rs.Fields(i).Type = 202 Then
559 Set mytext = DBconnection.Frame3.Controls.Add("Forms.combobox.1", "mytext" & i, True)
560 sql = "SELECT DISTINCT " & mytable & "." & rs.Fields(i).Name & " FROM " & mytable
561 rslist.Open sql, con, adOpenKeyset, adLockOptimistic '打开数据集
562 ReDim arr(0 To rslist.RecordCount - 1) '重新定义数组大小
563 '赋值给Arr列表值
564 For j = 0 To rslist.RecordCount - 1
565 arr(j) = rslist.Fields(0)
566 rslist.MoveNext
567 Next j
568 rslist.Close
569 With mytext
570 .List = arr '赋值数组
571 .Top = 10
572 .Left = 80
573 .Width = 250
574 .Height = 30
575 .Font.Name = "微软雅黑"
576 If rs.Fields(i).Type = 203 Then
577 .Height = 100
578 End If
579 If i > 0 Then
580 .Top = Frame3.Controls.Item(2 * i - 1).Top + Frame3.Controls.Item(2 * i - 1).Height + 10
581 End If
582 End With
583 Else
584 '如果是其他格式,添加文本框
585 Set mytext = DBconnection.Frame3.Controls.Add("Forms.textbox.1", "mytext" & i, True)
586 With mytext
587 .Top = 10
588 .Left = 80
589 .Width = 250
590 .MultiLine = True
591 .Height = 30
592 .Font.Name = "微软雅黑"
593 If rs.Fields(i).Type = 203 Then
594 .Height = 100
595 End If
596 If i > 0 Then
597
598 .Top = Frame3.Controls.Item(2 * i - 1).Top + Frame3.Controls.Item(2 * i - 1).Height + 10
599 End If
600 End With
601 End If
602
603
604 Case "db_pi"
605 '如果是短文本格式,且在第二个字段之后,使用复选框
606 If rs.Fields(i).Type = 202 And i > 1 Then
607 Set mytext = DBconnection.Frame3.Controls.Add("Forms.combobox.1", "mytext" & i, True)
608 sql = "SELECT DISTINCT " & mytable & "." & rs.Fields(i).Name & " FROM " & mytable
609 rslist.Open sql, con, adOpenKeyset, adLockOptimistic '打开数据集
610 ReDim arr(0 To rslist.RecordCount - 1) '重新定义数组大小
611 '赋值给Arr列表值
612 For j = 0 To rslist.RecordCount - 1
613 arr(j) = rslist.Fields(0)
614 rslist.MoveNext
615 Next j
616 rslist.Close
617 With mytext
618 .List = arr '赋值数组
619 .Top = 10
620 .Left = 80
621 .Width = 250
622 .Height = 30
623 .Font.Name = "微软雅黑"
624 If rs.Fields(i).Type = 203 Then
625 .Height = 100
626 End If
627 If i > 0 Then
628 .Top = Frame3.Controls.Item(2 * i - 1).Top + Frame3.Controls.Item(2 * i - 1).Height + 10
629 End If
630 End With
631 Else
632 '如果是其他格式,添加文本框
633 Set mytext = DBconnection.Frame3.Controls.Add("Forms.textbox.1", "mytext" & i, True)
634 With mytext
635 .Top = 10
636 .Left = 80
637 .Width = 250
638 .MultiLine = True
639 .Height = 30
640 .Font.Name = "微软雅黑"
641 If rs.Fields(i).Type = 203 Then
642 .Height = 100
643 ElseIf rs.Fields(i).Type = 4 Then '如果是数字格式,则给出提示,并使用蓝色字体
644 .ForeColor = RGB(0, 0, 255)
645 .Value = "请输入数字格式,避免出错"
646 End If
647 If i > 0 Then
648
649 .Top = Frame3.Controls.Item(2 * i - 1).Top + Frame3.Controls.Item(2 * i - 1).Height + 10
650 End If
651 End With
652 End If
653
654
655
656 'lcd_ps 图片文件需要特殊设置
657 Case "lcd_ps"
658 '如果是短文本格式,且在第二个字段之后,使用复选框
659 If rs.Fields(i).Type = 202 And i > 1 Then
660 Set mytext = DBconnection.Frame3.Controls.Add("Forms.combobox.1", "mytext" & i, True)
661 sql = "SELECT DISTINCT " & mytable & "." & rs.Fields(i).Name & " FROM " & mytable
662 rslist.Open sql, con, adOpenKeyset, adLockOptimistic '打开数据集
663 ReDim arr(0 To rslist.RecordCount - 1) '重新定义数组大小
664 '赋值给Arr列表值
665 For j = 0 To rslist.RecordCount - 1
666 arr(j) = rslist.Fields(0)
667 rslist.MoveNext
668 Next j
669 rslist.Close
670 With mytext
671 .List = arr '赋值数组
672 .Top = 10
673 .Left = 80
674 .Width = 250
675 .Height = 30
676 .Font.Name = "微软雅黑"
677 If i > 0 Then
678 .Top = Frame3.Controls.Item(2 * i - 1).Top + Frame3.Controls.Item(2 * i - 1).Height + 10
679 End If
680 End With
681 ' '如果是bool类型,则添加选项框
682 '
683 ElseIf rs.Fields(i).Type = 11 And i > 1 Then
684 Set mytext = DBconnection.Frame3.Controls.Add("Forms.CheckBox.1", "mycheck" & i, True)
685 With mytext
686 .Top = 10
687 .Left = 80
688 .Width = 250
689 .Height = 30
690 .Font.Name = "微软雅黑"
691 .Caption = "是否双段差"
692 If i > 0 Then
693 .Top = Frame3.Controls.Item(2 * i - 1).Top + Frame3.Controls.Item(2 * i - 1).Height + 10
694 End If
695 End With
696 '如果是图片类型,在frame4中增加按钮选项
697 ElseIf rs.Fields(i).Name Like "image*" Then
698 'frame3的正常增加操作操作
699 Set mytext = DBconnection.Frame3.Controls.Add("Forms.textbox.1", "mytext" & i, True)
700 With mytext
701 .Top = 10
702 .Left = 80
703 .Width = 250
704 .MultiLine = True
705 .Height = 30
706 .Font.Name = "微软雅黑"
707 If rs.Fields(i).Type = 4 Then '如果是数字格式,则给出提示,并使用蓝色字体
708 .ForeColor = RGB(0, 0, 255)
709 .Value = "请输入数字格式,避免出错"
710
711 End If
712 If i > 0 Then
713
714 .Top = Frame3.Controls.Item(2 * i - 1).Top + Frame3.Controls.Item(2 * i - 1).Height + 10
715 End If
716 End With
717
718 'frame4的增加按钮操作
719 Set mytext = DBconnection.Frame4.Controls.Add("Forms.CommandButton.1", "mybutton" & imagenum, True)
720 With mytext
721 .Top = imagenum * 29
722 .Left = 10
723 .Width = 80
724 .Font.Name = "微软雅黑"
725 .Caption = mytext.Name
726 End With
727 imagenum = imagenum + 1
728
729 '如果是其他格式,添加文本框
730 Else
731 Set mytext = DBconnection.Frame3.Controls.Add("Forms.textbox.1", "mytext" & i, True)
732 With mytext
733 .Top = 10
734 .Left = 80
735 .Width = 250
736 .MultiLine = True
737 .Height = 30
738 .Font.Name = "微软雅黑"
739 If rs.Fields(i).Type = 203 Then
740 .Height = 100
741 ElseIf rs.Fields(i).Type = 4 Then '如果是数字格式,则给出提示,并使用蓝色字体
742 .ForeColor = RGB(0, 0, 255)
743 .Value = "请输入数字格式,避免出错"
744
745 End If
746 If i > 0 Then
747
748 .Top = Frame3.Controls.Item(2 * i - 1).Top + Frame3.Controls.Item(2 * i - 1).Height + 10
749 End If
750 End With
751 End If
752 '
753 Case Else
754 '如果是短文本格式,且在第二个字段之后,使用复选框
755 If rs.Fields(i).Type = 202 And i > 1 Then
756 Set mytext = DBconnection.Frame3.Controls.Add("Forms.combobox.1", "mytext" & i, True)
757 sql = "SELECT DISTINCT " & mytable & "." & rs.Fields(i).Name & " FROM " & mytable
758 rslist.Open sql, con, adOpenKeyset, adLockOptimistic '打开数据集
759 ReDim arr(0 To rslist.RecordCount - 1) '重新定义数组大小
760 '赋值给Arr列表值
761 For j = 0 To rslist.RecordCount - 1
762 arr(j) = rslist.Fields(0)
763 rslist.MoveNext
764 Next j
765 rslist.Close
766 With mytext
767 .List = arr '赋值数组
768 .Top = 10
769 .Left = 80
770 .Width = 250
771 .Height = 30
772 .Font.Name = "微软雅黑"
773 If i > 0 Then
774 .Top = Frame3.Controls.Item(2 * i - 1).Top + Frame3.Controls.Item(2 * i - 1).Height + 10
775 End If
776 End With
777 '如果是bool类型,则添加选项框
778
779 ElseIf rs.Fields(i).Type = 11 And i > 1 Then
780 Set mytext = DBconnection.Frame3.Controls.Add("Forms.CheckBox.1", "mycheck" & i, True)
781 With mytext
782 .Top = 10
783 .Left = 80
784 .Width = 250
785 .Height = 30
786 .Font.Name = "微软雅黑"
787 .Caption = "是否双段差"
788 If i > 0 Then
789 .Top = Frame3.Controls.Item(2 * i - 1).Top + Frame3.Controls.Item(2 * i - 1).Height + 10
790 End If
791 End With
792 Else
793 '如果是其他格式,添加文本框
794 Set mytext = DBconnection.Frame3.Controls.Add("Forms.textbox.1", "mytext" & i, True)
795 With mytext
796 .Top = 10
797 .Left = 80
798 .Width = 250
799 .MultiLine = True
800 .Height = 30
801 .Font.Name = "微软雅黑"
802 If rs.Fields(i).Type = 203 Then
803 .Height = 100
804 ElseIf rs.Fields(i).Type = 4 Then '如果是数字格式,则给出提示,并使用蓝色字体
805 .ForeColor = RGB(0, 0, 255)
806 .Value = "请输入数字格式,避免出错"
807
808 End If
809 If i > 0 Then
810
811 .Top = Frame3.Controls.Item(2 * i - 1).Top + Frame3.Controls.Item(2 * i - 1).Height + 10
812 End If
813 End With
814 End If
815 End Select
816
817
818 Next i
819 Frame3.ScrollHeight = 40 * (i - longtextnum) + 110 * longtextnum
820
821 '类模块设置
822 Dim cmdbtn As Object
823 Dim X As Integer
824 X = 0
825 For Each cmdbtn In Frame4.Controls
826 If TypeName(cmdbtn) = "CommandButton" Then
827 ReDim Preserve Opt(X)
828 Set Opt(X) = New Btns
829 Set Opt(X).ButtonObj = cmdbtn
830 X = X + 1
831 End If
832 Next cmdbtn
833
834
835
836
837 '设置不可编辑文本框的格式:ID文本框和时间文本框
838 With Frame3.Controls
839
840 .Item(1).Locked = True
841 .Item(1).ForeColor = RGB(255, 0, 0)
842 .Item(1).Font.Bold = True
843
844 .Item(2 * (rs.Fields.Count - 1) - 1).Locked = True
845 .Item(2 * (rs.Fields.Count - 1) - 1).ForeColor = RGB(255, 0, 0)
846 .Item(2 * (rs.Fields.Count - 1) - 1).Font.Bold = True
847 End With
848
849 '设置一些默认值,方便初始化区域
850 cmbRecNum.Value = 20 '默认每页显示20条记录
851 rsPage = 1 '默认显示第1页记录
852 Call AddRows(rsPage) '调用页面显示
853 End Sub
854
855 '自定义子过程,用于随时在lstShow控件上显示当前页的数据
856 Public Sub AddRows(mypage As Integer) 'myPage就表示第几页
857
858 Dim i As Integer, j As Integer
859 '创建局部RecordSet对象rsDS,保存rs记录集中当前页的记录数据
860 Set rsDS = New ADODB.Recordset '声明记录集对象变量
861 For i = 0 To rs.Fields.Count - 1
862 rsDS.Fields.Append rs.Fields(i).Name, rs.Fields(i).Type, rs.Fields(i).DefinedSize 'append 追加的意思
863 Next i
864 rsDS.Open '打开局部RecordSet对象rsDS
865 rs.PageSize = Val(cmbRecNum.Value) 'PageSize,表示记录集的每页的记录条数 重置rs每页显示的记录条数
866 rs.AbsolutePage = mypage '重置rs的当前记录页
867 '将rs当前记录页的记录保存到rsDS中
868 For i = 1 To rs.PageSize
869 rsDS.AddNew '添加一行记录
870 For j = 0 To rs.Fields.Count - 1
871 If rs.Fields(j).ActualSize = 0 Then
872 rsDS.Fields(j).Value = Empty
873 Else
874 rsDS.Fields(j).Value = rs.Fields(j).Value
875 End If
876 Next j
877 rs.MoveNext
878 If rs.EOF Then Exit For
879 Next i
880 '显示当前记录页
881 rsDS.MoveFirst '定位rsDS中的第一条记录
882 With ListBox1
883 .Font.Name = "微软雅黑"
884
885 For i = 1 To rsDS.RecordCount
886 .AddItem
887 For j = 0 To mylistnum
888 If rsDS.Fields(j).Type = 203 Then
889 .List(i - 1, j) = "--"
890 Else
891 .List(i - 1, j) = rsDS.Fields(j).Value
892 End If
893 Next j
894
895 rsDS.MoveNext
896 Next i
897 End With
898 txtPage.Value = mypage & "/" & rs.PageCount
899 End Sub
900
901 Private Sub cmdLast_Click()
902 ListBox1.Clear
903 rsPage = rs.PageCount
904 Call AddRows(rsPage)
905 End Sub
906
907 Private Sub cmdNext_Click()
908 If rsPage <> rs.PageCount Then
909 ListBox1.Clear
910 rsPage = rsPage + 1
911 Call AddRows(rsPage)
912 End If
913 End Sub
914
915 Private Sub cmbRecNum_Change()
916 rsPage = 1
917 ListBox1.Clear
918 Call AddRows(rsPage)
919 End Sub
920
921
922 Private Sub UserForm_Terminate()
923 If rs.State = 1 Then
924 rs.Close
925 End If
926 If rsDS.State = 1 Then
927 rsDS.Close
928 End If
929 Set rs = Nothing
930 Set rsDS = Nothing
931 Set con = Nothing
932 'Sheet3.Cells.Clear
933 End
934
935 End Sub

交互表格如下:

excel使用VBA连接access的更多相关文章

  1. Excel中VBA 连接 数据库 方法- 摘自网络

    Sub GetData() Dim strConn As String, strSQL As String Dim conn As ADODB.Connection Dim ds As ADODB.R ...

  2. Excel中使用VBA访问Access数据库

    VBA访问Access数据库 1. 通用自动化语言VBA VBA(Visual Basic For Application)是一种通用自动化语言,它可以使Excel中的常用操作自动化,还可以创建自定义 ...

  3. Excel VBA 连接各种数据库(二) VBA连接Oracle数据库

    本文主要内容: Oracle环境配置 ODBC驱动设置.第三方驱动下载 VBA连接Oracle连接方法 Oracle10g官方免账号下载地址 系统环境: Windows 7 64bit Excel 2 ...

  4. Excel VBA 连接各种数据库(一) VBA连接MySQL数据库

    本文参考[东围居士]的cnblog博文  Excel.VBA与MySQL交互  在自己机器上调试成功,把调试中遇到的问题一并写出了. 本文主要涉及: VBA中的MySQL环境配置 VBA连接MySQL ...

  5. Excel VBA连接MySql 数据库获取数据

    编写Excel VBA工具,连接并操作Mysql 数据库. 系统环境: OS:Win7 64位 英文版 Office 2010 32位 英文版 1.VBA连接MySql前的准备 Tools---> ...

  6. Excel VBA 连接各种数据库(三) VBA连接SQL Server数据库

    本文主要涉及: VBA中的SQL Server环境配置 VBA连接SQL Server数据库 VBA读写SQL Server数据 如何安装SQL Client 系统环境: Windows 7 64bi ...

  7. Access之C#连接Access

    原文:Access之C#连接Access 如果是个人用的小程序的话.一般都推荐用Sqlite和Access 使用SQlite数据库需要安装SQLite驱动,详情:SQLite之C#连接SQLite 同 ...

  8. 64位sql server 如何使用链接服务器连接Access

    原文:64位sql server 如何使用链接服务器连接Access 测试环境 操作系统版本:Windows Server 2008 r2 64位 数据库版本:Sql Server 2005 64位 ...

  9. Excel、VBA与MySQL交互

    本文主要涉及: VBA中的MySQL环境配置 VBA连接MySQL数据库 VBA读写MySQL数据 在Excel中连接MySQL数据库及数据读写 系统环境: Windows 10 Excel 2013 ...

  10. 【.net 深呼吸】连接Access数据库应注意的几点

    本地数据库可以有Y种选择,比如Sqlite.SQL Server Express.SQL Local DB.SQL Server CE.Access等,本文老周选用比较著名的Access本地数据库,在 ...

随机推荐

  1. Linux编译安装Canal

    一.简介 下载源码:git clone https://github.com/alibaba/canal.git canal.adapter: 作用1:对接上游消息,包括kafka.rocketmq. ...

  2. Luogu P9180 [COCI2022-2023#5] Slastičarnica 题解 [ 蓝 ] [ 区间 dp ] [ dp 状态优化 ] [ 前缀和优化 ]

    Slastičarnica:非常好的区间 dp 题. 暴力 不难设计出暴力状态:\(dp_{q,i,j}\) 表示进行到第 \(q\) 次操作,剩下区间 \([i,j]\) 是否可行. 直到全部状态都 ...

  3. 正则表达式匹配邮箱,IP地址,URL

    参考链接: http://urlregex.com/ 1. 邮箱匹配正则表达式 C# ^(?(")(".+?(?<!\\)"@)|(([0-9a-z]((\.(?! ...

  4. ATT&CK实战系列(二)红日靶场2

    拓扑图 导入虚拟机 网络配置 增加网卡 配置网卡 三台主机的密码均为1qaz@WSX,其中WEB在登录的时候需要切换用户de1ay登录 iP地址 DC PC 配置PC和WEB主机时,会弹框输入admi ...

  5. 最优化方法之AdaGrad、RMSProp、Adam

    结论: 1.简单来讲,设置全局学习率之后,每次通过,全局学习率逐参数的除以历史梯度平方和的平方根,使得每个参数的学习率不同 2.效果是:在参数空间更为平缓的方向,会取得更大的进步(因为平缓,所以历史梯 ...

  6. bin格式转safetensors

    技术背景 本文主要介绍在Hugging Face上把bin格式的模型文件转为safetensors格式的模型文件,并下载到本地的方法. bin转safetensors 首先安装safetensors: ...

  7. QT5笔记:5. QtCreator 的快捷键

    常用的快捷键: F4 同名头文件和源文件之间切换 F2 声明和定义切换 Ctrl + / 注释 F10\F11 单步调试

  8. Forest v1.5.13 发布,声明式 HTTP 框架,已超 1.8k star

    Forest介绍 Forest 是一个开源的 Java HTTP 客户端框架,它能够将 HTTP 的所有请求信息(包括 URL.Header 以及 Body 等信息)绑定到您自定义的 Interfac ...

  9. 李沐动手学深度学习V2-chapter_linear-networks

    李沐动手学深度学习V2 文章内容说明 本文主要是自己学习过程中的随手笔记,需要自取 课程参考B站:https://space.bilibili.com/1567748478?spm_id_from=3 ...

  10. phpinclude-labs做题记录

    Level 1 file协议 payload:?wrappers=/flag Level 2 data协议 去包含data协议中的内容其实相当于进行了一次远程包含,所以data协议的利用条件需要 ph ...