ACCESS-VBA编程(1)

阅读: 评论:0

2024年9月13日发(作者:)

ACCESS-VBA编程(1)

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中检查连接,如果没有,它将通过输入参数创建一

个连接

ACCESS-VBA编程(1)

本文发布于:2024-09-13 16:09:34,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/1726214974384955.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:窗体   是否   显示   控件   记录   打开   指定
留言与评论(共有 0 条评论)
   
验证码:
排行榜

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23