ACCESS-VBA编程 第四章 数据输入、查询、计算、连接3.doc_第1页
ACCESS-VBA编程 第四章 数据输入、查询、计算、连接3.doc_第2页
ACCESS-VBA编程 第四章 数据输入、查询、计算、连接3.doc_第3页
ACCESS-VBA编程 第四章 数据输入、查询、计算、连接3.doc_第4页
ACCESS-VBA编程 第四章 数据输入、查询、计算、连接3.doc_第5页
免费预览已结束,剩余6页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ACCESS-VBA编程 第四章 数据输入、查询、计算、连接3 第四章 数据输入、查询、计算、连接3怎样使窗体一打开就定位到指定记录上定义了一个变量lngbh,要窗体打开时显示ID=Lngbh的这条记录。DoCmd.OpenForm 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/216注释:确定所在行LineNo=SendMessage(TextHwnd,&HC9&,j,0)+1注释:确定所在列k=SendMessage(TextHwnd,&HBB&,-1,0)ColNo=j-k+1End sub如何在打开窗体时自动到相应记录用法:DoCmd.RunCommand acCmdRecordsGoToNewacCmdRecordsGoToFirst 移到第一条记录acCmdRecordsGoToLast 移到最后一条记录acCmdRecordsGoToNew 新增一条记录acCmdRecordsGoToNext 移到下一条记录acCmdRecordsGoToPrevious 移到上一条记录判断记录的位置来自:ACCESS中国 ysfme.Recordset.AbsolutePosition = 0 第一条记录me.Recordset.AbsolutePosition = me.Recordset.RecordCount -1 最后一条记录me.Recordset.AbsolutePosition=-1 第一条记录前 me.Recordset.bof=trueme.Recordset.AbsolutePosition=me.Recordset.RecordCount 最后一条记录后 me.Recordset.eof=trueme.Recordset.AbsolutePosition=n 第n+1条记录判断为是否新增记录me.newrecord=trueme.newrecord=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,ba=dmax(自动编号,编号表)+1b=format(date(),yyyymm) & 00if ab thenme.自动编号=aelseme.自动编号=b+1end if方法二,按时间自动编号:Dim a As Stringa = Nz(DMax(销售单号, 销售帐单, ), 0)If Left(a, 6) Format(Date, yyyymm) Then销售单号 = Format(Date, yyyymm) & 01Else销售单号 = Format(Date, yyyymm) & Format(Val(Right(a, 2) + 1, 00)End If方法三,按月分类自动编号:Dim id, date2 As Stringdate2 = GF & 部门代码 & Format(入库日期, YYYYMM)id = DMax(rk编号, 入库单, rk编号 Like & date2 & ?)If IsNull(id) ThenMe.RK编号 = date2 & 001ElseMe.RK编号 = date2 & Format(CStr(CInt(Right(id, 3) + 1), 000)End If按任意输入的日期值的年月自动编号Dim a, b, cc = Format(Me.凭证日期, yyyymm)b = Nz(c, 0) * 1000a = Nz(DMax(凭证号码, 凭证, format(凭证.凭证日期,yyyymm)=format(forms!凭证录入.凭证日期,yyyymm), 0) + 1If a b ThenMe.凭证号码 = aElse:Me.凭证号码 = b + 1End 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 stringstrMax =DMax(FOO, FOOTable)me!HiddenFooCtl = REC- & right(strMax, len(strMax) - Instr(1,strMax, -) +1End Sub用按钮在窗体中添加新记录Private Sub 添加新记录_Click()DoCmd.GoToRecord , , acNewRecEnd Sub从文本框里输入新的数据库路径,然后更新链接。Private Sub Command0_Click()Dim cat As ADOX.CatalogDim tdf As ADOX.TableMe.txtDBnewNAME.SetFocusSet cat = New ADOX.CatalogSet cat.ActiveConnection = CurrentProject.ConnectionSet tdf = cat.Tables(mytable)tdf.Properties(jet oledb:link datasource)=Me.txtDBnewNAME.TextEnd Sub查看当前库的路径方法1.= CurrentProject.Path方法2.Dim DBLongname, DBName, DBDir As StringDBLongname = CodeDb.NameDBName = Dir(DBLongname)DBDir = Left(DBLongname, Len(DBLongname) - Len(DBName)MsgBox 数据库所在目录: & DBDir用ADO打开链接表这是我以前十分头痛的问题,不知道那一堆一串的是什么意思现在知道了,这个是打开ACCESS的,打开别的表不在此讨论之内。Dim appAccess As ADODB.ConnectionDim strCn, temp As StringDim cat As ADOX.CatalogDim rstEmployees As ADODB.RecordsetDim intloop As IntegerDim tbl1, tblEmp As ADOX.TableDim idx As ADOX.IndexstrCn = provider=microsoft.jet.oledb.4.0;password=;user id=admin; data source= _& C:Program Fileszhanyexing123.mdb;Jet OLEDB:Database Password=;Set appAccess = New ADODB.ConnectionappAccess.Open strCnSet cat = New ADOX.Catalogcat.ActiveConnection = appAccess路径改成自己的,如果有密码则在红色的Password=后面写上正确的密码,别的照抄就行了如何更该链接表的设置来源:ALEX例如,数据库当前的路径可以用application.CurrentProject.Path得到,然后用 application.CurrentProject.Path + linkabc.mdb就可以指向数据库安装目录下面 link子目录下的ABC.MDB。如何在ADP启动时,判断数据库连接是否有效并重新连接这是微软MSDN中,在ADP项目中创建ADP的数据库的默认连接的代码Public Function sCreateConnection(sSvrName As String, sUID As String, sPWD As String, sDatabase As String) As String*该函数在ADP中检查连接,如果没有,它将通过输入参数创建一个连接输入: sSvrName 数据库服务器名 sUID 用户名 sPWD 口令 sDatabase MSDE数据库名输出: 连接状态*On Error GoTo sCreateConnectionTrap:If Application.CurrentProject.BaseConnectionString = Then表示ADP处于无连接状态sConnectionString = PROVIDER=SQLOLEDB.1;PASSWORD= & sPWD _& ;PERSIST SECURITY INFO=TRUE;USER ID= & sUID & ; _INITIAL CATALOG= & sDatabase & ;DATA SOURCE= & sSvrNameApplication.CurrentProject.OpenConnection sConnectionStringsCreateConnection = 创建了到 & sDatabase & 数据库的连接!Else 连接已存在sCreateConnection = 已经存在到 & sDatabase & 数据库的连接!End IfsCreateConnectionExit:Exit FunctionsCreateConnectionTrap:sCreateConnection = Err.DescriptionResume sCreateConnectionExitEnd Function-此例程将从 ADP 删除连接,使其处于无连接状态。Sub MakeADPConnectionless()Application.CurrentProject.CloseConnection 关闭连接Application.CurrentProject.OpenConnection 将连接设置为无End Sub重新定位链接表二步走来源:爱赛思应用俱乐部 kevindeng尽管Accxp网上有很多关于定位链接表的贴子,但还是有很多的朋友询问这方面的问题。应letter网友的提议,结合Alex总版主的重新定位链接表文件源码,现将这方面的具体操作介绍如下:假设前台数据库文件名为frontBase.mdb后台数据库文件名为backData.mdbfrontBase当中有链接表tbl1, tbl2, tbl3, ,链接到backData.mdb中首先我们要在前台数据库文件的启动窗体加载事件中判断链接是否正确,方法是打开任意一个链接表,假设为tbl1,代码如下:Public Function CheckLinks() As Boolean 检查到后台数据库的链接;如果链接存在且正确的话,返回 True 。Dim dbs As Database, rst As DAO.RecordsetSet dbs = CurrentDb() 打开链接表查看表链接信息是否正确。On Error Resume NextSet rst = dbs.OpenRecordset(“tbl1”)rst.Close 如果没有错误,返回 True 。If Err = 0 ThenCheckLinks = TrueElseCheckLinks = FalseEnd IfEnd Function启动窗体的加载事件:Private Sub FORM_Load()If CheckLinks = False thenDocmd.OpenFORM “frmConnect”End IfEnd SubfrmConnect 连接窗体如下图imgf:m.bmp/img接下来的事情就是如何刷新链接表了。上面的窗体右边的按钮是用用来调用API打开文件对话框,具体代码如下:Declare Function GetOpenFileName Lib comdlg32.dll Alias GetOpenFileNameA (pOpenfilename As OPENFILENAME) As BooleanType OPENFILENAMElStructSize As LonghwndOwner As LonghInstance As LonglpstrFilter As StringlpstrCustomFilter As StringnMaxCustFilter As LongnFilterIndex As LonglpstrFile As StringnMaxFile As LonglpstrFileTitle As StringnMaxFileTitle As LonglpstrInitialDir As StringlpstrTitle As Stringflags As LongnFileOffset As IntegernFileExtension As IntegerlpstrDefExt As StringlCustData As LonglpfnHook As LonglpTemplateName As StringEnd TypePrivate Sub FileOpen_Click()Dim ofn As OPENFILENAMEDim rtn As Stringofn.lStructSize = Len(ofn)ofn.hwndOwner = Me.hwndofn.lpstrFilter = 数据库文件 (*.mdb) & vbNullChar & *.mdbofn.lpstrFile = Space(254)ofn.nMaxFile = 255ofn.lpstrFileTitle = Space(254)ofn.nMaxFileTitle = 255ofn.lpstrInitialDir = CurrentProject.Pathofn.lpstrTitle = 后台数据文件为ofn.flags = 6148rtn = GetOpenFileName(ofn)FileName.SetFocusIf rtn = True ThenFileName.Text = ofn.lpstrFileFileName.Text = FileName.TextOK.Enabled = TrueElseFileName.Text = End IfEnd Sub连接按钮刷新链接表,代码如下:Private Sub OK_Click()Dim tabDef As TableDefFor Each tabDef In CurrentDb.TableDefsIf Len(tabDef.Connect) 0 ThentabDef.Connect = ;DATABASE= & Me.FileName.Text & ;PWD= + 后台数据库密码tabDef.RefreshLinkEnd IfNextMsgBox 连接成功!DoCmd.Close acFORM, Me.NameEnd Sub其实很简单只有两步,判断链接是否正确和刷新链接表。数据库与照片的关系如何处理?有照片若干,怎样能在数据库中存储并显示?1、把照片放进数据库,照片的格式最好是bmp,这样就可以在窗体上显示出来,不过这样数据库的体积会暴增。设一个OLE字段,然后插入对象就行了(对着字段单击右键)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论