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代码插入数据的问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)