2024年9月13日发(作者:)
ACCESS-VBA编程(1)
program 2007-07-20 10:28:30 阅读49 评论0 字号:大中小 订
阅
在VB中对窗体控件的引用
键入包含控件的窗体或报表的标识符,后面紧接 ! 运算符和控件的
名称。例如,下列标识符将引用“订单”窗体上“订单ID”控件值:
Forms![订单]![订单ID]
引用子窗体或子报表上的控件,不必使用“窗体”或“报表”属
性为窗体或报表指定完整的标识符。例如,可以使用下列标识符来引
用“订单”子窗体上的“数量”控件:
Forms![订单]![订单子窗体]![数量]
判断窗体或报表中控件的数目,然后将该数目赋给一个变量。
Dim intFormControls As Integer
Dim intReportControls As Integer
intFormControls = Forms!
intReportControls = Reports!
设置控件可见性
Dim i, ii As Integer
For ii = 3 To 10
(ii).Visible = True
Next
For i = 11 To 22
(i).Visible = False
Next
按特殊名在VBA中设置控件的可见性:
For i = 27 To 47
If (i).Name Like "A*" Then
(i).Visible = False
End If
Next
指定一个控件能否接受焦点
Enabled属性:
me.控件.Enabled = true'能
=false'不能
指定一个控件能否被编辑:
locked
如:
me.控件.Locked = true
me.控件.Locked = false
设置控件标题显示的文字
Me.控件.Caption = "显示窗体"
设置标签颜色:
olor =200
获得焦点及失去焦点时字段变更颜色。
如果你的控件是文本框,名称为“txt字段”,写如下代码:
Private Sub txt字段_GotFocus()
字段.BackColor = 12632256
End Sub
当中“12632256”是灰色,你可以自己选择希望的颜色,如果想
在失去焦点时改为原来的颜色,写如下代码:
Private Sub txt字段_LostFocus()
字段.BackColor = 16777215
End Sub
使标签闪烁以引人注意
设置窗体的TimerInterval 值为1000 (1秒).
forms OnTimer 加入代码:
Sub Form_Timer()
e = Not e
End_Sub
设置标签字体颜色:
lor =
设置文本框颜色:
lor = 300
设置文本框字体颜色:
ntColor = 500
标签等左边距离:
= 2200
定位控件
Me.控件.Top = 8290
Me. 控件.Left = 100
标签等字体粗细:
ight = 20000
控件边框颜色:
Color = 0
控件边框线条
BorderStyle 属性使用以下设置:
透明 0 (仅对于标签、图表和子报表而言是默认值)透明的
实线 1 (默认值)实线
虚线 2 虚线
短虚线 3 短虚线
点线 4 点线
稀疏点线 5 点距较宽的点线
点划线 6 虚线与点线组合的点划线
点点划线 7 虚线-点线-点线组合的点点划线
双实线 8 双实线
指定控件的边框宽度
使用 BorderWidth 属性可以指定控件的边框宽度
取值:0或1-6
指定控件是否透明
使BackStyle 属性可以指定控件是否透明。
True 、False
解除子窗体锁定
Me.进_子窗体.Locked = False '解除子窗体锁定
将窗体上所有控件的输入法关掉!
来源:不祥
Private Sub Form_Open(Cancel As Integer)
Dim ctl As l
For Each ctl In ls
& lType
If lType = acTextBox Then
e = 2
End If
Next
End Sub
上述代码控制文本框,你还可以控制其他的,只要copy进窗体就
可以了
列表框的值的引用
如果是单选的列表框,用 me.[列表框名] 来引用;如果要引用不
是结合型列的值,可以用 me.[列表框名].column(n) (第一列n=0,
第二列n=1…)
引用多列组合框或列表框中特定的列或列与行的组合
用 0 引用第一列,用 1 引用第二列,依此类推。用 0 引用第一行,
用 1 引用第二行,依此类推。例如在含有一列客户 ID
和一列客户名称的列表框中,可以使用如下方式引用第二列、第
五行的客户名称:
Forms!Contacts!(1, 4)
可以使用 Column 属性将组合框或列表框的内容指定给另一控件,
如文本框。例如,若要将文本框的 ControlSource
属性设为列表框第二列中的值,可以使用以下表达式:
=Forms!Customers!(1)
如果引用了组合框或列表框中的列,但用户未做选择,则
Column 属性设置将为 Null。可以使用 IsNull 函数来确定是否进行了
选择,示例如下:
If IsNull(Forms!Customers!Country)
Then MsgBox "No selection."
End If
显示获得焦点的控件的 Name:
ctl As Control
Set ctl = Control
MsgBox
窗体:
指定当窗体上的命令按钮保持按下状态时,是否重复执行事件过
程或宏
使用 AutoRepeat 属性可以指定当窗体上的命令按钮保持按下状
态时,是否重复执行事件过程或宏
True 、False
'允许添加
dditions= True
'记录不锁定
Locks = 1
是否自动居中
AutoCenter= True,False
是否自动调整
AutoResize = True,False
窗体边框样式
Style=1 中译:无
其它
1 无
2 细边框
3 可调边框
4 对话框边框
设置窗体、页眉、页脚颜色:
n(0).BackColor = 200
n(1).BackColor = 200
n(2).BackColor = 200
窗体标题
n="中国ACCESS软件网" 中译:窗体标题为"中国
ACCESS软件网"(不含引号)
关闭按钮
utton =True 中译 允许关闭按钮
其它:true:允许 False:不允许
控制框
lBox =True 允许
其它:true:允许 False:不允许
默认视图
tView =0 为单一窗口
其它:0:单一窗口1:连续窗体2:数据表
允许分隔线
ngLines =True 中译 允许分隔线
其它:true:允许 False:不允许
允许打印版式
英文:ForPrint =True 中译 允许打印版式
其它:true:允许 False:不允许
无最大最小化按钮
英文:Buttons =0 中译 无最大最小化按钮
其它:0:无 1:最大化 2:最小化 3:两者都有
允许浏览按钮
英文:tionButtons =True 中译 允许浏览按钮
其它:true:允许 False:不允许
滚动条
Bars =0二者均无
其它:0:二者均无 1:只垂直 2:只水平3:二者都有
允许/不允许添加
dditions=True/False
允许/不允许删除
eletions=True/False
允许/不允许编辑
dits=True/False
指定是否允许打开绑定窗体进行数据输入
使用 DataEntry 属性可以指定是否允许打开绑定窗体进行数据输
入。DataEntry 属性不决定是否可以添加记录,只决定是否显示已有
的记录。Boolean
型,可读/写。
True 、False
允许/不允许筛选
ilters=True/False
Filter="筛选内容"筛选
应用与/否筛选
FilterOn=True/False
将 MyForm 窗体的 BackColor 属性,改成 ColorCode 参数指定
的色彩。
使用 QBColor 函数将 MyForm 窗体的 BackColor 属性,改成
ColorCode 参数指定的色彩。QBColor 可接受 0 到 15
的整型值。
Sub ChangeBackColor (ColorCode As Integer, MyForm As
Form) lor = QBColor(ColorCode)End Sub窗体
真正居中显示
如下代码可以做到真正居中显示
Private Sub Form_Load()
False
Dim x, y As Integer
ze
x = Width
y = Height
e
True
Move (x - Width) / 2, (y - Height) / 2
End Sub
隐藏窗体[学生名册]数据表视图中的性别字段
Table!学生名册!性别.ColumnHidden = -1
显示获得焦点窗体的 Name 属性设置:
使用 ActiveForm 属性(和 Screen 对象一起)可以标识或引用获
得焦点的窗体。
Dim dqhdct As Form
Set dqhdct = Form
MsgBox
判断窗体是否打开的方法
Function
acForm)
IsLoaded(strName As String, Optional
intObjectType As Integer =
IsLoaded
End Function
= (SysCmd(acSysCmdGetObjectState,
intObjectType, strName) <> 0)
使用 IsLoaded 属性可以确定当前是否加载了 AccessObject。
Boolean 型,只读。
以下是一个示例:
If ms("frmMain").IsLoaded = True Then
Forms!e = False
End If
窗体中组合框不在列表中示例
不在列表中事件代码:
Private Sub 名称_NotInList(NewData As String, Response As
Integer)
Response = acDataErrContinue
If MsgBox("您输入的名称不在列表中,在列表中添加新记录吗?
", 68, "银河酒业") = 6 Then
Me![名称] = Null
ntrol "单价"
rm "酒名列表", , , , acAdd, acNormal
Else
Me![名称] = Null
Me![名称].Dropdown
End If
End Sub
获得焦点事件代码:
Private Sub 名称_GotFocus()
Me![名称].Requery
End Sub
如何让窗体总在最前面?
*API函数声明
Declare Function SetWindowPos Lib "user32" ( ByVal hwnd
As Long, ByVal
hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long,
ByVal cx As Long,
ByVal cy As Long, ByVal wFlags As Long) As Long
注释:常量声明
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOMOVE = &H2
Private Const HWND_TOPMOST = -1
Private Const HWND_NOTOPMOST = -2
注释: 在某个form里写:
SetWindowPos
SWP_NOMOVE 注释:或下面
SetWindowPos
SWP_NOSIZE
ype = xlBarClustered
移动无边框窗体例子
模块:
Declare Function SendMessage Lib "user32" Alias
"SendMessageA" (ByVal hwnd As
Long, ByVal wMsg As Long, ByVal wParam As Long, lParam
As Any) As Long
Declare Function ReleaseCapture Lib "user32" () As Long
Public Const WM_NCLBUTTONDOWN = &HA1
Public Const HTCAPTION = 2
,WND_TOPMOST,0,0,0,0,
,WND_TOPMOST,0,0,0,0,
应用:
Private Sub Form_Close()
mand acCmdAppMaximize
End Sub
Private Sub Form_Load()
mand acCmdAppMinimize
End Sub
Private Sub XPForm_MouseDown(Button As Integer, Shift As
Integer, X As Single, Y
As Single)
If Button = 1 Then
ReleaseCapture
SendMessage
HTCAPTION, 0&
End If
End Sub
Private Sub 命令20_Click()
End Sub
日期、时间函数
如何将文本型:2003.08.04 转换为日期型:2003-08-04
cdate(replace("2003.08.04",".","-"))
显示当前日期在该年中所处的星期号
=Format(Now(), "ww")
ww 为 1 到 53。
显示日期字段值的四位年份值。
, WM_NCLBUTTONDOWN,
=DatePart("yyyy", [订购日期])
显示日期字段值前 10 天的日期值。
=DateAdd("y", -10, [应付日期])
显示日期字段值前一个月的日期值。
=DateAdd("m",-1,Date())
显示日期1和日期2之间相差的天数。
=DateDiff("d", [订购日期], [发货日期])
从今天算起到三个月后的日期之间的记录。
Betweeb date() and adddate(3,date())
根据出生日期计算年龄(周岁)
=IIf(Month(Date())-Month([出生年月日])>-1,Year(Date())-
Year([出生年月日]),Year(Date())-Year([出生年月日])-1)
自定义日期/时间格式 (Format 函数)
(:) 时间分隔符。在一些区域,可能用其他符号来当时间分隔符。
格式化时间值时,时间分隔符可以分隔时、分、秒。时间分隔符的真
正字符在格式输出时取决于系统的设置。
(/) 日期分隔符。在一些区域,可能用其他符号来当日期分隔符。
格式化日期数值时,日期分隔符可以分隔年、月、日。日期分隔符的
真正字符在格式输出时取决于系统设置。
C 以 ddddd 来显示日期并且以 ttttt 来显示时间。如果想显示的
数值无小数部分,则只显示日期部分,如果想显示的数值无整数部分,
则只显示时间部分。
D
以没有前导零的数字来显示日 (1 – 31)。
Dd
以有前导零的数字来显示日 (01 – 31)。
ddd
以简写来表示日 (Sun –Sat)。
dddd
以全称来表示日 (Sunday –Saturday)。
ddddd
以完整日期表示法显示(包括年、月、日),日期的显示要依系
统的短日期格式设置而定。缺省的短日期格式为 m/d/yy。
dddddd
以完整日期表示法显示日期系列数(包括年、月、日),日期的
显示要依系统识别的长日期格式而定。缺省的长日期格式为 mmmm
dd, yyyy。
aaaa
与dddd 一样,它只是该字符串的本地化版本。
W
将一周中的日期以数值表示(1 表星期日~ 7表星期六)。
ww
将一年中的星期以数值表示 (1 – 54)。
M
以没有前导零的数字来显示月 (1 – 12)。如果 m 是直接跟在 h 或
hh 之后,那么显示的将是分而不是月。
mm
以有前导零的数字来显示月 (01 – 12)。如果m是直接跟在h或
hh之后,那么显示的将是分而不是月。
mmm
以简写来表示月 (Jan –Dec)。
mmmm
以全称来表示月 (January –December)。
oooo
与mmmm一样,它只是该字符串的本地化版本。
Q
将一年中的季以数值表示 (1 – 4)。
Y
将一年中的日以数值表示 (1 – 366)。
Yy
以两位数来表示年 (00 – 99)。
yyyy
以四位数来表示年 (00 – 99)。
H
以没有前导零的数字来显示小时 (0 – 23)。
Hh
以有前导零的数字来显示小时 (00– 23)。
N
以没有前导零的数字来显示分 (0 – 59)。
Nn
以有前导零的数字来显示分 (00 – 59)。
S
以没有前导零的数字来显示秒 (0 – 59)。
Ss
以有前导零的数字来显示秒 (00 – 59)。
t t t t t
以完整时间表示法显示(包括时、分、秒),用系统识别的时间
格式定义的时间分隔符进行格式化。如果选择有前导零并且时间是在
10:00 A.M. 或
P.M.之前,那么将显示有前导零的时间。缺省的时间格式为
h:mm:ss。
AM/PM
在中午前以 12 小时配合大写 AM 符号来使用;在中午和 11:59
P.M.间以 12 小时配合大写 PM 来使用。
Am/pm
在中午前以 12 小时配合小写 am 符号来使用;在中午和 11:59
P.M.间以 12 小时配合小写 pm 来使用。
A/P
在中午前以 12 小时配合大写A符号来使用;在中午和 11:59 P.M.
间以12 小时配合大写P来使用。
a/p
在中午前以 12 小时配合小写a符号来使用;在中午和 11:59 P.M.
间以 12 小时配合小写p来使用。
AMPM
在中午前以 12 小时配合系统设置的 AM字符串文字来使用;在中
午和 11:59 P.M. 间以 12 小时配合系统设置的 PM 字符串文字来使用。
AMPM
可以是大写或小写,但必须和您的系统设置相配。其缺省格式为
AM/PM。
日期函数示例
当天日期:=Date()
当日:=Day(date)
当月:=Month(date())
当年:=Year(date())
当季:=DatePart("q",Date())
把日期大写
Function Date2Chinese(iDate)
Dim num(10)
Dim iYear
Dim iMonth
Dim iDay
num(0) = "〇"
num(1) = "一"
num(2) = "二"
num(3) = "三"
num(4) = "四"
num(5) = "五"
num(6) = "六"
num(7) = "七"
num(8) = "八"
num(9) = "九"
iYear = Year(iDate)
iMonth = Month(iDate)
iDay = Day(iDate)
Date2Chinese = num(iYear 1000) + _
num((iYear 100) Mod 10) + num((iYear _
10) Mod 10) + num(iYear Mod _
10) + "年"
If iMonth >= 10 Then
If iMonth = 10 Then
Date2Chinese = Date2Chinese + _
"十" + "月"
Else
Date2Chinese = Date2Chinese + _
"十" + num(iMonth Mod 10) + "月"
End If
Else
Date2Chinese = Date2Chinese + _
num(iMonth Mod 10) + "月"
End If
If iDay >= 10 Then
If iDay = 10 Then
Date2Chinese = Date2Chinese + _
"十" + "日"
ElseIf iDay = 20 Or iDay = 30 Then
Date2Chinese = Date2Chinese + _
num(iDay 10) + "十" + "日"
ElseIf iDay > 20 Then
Date2Chinese = Date2Chinese + _
num(iDay 10) + "十" + _
num(iDay Mod 10) + "日"
Else
Date2Chinese = Date2Chinese + _
"十" + num(iDay Mod 10) + "日"
End If
Else
Date2Chinese = Date2Chinese + _
num(iDay Mod 10) + "日"
End If
End Function
算出每个月的天数
一法:
Dim a, b, c
a = Year(Now())
b = Month(Now())
c = Format((a & "/" & b + 1 & "/1"), "######") - Format((a
& "/" & b & "/1"),
"######")
二法:
DateDiff("d",
"yyyy-mm-01"))
DateDiff可以算出两个日期之间相差几天!
三法:
Day(DateAdd("d", -1, Format(Date, "yyyy-mm-01")))
day函数可以知道某个日期是这个月的第几天,我们把这个月的
Format(Date, "yyyy-mm-01"),
Format(DateAdd("m", -1, Date),
最后一天拿出来DAY一下!
应该还有更好的方法!
比如说可以定义一个数组,把每个月的日子放进去,或者说写一
个函数算每一个月的天数
只要考虑一下闺年的问题就可以了!
如何得到某年每个月的第一天是星期几
Private Sub Command1_Click()
Dim i As Integer, A As Integer, B As Integer, C As String
A = InputBox("请输入年份", "某年每个月的第一天是星期几")
For i = 1 To 12
C = A & "-" & i & "-1"
B = Weekday(C)
Select Case B
Case vbSunday
Print A & "年" & i & "月1日是星期日"
Case vbMonday
Print A & "年" & i & "月1日是星期一"
Case vbTuesday
Print A & "年" & i & "月1日是星期二"
Case vbWednesday
Print A & "年" & i & "月1日是星期三"
Case vbThursday
Print A & "年" & i & "月1日是星期四"
Case vbFriday
Print A & "年" & i & "月1日是星期五"
Case vbSaturday
Print A & "年" & i & "月1日是星期六"
End Select
Next i
End Sub
计算天数及月初月末日期
Function 本月天数(日期 As Date) As Byte
本月天数 = DateSerial(Year(日期), Month(日期) + 1, Day(日期))
- 日期
End Function
Function 月末(日期 As Date) As Date
月末 = DateSerial(Year(日期), Month(日期) + 1, 1) - 1
End Function
Function 月初(日期 As Date) As Date
月初 = 日期 - Day(日期) + 1
End Function
本月最后一日是周几
SELECT
Weekday(DateAdd("m",1,DateSerial(Year(Date()),Month(Dat
e()),1)-1)) AS
本月最后一日是周几,
下月最后一日是周几
SELECT
Weekday(DateAdd("m",2,DateSerial(Year(Date()),Month(Dat
e()),1)-1)) AS 下月最后一日是周几,
本月最后一个周5到月底的天数
SELECT
(Weekday(DateAdd("m",1,DateSerial(Year(Date()),Month(Dat
e()),1)-1))+1) Mod 7 AS
本月最后一个周5到月底的天数;
下月最后一个周5到月底的天数
SELECT
(Weekday(DateAdd("m",2,DateSerial(Year(Date()),Month(Dat
e()),1)-1))+1) Mod 7 AS
下月最后一个周5到月底的天数;
本月最后一个周5的日期
SELECT
DateAdd("m",1,DateSerial(Year(Date()),Month(Date()),1))-1-
(Weekday(DateAdd("m",1,DateSerial(Year(Date()),Month(Date()),
1)-1))+1)
Mod 7 AS 本月最后一个周5的日期;
下月最后一个周5的日期
SELECT
DateAdd("m",2,DateSerial(Year(Date()),Month(Date()),1))-1-
(Weekday(DateAdd("m",2,DateSerial(Year(Date()),Month(Date()),
1)-1))+1)
Mod 7 AS 下月最后一个周5的日期;
数据输入、查询、计算、连接:
通过英特网的ACCESS联接
在ACCESS中使用ADO:
Private Sub ABC_Click()
Dim cn As New tion
Dim rs As New set
"DSN=alwin;UID=;PWD=;"
"Select * from tbTABLE", cn, adOpenDynamic,
adLockReadOnly’
& "", adPersistADTG
MsgBox ("OPERATION OK")
End Sub
Private Sub OPEN_Click()
Dim strConnect As String
strConnect = "Provider=MSPersist"
Dim rs As New set
"远程服务器的
strConnect
Do While Not
rs("USERID").value
xt
Loop
End Sub
将用户输入的身份证号15位数据转化为18位。
Function IDCode15to18(sCode15 As String) As String
'* 功能:将15的身份证号升为18位(根据GB 11643-1999)
'* 参数:原来的号码
'* 返回:升位后的18位号码
Dim i As Integer
Dim num As Integer
Dim code As String
num = 0
IDCode15to18 = Left(sCode15, 6) + "19" + Right(sCode15, 9)
' 计算校验位
For i = 18 To 2 Step -1
IP/test/",
num = num + (2 ^ (i - 1) Mod 11) * (Mid(IDCode15to18, 19
- i, 1))
Next i
num = num Mod 11
Select Case num
Case 0
code = "1"
Case 1
code = "0"
Case 2
code = "X"
Case Else
code = Trim(Str(12 - num))
End Select
IDCode15to18 = IDCode15to18 + code
End Function
据身份证号自动输入出生日期
Dim Length As Integer
Length = Len(Me.[身份证号])
If Not IsNull(Length) Then
If Length = 15 Then
Me.[性别] = IIf(Val(Mid(Me.身份证号, 15, 1)) / 2 =
Int(Val(Mid(Me.身份证号, 15, 1)) /
2), "女", "男")
Me.[出生日期] = "19" & Mid([身份证号], 7, 2) & "-" & Mid([身
份证号], 9, 2) & "-" &
Mid([身份证号], 11, 2)
ElseIf Length = 18 Then
Me.[性别] = IIf(Val(Mid(Me.身份证号, 17, 1)) / 2 =
Int(Val(Mid(Me.身份证号, 17, 1))
/ 2), "女", "男")
Me.[出生日期] = Mid([身份证号], 7, 4) & "-" & Mid([身份证号],
11, 2) & "-" &
Mid([身份证号], 13, 2)
Else
MsgBox "身份证号错误!"
End If
End If
两行代码打开另一数据库
Private Sub 命令4_Click()
On Error GoTo Err_命令4_Click
Dim strDb As String
strDb = "C:"
SendKeys "{F11}%FO" & strDb & "{enter}"
Exit_命令4_Click:
Exit Sub
Err_命令4_Click:
MsgBox ption
Resume Exit_命令4_Click
End Sub
实现打开外部数据库中的报表。
Private Declare Function apiSetForegroundWindow Lib
"user32" _
Alias "SetForegroundWindow" _
(ByVal hwnd As Long) _
As Long
Private Declare Function apiShowWindow Lib "user32" _
Alias "ShowWindow" _
(ByVal hwnd As Long, _
ByVal nCmdShow As Long) _
As Long
Private Const SW_MAXIMIZE = 3
Private Const SW_NORMAL = 1
Function fOpenRemoteReport(strMDB As String, strReport
As String, _
Optional intView As Variant) _
As Boolean
' strMDB: 外部数据库名称(含路径)
' strReport: 报表名称
' intView: 报表的打开方式
Dim objAccess As ation
Dim lngRet As Long
On Error GoTo fOpenRemoteReport_Err
If IsMissing(intView) Then intView = acViewPreview
If Len(Dir(strMDB)) > 0 Then
Set objAccess = New ation
With objAccess
lngRet = apiSetForegroundWindow(.hWndAccessApp)
lngRet = apiShowWindow(.hWndAccessApp, SW_NORMAL)
' 第一次调用ShowWindow似乎不做任何事情
lngRet = apiShowWindow(.hWndAccessApp, SW_NORMAL)
.OpenCurrentDatabase strMDB
.port strReport, intView
Do While Len(.) > 0
DoEvents
Loop
End With
End If
fOpenRemoteReport_Exit:
On Error Resume Next
Set objAccess = Nothing
Exit Function
fOpenRemoteReport_Err:
fOpenRemoteReport = False
Select Case
Case 7866:
' mdb 已经被用独占方式打开
MsgBox "该数据库:" & strMDB & _
vbCrLf & "已经被用独占方式打开!" & vbCrLf _
& vbCrLf & "请重新用共享方式打开,再试一次!", _
vbExclamation + vbOKOnly, "不能打开数据库"
Case 2103:
' 报表不存在
MsgBox "在这个" & strMDB & "数据库中不存在该报表:" &
strReport & _
vbCrLf & vbCrLf , _
vbExclamation + vbOKOnly, "报表不存在"
Case 7952:
' 用户关闭了这个 mdb
fOpenRemoteReport = True
Case Else:
MsgBox "错误#: " & & vbCrLf & ption, _
vbCritical + vbOKOnly, "运行时错误"
End Select
Resume fOpenRemoteReport_Exit
End Function
为列表框定数据源
Dim str3 As String
str3 = "SELECT jhd_mx__leibie AS 类别,
jhd_mx__migceg AS 名称,
jhd_mx__xighao AS 型号, jhd_mx__danwei
AS 单位,
jhd_mx__danjia AS 单价 FROM jhd_mx_jiage " & "
where
jhd_mx__leibie='" & Listjhlb & "'"
rce = str3
y
为组合框、子窗体设置数据源
下面的示例将组合框的 RowSourceType 属性设为
“Table/Query”,然后将 RowSource 属性设为“雇员列表”查询。
Forms!Employees!rceType =
"Table/Query"
Forms!Employees!rce = "EmployeeList"
一:
Dim str1 As String
str1 = "SELECT _daihao,
_mima,_ziwu,_xigmig
ziyuag " & " where
zy_daihao='" & Text8dldh & "'and zy_mima='" &
Text10dlmm & "'"
Source = str1
y
二:
子窗体.sourse="SELECT _daihao,
_mima,_ziwu,_xigmig
ziyuag " & " where
zy_daihao='" & Text8dldh & "'and zy_mima='" &
Text10dlmm & "'"
三:
Private Sub Command38_Click()
Dim sjy As String
Dim pd As Integer
pd = True
sjy = "SELECT 病历明细表.* FROM 病历明细表"
If Not IsNull(Text0) Then
If pd Then
sjy = sjy & " where 姓名 like '" & Text0 & "'"
pd = False
Else
FROM
FROM
sjy = sjy & " and 姓名 like '" & Text0 & "'"
End If
End If
If Not IsNull(Text1) And Not IsNull(Text2) Then
sjy = sjy & " where 时间 between #" & Text1 & "# and #" &
Text2 & "#"
pd = False
Else
str2 = str2 & " and 时间 between #" & Text1 & "# and #" &
Text2 & "#"
End If
If Not IsNull(Text3) Then
If pd Then
sjy = sjy & " where 姓名 like '" & Text3 & "'"
pd = False
Else
sjy = sjy & " and 姓名 like '" & Text3 & "'"
End If
End If
Me.子窗体.RowSource = sjy
y
End Sub
为主窗体、报表设数据源
使用 RecordSource 属性可以指定窗体或报表的数据源。String
型,可读写。
一:
Dim sjy As String
sjy = "SELECT 名单.* FROM 名单" & " where 姓名 like '*" &
List101 & "*'"
Source = sjy
Requery
二:
Source = "名单"
用其他ACCESS的表作为本ACCESS 窗体的数据源
来源:ACCESS中国 Trynew
在Sql语句中的表名前加上数据库名就行了,下面语句动态引用当
前目录的另一MDB文件的表做数据源:
Private Sub Form_Load()
Source = "SELECT 表
& "" &
"].表1;"
End Sub
用VBA编程把Excel表中数据追加到Access表中
Private Sub Command0_Click()
erSpreadsheet
acSpreadsheetTypeExcel9, "temp",
"c:", yes
End Sub
VB语句删除记录:
For I = 1 To 20
SQL = "DELETE 订单明细ID FROM 订单明细 WHERE 订单明细
ID=" & I
SQL
acImport,
1.* FROM [" &
Next
或:
e "DELETE * FROM要删除记
录的表"
插入/删除一条记录
新建:mand acCmdRecordsGoToNew
删除:mand acCmdDeleteRecord
清空表记录的方法
1、CurrentDb().Execute "delete * from 表名"
2、 "SQL语句"
3,RunSQL "Delete * From 表名"
用代码实现对数据修改或增加的取消
在窗体中修改数据时,关闭窗体,数据已经修改,这样很容易产
生错误数据.
可采用如下方法解决:
在窗体更新前判断:
Private Sub FORM_BeforeUpdate(Cancel As Integer)
If MsgBox("保存吗?", vbYesNo, n) <> vbYes Then
Cancel = True
End If
End Sub
' 去除系统的报错信息:
Private Sub FORM_Error(DataErr As Integer, Response As
Integer)
Response = acDataErrContinue
End Sub
检查数据是否被修改,无则退出,有则询问是否保存
'在窗体的字段的“属性”“事件”“更新后”的右边输入
“=NoAllowSave()”,
'在窗体的“打开”事件中代码“allowSave = False”
'定义模块
Option Compare Database
Option Explicit
Public allowSave As Boolean
Public Function NoAllowSave()
allowSave = True
End Function
“退出”按钮的单击事件代码
If allowSave = True Then
If MsgBox("当前数据已经被修改,是否保存?", vbYesNo +
vbQuestion, "请选择...") = vbYes Then
Else
End If
End If
定义记录集
Dim rst As New set
打开记录集
"SELECT 语句, 关键字 FROM 结果语句表",
tion, adOpenKeyset,
adLockOptimistic
两子窗体之间字段赋值:
Forms!aaa!!bb = Forms!aaa!!cc
确定所显示的当前记录的记录编号。
下面的示例显示如何使用 Currentrecord 属性来确定所显示的当
前记录的记录编号。在通用过程 Currentformrecord
中将当前记录的编号值赋给变量 Lngrecordnum。
Sub CurrentFormRecord(frm As Form)
Dim lngrecordnum As Long
lngrecordnum = tRecord 'CurrentRecord是当前记
录号
End Sub
读取最后一条记录
dlast("字段名","表名")
在字段默认值中用此函数能使该字段的新纪录显示上一条记录该
字段的值
怎样使窗体一打开就定位到指定记录上
定义了一个变量lngbh,要窗体打开时显示ID=Lngbh的这条记
录。
rm "formname", acNormal, , "ID =" & LNGBH,
acFormEdit,
acWindowNormal
使用API函数sendmessage,获得光标所在行和列。
Sub getcaretpos(byval TextHwnd&,LineNo&,ColNo&)
注释:TextHwnd为TextBox的hWnd属性值, LineNo为
所在行数,ColNo为列数
dim I&,j&,k& 注释:获取起始位置到光标所在位置字节数
I=SendMessage(TextHwnd,&HB0&,0,0)
j=I/2^16 注释:确定所在行
LineNo=SendMessage(TextHwnd,&HC9&,j,0)+1
注释:确定所在列
k=SendMessage(TextHwnd,&HBB&,-1,0)
ColNo=j-k+1
End sub
如何在打开窗体时自动到相应记录
用法:mand acCmdRecordsGoToNew
acCmdRecordsGoToFirst 移到第一条记录
acCmdRecordsGoToLast 移到最后一条记录
acCmdRecordsGoToNew 新增一条记录
acCmdRecordsGoToNext 移到下一条记录
acCmdRecordsGoToPrevious 移到上一条记录
判断记录的位置
来自:ACCESS中国 ysf
tePosition = 0 '第一条记录
tePosition
Count -1 '最后一条记录
tePosition=-1 '第一条记录前
=true
tePosition=Count
'最后一条记录后
=true
tePosition=n '第n+1条记录
判断为是否新增记录
ord=true
ord=false
自动编号
一:
=IIf(Left(Nz(DMax("[jhd_id]","jinhuodan",""),0),6)<>Format(
Date(),"yyyymm"),Format(Date(),"yyyymm")
=
& "001",Format(Date(),"yyyymm") &
Format(Val(Right(Nz(DMax("[jhd_id]","jinhuodan",""),0),3))+
1,"000"))
二:
=nz(DLookUp("编号","登记表","[id]=DMax('id','登记表')"))+1
自动编号
方法一按时间自动编号:
dim a,b
a=dmax("[自动编号]","编号表")+1
b=format(date(),"yyyymm") & 00
if a>b then
me.自动编号=a
else:
me.自动编号=b+1
end if
方法二,按时间自动编号:
Dim a As String
a = Nz(DMax("销售单号", "销售帐单", ""), 0)
If Left(a, 6) <> Format(Date, "yyyymm") Then
销售单号 = Format(Date, "yyyymm") & "01"
Else
销售单号 = Format(Date, "yyyymm") & Format(Val(Right(a, 2))
+ 1, "00")
End If
方法三,按月分类自动编号:
Dim id, date2 As String
date2 = "GF" & [部门代码] & Format([入库日期], "YYYYMM")
id = DMax("[rk编号]", "[入库单]", "[rk编号] Like '" & date2 &
"'")
If IsNull(id) Then
编号 = date2 & "001"
Else
编号 = date2 & Format(CStr(CInt(Right(id, 3)) + 1),
"000")
End If
按任意输入的日期值的年月自动编号
Dim a, b, c
c = Format(Me.凭证日期, "yyyymm")
b = Nz(c, 0) * 1000
a = Nz(DMax("[凭证号码]", "凭证",
"format(凭证.凭证日期,'yyyymm')=format([forms]![凭证录
入].[凭证日期],'yyyymm')"), 0) + 1
If a > b Then
Me.凭证号码 = a
Else:
Me.凭证号码 = b + 1
End If
新增一条记录时使用Right及DMax函数让字段的数字部分自动
加1
答:使用Right及DMax函数返回字段“FOO”的数字部分的最
大值,然后加1
表达式为:
="REC-" & right(DMax("FOO", "FOOTable"), _
Len(DMax("FOO", "FOOTable")) - _
InStr(1, DMax("FOO", "FOOTable"), "-")) + 1
注意:但如果很多用户或多个程序都使用DMax去实现这个结果
的话,特别在一个很大的表中这个过程会很慢,所以建议使用
DefaultValue,它仅仅使用DMax一次
程序如下,写在更新事件中
Private Sub SomeField_AfterUpdate()
Dim strMax as string
strMax =DMax("FOO", "FOOTable")
me!HiddenFooCtl = "REC-" & right(strMax, len(strMax) -
Instr(1,strMax, "-")) +1
End Sub
用按钮在窗体中添加新记录
Private Sub 添加新记录_Click()
cord , , acNewRec
End Sub
从文本框里输入新的数据库路径,然后更新链接。
Private Sub Command0_Click()
Dim cat As g
Dim tdf As
us
Set cat = New g
Set Connection = tion
Set tdf = ("mytable")
ties("jet
datasource")=
End Sub
查看当前库的路径
方法1.
=
方法2.
oledb:link
Dim DBLongname, DBName, DBDir As String
DBLongname =
DBName = Dir(DBLongname)
DBDir = Left(DBLongname, Len(DBLongname) -
Len(DBName))
MsgBox "数据库所在目录:" & DBDir
用ADO打开链接表
这是我以前十分头痛的问题,不知道那一堆一串的是什么意思现
在知道了,这个是打开ACCESS的,打开别的表不在此讨论之内。
Dim appAccess As tion
Dim strCn, temp As String
Dim cat As g
Dim rstEmployees As set
Dim intloop As Integer
Dim tbl1, tblEmp As
Dim idx As
strCn = "provider=.4.0;password=;user
id=admin; data
source=" _
& "C:Program ;Jet
OLEDB:Database Password=;"
Set appAccess = New tion
strCn
Set cat = New g
Connection = appAccess
路径改成自己的,如果有密码则在红色的Password=后面写上正
确的密码,别的照抄就行了
如何更该链接表的设置
来源:ALEX
例如,数据库当前的路径可以用
得到,然后用
+ ""就可以指向
数据库安装目录下面
link子目录下的。
如何在ADP启动时,判断数据库连接是否有效并重新连接
这是微软MSDN中,在ADP项目中创建ADP的数据库的默认连
接的代码
Public Function sCreateConnection(sSvrName As String,
sUID As String, sPWD As
String, sDatabase As String) As String
'**************************************************************
******
'该函数在ADP中检查连接,如果没有,它将通过输入参数创建一
个连接
本文发布于:2024-09-13 16:09:34,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/1726214974384955.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |