VB如何用ADO向ACCESS数据库插入和修改记录

VB如何用ADO向ACCESS数据库插入和修改记录,第1张

1、Microsoft Access窗口中,选择文件菜单中的打开选项,打开一个已有的数据库。

2、数据库中有两张表格,如下图所示。

3、数据库中,表格学生信息是课程成绩的子表。

4、如果直接在子表中插入记录,会提示不能添加或修改。

5、其实,只需在主表中,插入相关的主键和记录。

6、接着,就可以在子表中插入相关记录了。

7、如果要在子表中插入字段,只需选择单击以添加选项。

8、新增字段后,输入字段名即可。

可以试试 ACCESS----》文件----》获取外部数据-----》导入----》文件类型 选择 Microsoft Excel----》根据提示可以完成导入!

VB 要很多的代码

祝你好运

如果你非得用vb那以下代码 仅供参考

VB是常用的应用软件开发工具之一,由于VB的报表功能有限,而且一但报表格式发生变化,就得相应修改程序,给应用软件的维护工作带来极大的不便。因此有很多程序员现在已经充分利用EXECL的强大报表功来实现报表功能。但由于VB与EXCEL由于分别属于不同的应用系统,如何把它们有机地结合在一起,是一个值得我们研究的课题。

一、 VB读写EXCEL表:

VB本身提自动化功能可以读写EXCEL表,其方法如下:

1、在工程中引用Microsoft Excel类型库:

从"工程"菜单中选择"引用"栏;选择Microsoft Excel 90 Object Library(EXCEL2000),然后选择"确定"。表示在工程中要引用EXCEL类型库。

2、在通用对象的声明过程中定义EXCEL对象:

Dim xlApp As ExcelApplication

Dim xlBook As ExcelWorkBook

Dim xlSheet As ExcelWorksheet

3、在程序中 *** 作EXCEL表常用命令:

Set xlApp = CreateObject("ExcelApplication") '创建EXCEL对象

Set xlBook = xlAppWorkbooksOpen("文件名") '打开已经存在的EXCEL工件簿文件

xlAppVisible = True '设置EXCEL对象可见(或不可见)

Set xlSheet = xlBookWorksheets("表名") '设置活动工作表

xlSheetCells(row, col) =值 '给单元格(row,col)赋值

xlSheetPrintOut '打印工作表

xlBookClose (True) '关闭工作簿

xlAppQuit '结束EXCEL对象

Set xlApp = Nothing '释放xlApp对象

xlBookRunAutoMacros (xlAutoOpen) '运行EXCEL启动宏

xlBookRunAutoMacros (xlAutoClose) '运行EXCEL关闭宏

4、在运用以上VB命令 *** 作EXCEL表时,除非设置EXCEL对象不可见,否则VB程序可继续执行其它 *** 作,也能够关闭EXCEL,同时也可对EXCEL进行 *** 作。但在EXCEL *** 作过程中关闭EXCEL对象时,VB程序无法知道,如果此时使用EXCEL对象,则VB程序会产生自动化错误。形成VB程序无法完全控制EXCEL的状况,使得VB与EXCEL脱节。

二、 EXCEL的宏功能:

EXCEL提供一个Visual Basic编辑器,打开Visual Basic编辑器,其中有一工程属性窗口,点击右键菜单的"插入模块",则增加一个"模块1",在此模块中可以运用Visual Basic语言编写函数和过程并称之为宏。其中,EXCEL有两个自动宏:一个是启动宏(Sub Auto_Open()),另一个是关闭宏(Sub Auto_Close())。它们的特性是:当用EXCEL打含有启动宏的工簿时,就会自动运行启动宏,同理,当关闭含有关闭宏的工作簿时就会自动运行关闭宏。但是通过VB的自动化功能来调用EXCEL工作表时,启动宏和关闭宏不会自动运行,而需要在VB中通过命令xlBookRunAutoMacros (xlAutoOpen)和xlBookRunAutoMacros (xlAutoClose) 来运行启动宏和关闭宏。

三、 VB与EXCEL的相互勾通:

充分利用EXCEL的启动宏和关闭宏,可以实现VB与EXCEL的相互勾通,其方法如下:

在EXCEL的启动宏中加入一段程序,其功能是在磁盘中写入一个标志文件,同时在关闭宏中加入一段删除此标志文件的程序。VB程序在执行时通过判断此标志文件存在与否来判断EXCEL是否打开,如果此标志文件存在,表明EXCEL对象正在运行,应该禁止其它程序的运行。如果此标志文件不存在,表明EXCEL对象已被用户关闭,此时如果要使用EXCEL对象运行,必须重新创建EXCEL对象。

四、举例:

1、在VB中,建立一个FORM,在其上放置两个命令按钮,将Command1的Caption属性改为EXCEL,Command2的Caption属性改为End。然后在其中输入如下程序:

Dim xlApp As ExcelApplication '定义EXCEL类

Dim xlBook As ExcelWorkbook '定义工件簿类

Dim xlsheet As ExcelWorksheet '定义工作表类

Private Sub Command1_Click() '打开EXCEL过程

If Dir("D:\temp\excelbz") = "" Then '判断EXCEL是否打开

Set xlApp = CreateObject("ExcelApplication") '创建EXCEL应用类

xlAppVisible = True '设置EXCEL可见

Set xlBook = xlAppWorkbooksOpen("D:\temp\bbxls") '打开EXCEL工作簿

Set xlsheet = xlBookWorksheets(1) '打开EXCEL工作表

xlsheetActivate '激活工作表

xlsheetCells(1, 1) = "abc" '给单元格1行驶列赋值

xlBookRunAutoMacros (xlAutoOpen) 运行EXCEL中的启动宏

Else

MsgBox ("EXCEL已打开")

End If

End Sub

Private Sub Command2_Click()

If Dir("D:\temp\excelbz") <> "" Then '由VB关闭EXCEL

xlBookRunAutoMacros (xlAutoClose) '执行EXCEL关闭宏

xlBookClose (True) '关闭EXCEL工作簿

xlAppQuit '关闭EXCEL

End If

Set xlApp = Nothing '释放EXCEL对象

End

End Sub

2、在D盘根目录上建立一个名为Temp的子目录,在Temp目录下建立一个名为"bbxls"的EXCEL文件。

3、在"bbxls"中打开Visual Basic编辑器,在工程窗口中点鼠标键选择插入模块,在模块中输入入下程序存盘:

Sub auto_open()

Open "d:\temp\excelbz" For Output As #1 '写标志文件

Close #1

End Sub

Sub auto_close()

Kill "d:\temp\excelbz" '删除标志文件

End Sub

4、运行VB程序,点击EXCEL按钮可以打开EXCEL系统,打开EXCEL系统后,VB程序和EXCEL分别属两个不同的应用系统,均可同时进行 *** 作,由于系统加了判断,因此在VB程序中重复点击EXCEL按钮时会提示EXCEL已打开。如果在EXCEL中关闭EXCEL后再点EXCEL按钮,则会重新打开EXCEL。而无论EXCEL打开与否,通过VB程序均可关闭EXCEL。这样就实现了VB与EXCEL的无缝连接。

引用方法为:点击VB工程菜单,选择引用,选择Microsoft DAO 36 Compatibility Library并确定

'------------------------------------------------

Private Sub Form_Load() '窗口load过程

Dim myDb As Database

Dim myTb As Recordset

Set myDb = OpenDatabase("c:\datamdb") '打开数据库文件

Set myTb = myDbOpenRecordset("xpress") '打开表文件

If myTbRecordCount < 4 Then '表文件记录小于4条退出程序

Set myTb = Nothing

Set myDb = Nothing

Exit Sub

End If

myTbMoveFirst '记录指针移动到第一条

myTbMove 2 '记录指针向下移动2条即移动到第三条

Text1Text = myTb!DefaultValue 'text1赋值为xpress表的DefaultValue字段的第三条记录

myTbMoveNext '记录指针下移一条

Text2Text = myTb!DefaultValue 'text2赋值为xpress表的DefaultValue字段的第四条记录

Set myTb = Nothing

Set myDb = Nothing

End Sub

Private Sub Command1_Click()

Dim myDb As Database

Dim myTb As Recordset

Set myDb = OpenDatabase("c:\datamdb")

Set myTb = myDbOpenRecordset("xpress")

myTbMoveFirst '记录指针移动到第一条

myTbMove 2 '记录指针下移到第三条

myTbEdit '数据库为编辑状态

myTb!DefaultValue = Text1Text '数据库xpress表的DefaultValue字段第三条赋值为text1的文本

myTbUpdate '保存更改的记录

myTbMoveNext '记录指针下移一条到第四条

myTbEdit

myTb!DefaultValue = Text2Text

myTbUpdate

Set myTb = Nothing

Set myDb = Nothing

End Sub

另外,团IDC网上有许多产品团购,便宜有口碑

如果字段是字符串类型,则其值应该加上单引号作为定界符,如果是日期型则加上#(ACCESS数据库),如果是数值型,则无须定界符。

比如表x中的字段a是字符型,b是数值型,c是日期型,则:

strsql = "insert into x (a, b, c) values ('张三', 24, #2014-11-23#)"

如果上述数据分别用变量a、b、c来取代,则:

strsql = "insert into x (a, b, c) values ('" & a & "', " & b & ", #" & c & "#)"

也就是说,在这种情况下,定界符是不能取消的,否则会引起数据库搜索引擎的误解,比如你的sql字串的最终解析结果是:

, 下部框架(二),

这时候,系统会误认为“下部框架”是一个内部函数的名称,“二”则是函数的参数变量,但事实上这是不存在的函数,所以就出错了!应该是:

, '下部框架(二)',

这样系统才会认为“下部框架(二)”是个字符串!

我相信你的数据库中的字段不可能全部是数值型的吧?所以你要改的地方肯定很多!

一个数据库文件中有很多表

Dim con As ADODBConnection

Dim zrst As ADODBRecordset

set zcon=new ADODBConnection

conCursorLocation = adUseClient

conConnectionString = "Provider=MicrosoftJetOLEDB40;Data Source=" & 路径 & ";Persist Security Info=False"

conOpen

'for i=1 to 100

conexecute "insert into Table1(f1,f2) VALUES("+chr(34)+"张三"+chr(34)+","+chr(34)+"李四"+chr(34)+")" 'Table1是表名

'next i

多了一个“Else”,见下面注释

If Not ADOrsEOF Then

MsgBox "该学号已经存在"

Else ' '这是最外层If语句的Else,下面注释的那个与这个重复了

If Option1Value Then

strxb = "男"

Else

strxb = "女"

End If

Else ' '这个Else多余了,删除就可以了

strSQL = "inset into 学生(学号,姓名,性别)"

strSQL = strSQL + " values('" + Text1 + "','"strsql=strsql+text2+"','"+strxb"')"

ADOcnExecute strSQL

MsgBox "已添加新纪录"

End If

一 查阅

在Text1的KeyPress事件中加入代码,查阅时,在Text1里输入数据后,按Enter键作结束

Private Sub Text1_KeyPress(KeyAscii AsInteger)

If KeyAscii = 13 Then

Dim X As Integer

Dim CNN As New ADODBConnection

Dim rst As New ADODBRecordset

Dim SQ2 As String

CNNOpen "Provider=microsoftjetoledb40;data source="& AppPath & "\数据库名mdb"

SQ2 = "select from 表名"

rstOpen SQ2, CNN, adOpenKeyset, adLockOptimistic

if not rstEOF then

rstMovefirst

end if

For X = 1 To rstRecordCount

If Val(MeText1) = rst("A") Then ‘如果字段A是文本格式,Val()函数改为Trim()

MeText1 = rst("A")

MeText2 = rst("B")

Metext3 = rst("C")

Metext4 = rst("D")

Exit For

EndIf

rstMoveNext

Next X

rstClose

Set CCN = Nothing

End If

End Sub

二保存

Private Sub 保存_Click()

Dim X As Integer

Dim CNN As New ADODBConnection

Dim rst As New ADODBRecordset

Dim SQ2 As String

CNNOpen"Provider=microsoftjetoledb40;data source=" & AppPath &"\数据库名mdb"

SQ2 = "select from 表名"

rstOpen SQ2, CNN, adOpenKeyset,adLockOptimistic

rstAddNew

rst("A")= MeText1

rst("B")= MeText2 =

rst("C")=MeText3

rst("D")= MeText4

rstupdate

rstClose

Set CCN = Nothing

End Sub

三修改 删除

在DataGrid的RowColChange事件里加入

Private Sub DataGrid_RowColChange(LastRow As Variant, ByVal LastCol As Integer)

metext1=Datagridcolumns(0) '如果字段A是第一列,

end sub

点击修改或 删除 前,需在DataGrid表里点选需要修改或删除的记录,让该记录的第一列出现在textbox1里

Private Sub 修改_Click()

Dim X As Integer

Dim CNN As New ADODBConnection

Dim rst As New ADODBRecordset

Dim SQ2 As String

CNNOpen"Provider=microsoftjetoledb40;data source=" & AppPath &"\数据库名mdb"

SQ2 = "select from 表名"

rstOpen SQ2, CNN, adOpenKeyset,adLockOptimistic

if not rstEOF then

rstMovefirst

end if

For X = 1 To rstRecordCount

If Val(MeText1) = rst("A") Then '如果字段A是文本格式,Val()函数改为Trim()

rst("A")= MeText1

rst("B")= MeText2 =

rst("C")=MeText3

rst("D")= MeText4

rstupdate

ExitFor

EndIf

rstMoveNext

Next X

rstClose

Set CCN = Nothing

End Sub

Private Sub 删除_Click()

Dim X As Integer

Dim CNN As New ADODBConnection

Dim rst As New ADODBRecordset

Dim SQ2 As String

CNNOpen"Provider=microsoftjetoledb40;data source=" & AppPath &"\数据库名mdb"

SQ2 = "select from 表名"

rstOpen SQ2, CNN, adOpenKeyset,adLockOptimistic

if not rstEOF then

rstMovefirst

end if

For X = 1 To rstRecordCount

If Val(MeText1) = rst("A") Then '如果字段A是文本格式,Val()函数改为Trim()

rstdelete

Exit For

EndIf

rstMoveNext

Next X

rstClose

Set CCN = Nothing

End Sub

查询表名称:

select table_name from user_tables;--包含你所有的表

查询表的列:

select column_name from user_tab_columns where table_name=upper('tablename');--包换所有表的列

以上就是关于VB如何用ADO向ACCESS数据库插入和修改记录全部的内容,包括:VB如何用ADO向ACCESS数据库插入和修改记录、VB如何从Excel表中找到相应的一个字段下的多条数据插入到数据库相应的字段中、关于vb代码插入数据的问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9340167.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存