




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Private Sub Command1_Click()Dim s As StringDim Conn As New ADODB.ConnectionDim Rs As New ADODB.RecordsetConn.Open Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:mydb.mdb请将数据库名及路径换成你的实际数据库名及路径Dim UserName As StringDim Password As Strings = Text1.TextIf s = 1 Or s = 2 ThenUserName = InputBox(请输入用户名)Password = InputBox(请输入用户密码)sql = Select * From UserInfo where User= & UserName & UserInfo请换成你的实际数据表名Rs.Open sql, Conn, 1, 3If Rs.EOF ThenMsgBox 没有找到此用户ElseIf Rs(Password) = Password ThenIf s = 1 ThenMsgBox 123ElseIf s = 2 ThenMsgBox 456End IfElseMsgBox 密码错误End IfEnd IfEnd IfEnd Sub上面的例子实现了查询如果是要添加,删除,更新等操作,只要编写相应的SQL语句,再用Conn.Execute SQL 就可以了,如:添加的:SQL=Insert Into UserInfo(User,Password) Values(aaaa,1234)Conn.Execute SQL 执行后,就添加了一条记录删除:SQL=Delete From UserInfo Where User=aaaaConn.Execute SQL 删除用户名为aaaa的用户记录更新:SQL=Update UserInfo Set Password=abcdefg Where User=aaaaConn.Execute SQL 执行后,修改用户aaaa的密码为abcdefg以上只是示例,在实际使用过程中,可以将一些内容用控件输入等方式进行,这样就有很大的灵活性了动态创建数据库引用 microsoft DAP 3.6 Object LibraryDim myDB As DAO.DatabaseSet myDB = CreateDatabase(App.Path + 111.mdb, dbLangGeneral) 如果不存在数据库Set myDB = OpenDatabase(App.Path + 111.mdb) 如果存在数据库Dim str_SQL As Stringstr_SQL = Create Table NewTable1(Field1 Text(10),Field2 Short)myDB.Execute str_SQLstr_SQL = Create Table NewTable2(Field1 Text(10),Field2 Short)myDB.Execute str_SQLmyDB.Close向已经建好的数据库中添加记录建立数据库a,表名字b,字段c,文本格式,在窗体上画一command ,画一个文本框,这个代码就是将文本内容写入数据库要先引用microsoft activeX data object 2.5 library代码如下:Private Sub Command1_Click()Dim cnDk As New ADODB.ConnectionDim strDk As StringDim rDk As New ADODB.RecordsetDim sql As StringstrDk = DBQ= & App.Path & a.mdb;Driver=Microsoft Access Driver (*.mdb);cnDk.Open strDksql = insert into b (c) values ( & text1.text& )cnDk.Execute sqlcnDk.CloseSet cnDk = NothingEnd Sub在数据库中添加多条记录只要可以进行输入文本的都可以改一下这些吧,你单击一次就提示输入一次,输完了自动保存改后Data1.Recordset.AddNewData1.Recordset.Fields(username) = trim(inputbox(请输入名字)Data1.Recordset(password) =val(trim(inputbox(请输入电话)Data1.UpdateRecordData1.Recordset.AddNewData1.Recordset.Fields(username) = 张三|Data1.Recordset(password) = fsdfsdData1.UpdateRecordData1.Recordset.AddNewData1.Recordset.Fields(username) = 李四|Data1.Recordset(password) = fsdf432dData1.UpdateRecordData1.Recordset.AddNewData1.Recordset.Fields(username) = 王五|Data1.Recordset(password) = f42342dData1.UpdateRecordMsgBox adad=vb+access 数据库的记录的添加与删除Dim cn As New ADODB.ConnectionDim rs As New ADODB.RecordsetPrivate Sub Command2_Click()Set rs = cn.Execute(select * from wenzhang where 内容= & Text1.Text & )If Text1.Text = ThenMsgBox (文章不能为空!)ElseIf rs.EOF = False ThenMsgBox (文章不能重复!)Elsecn.Execute (insert into wenzhang values( & Combo1.Text & , & Text3.Text & , & Text4.Text & , &Text1.Text & )MsgBox (ok)End IfEnd Sub添加按钮Private Sub Command3_Click()Dim myval As StringSet rs = cn.Execute(select * from wenzhang where 内容= & Text1.Text & )If rs.EOF Thenmyval = MsgBox(是否保存文章?, vbInformation + vbYesNoCancel, 提示)If myval = vbYes Thencn.Execute (insert into wenzhang values( & Combo1.Text & , & Text3.Text & , & Text4.Text & , &Text1.Text & )MsgBox (保存成功)ElseCombo1.Text = End IfElseText1.Text = Combo1.Text = End IfEnd Sub删除按钮Private Sub Command4_Click()If Text1.Text = ThenMsgBox (不能删除空记录!)ElseDim myval As Stringmyval = MsgBox(是否删除文章?, vbInformation + vbYesNo, 提示)If myval = vbYes ThenSet rs = cn.Execute(delete from wenzhang where 内容 = & Text1.Text & )MsgBox (删除成功!)End IfEnd IfEnd Sub连接数据库Private Sub Form_Load()cn.ConnectionString = Provider=Microsoft.Jet.OLEDB.4.0;Data Source=temp.mdb;Persist Security Info=Falsecn.CursorLocation = adUseClientcn.OpenEnd Sub在VB环境下做了一个东东替代前面讲的程序,并得到了很大的提速,觉得还有上升的空间希望大家来讨论1VB创建及打开XLS文件似应可以更快2只有6W多条记录由数组到工作表会用10多S?3关闭及销毁的时间也用到了几S!4感觉上EXCEL转到ACC上的速度再也无法上升了吧?这是结果:处理XL总时间: 21.12建工作表对象时间: 3.5打开工作表时间: 5.47工作表赋值时间: 9.64保存时间工作表: 2.25关闭清空工作表对象时间:.2659730条数据 由XL到ACC时间:10.34下面是程序:Sub TestXlToAcc(Arr) Dim SQL$ Dim A, i&, j& Dim AppExcel As New Excel.Application 使用前期绑定,快了点!Object 定义Excel应用程序对象 Dim WbMyBook As New Excel.Workbook Object 定义工作簿对象 Dim WsMySheet As Object 定义工作表对象 Dim AAA!, S1!, S2!, S31, S4!, S5! AAA = Timer Dim TempXls$ TempXls = App.Path & TEMP.xls 可以先关后存,最好是不用保存就可以转入 AppExcel.Visible = False True 应用程序Excel可见 S1 = Round(Timer - AAA, 2) If Len(Dir(TempXls) 0 Then Set WbMyBook = AppExcel.Workbooks.Open(TempXls) Else Set WbMyBook = AppExcel.Workbooks.Add 添加工作簿 WbMyBook.SaveAs TempXls End If Set WsMySheet = AppExcel.Worksheets(sheet1) 指定工作表 将Arr转向只用了.9S ReDim A(0 To UBound(Arr, 2), 1 To UBound(Arr) A(0, 1) = 工程号: A(0, 2) = 开始时间: A(0, 3) = 实际时间: A(0, 4) = 时间差 A(0, 5) = 温度: A(0, 6) = 压力: A(0, 7) = 湿度: A(0, 8) = 仪表号 For i = 1 To UBound(A) For j = 1 To UBound(A, 2):A(i, j) = Arr(j, i):Next Next S2 = Round(Timer - AAA - S1, 2) WsMySheet.Cells.Clear WsMySheet.Cells(1, 1).Resize(UBound(A) + 1, UBound(A, 2) = A 向EXCEL里写数据? S3 = Round(Timer - AAA - S1 - S2, 2) WbMyBook.Save S4 = Round(Timer - AAA - S1 - S2 - S3, 2) WbMyBook.Close Set WbMyBook = Nothing Set WsMySheet = Nothing Set AppExcel = Nothing S5 = Round(Timer - AAA - S1 - S2 - S3 - S4, 2) Debug.Print 处理XL总时间: & Format(Timer - AAA, 0.00) 62000行用时,7S Debug.Print 建工作表对象时间: & S1 Debug.Print 打开工作表时间: & S2 Debug.Print 工作表赋值时间: & S3 Debug.Print 保存时间工作表: & S4 Debug.Print 关闭清空工作表对象时间: & S5 AAA = Timer SQL = INSERT INTO 曲线(工程号,开始时间,实际时间,时间差,温度,仪表号) & _ SELECT CSTR(F1) AS 工程号, CDATE(F2) AS 开始时间,CDATE(F3) AS 实际时间,CLNG(F4) AS 时间差,VAL(F5) AS 温度,CSTR(F8) AS 仪表号 & _ FROM Excel 8.0;HDR=NO;Database= & TempXls & .sheet1$A2:H & UBound(A) & CNN.CursorLocation = adUseServer 没有这个没有结果 CNN.Execute SQL CNN.CursorLocation = adUseClient Debug.Print UBound(A) & 条数据 由XL到ACC时间:; Format(Timer - AAA, 0.00) 62000行用时,7Send sub发现速度特慢,就一个个的查原因,下面是其中一个地方因为是在VB环境下做的,不能用insert into select的方法数据库里的曲线表有约460W条数据,8个字段,两个没有,ID上是自动递增,工程号,开始时间及仪表号建立了索引是ACCESS数据库看到别人10000条/S还嫌慢.可想这样东东应该有改进的余地的!谢原程序及测试的数据如下:Sub ChangeToMe(Arr) 将数组的数字转到我的数据库中On Error Resume NextDim SQL$, i&Dim A!A = Val(InputBox(请输入控制室热电偶与记录仪表的温度差 & Chr(10) & Chr(10) & _上次的检测值如下 & Chr(10) & Chr(10) & _若不清楚是时直接按确定, 提示, -4)这里是速度慢的原因吗?62683条用时271S 231/SDim AAA!, ssss! AAA = Timer 每次插入是否是慢的原因 SQL = select * from 曲线 WHERE 工程号= & Arr(1, 1) & Set Rs = Nothing Rs.CursorLocation = adUseClient Rs.Open SQL, CNN, 1, 2, 1 With Rs For i = 1 To UBound(Arr, 2) .AddNew 数据类形有关吗? Rs(工程号) = CStr(Arr(1, 1) Rs(开始时间) = CDate(Arr(2, 1) Rs(实际时间) = CDate(Arr(3, i) Rs(时间差) = CLng(Arr(4, i) Rs(温度) = Val(Arr(5, i) + A If Len(Arr(6, i) 0 Then Rs(压力) = Val(Arr(6, i) If Len(Arr(7, i) 0 Then Rs(湿度) = Val(Arr(7, i) Rs(仪表号) = CStr(Arr(8, i) .Update Next End With ssss = Timer - AAAAAA = Timer 同样的数量用时174S约460/S较上面的方法快 For i = 1 To UBound(Arr, 2)SQL = insert into 曲线(工程号,开始时间,实际时间,时间差, & _ IIf(Len(Arr(5, i) 0, 温度, ) & _ IIf(Len(Arr(6, i) 0, 压力, ) & _ IIf(Len(Arr(7, i) 0, 湿度, ) & _ 仪表号 ) & _ values ( & Arr(1, i) & , & _ # & Arr(2, i) & # , & _ # & Arr(3, i) & # , & _ & Arr(4, i) & , & _ IIf(Len(Arr(5, i) 0, Val(Arr(5, i) + A & , ) & _ IIf(Len(Arr(6, i) 0, Arr(6, i) & , ) & _ IIf(Len(Arr(7, i) 0, Arr(7, i) & , ) & _ & Arr(8, i) & & _ ) CNN.Execute SQLNext MsgBox UBound(Arr, 2) & AddNew: & Format(ssss, 0.00) & INSERT: & Format(Timer - AAA, 0.00) End Sub优化本文描述了如何通过一些技术手段来提高编程代码的执行效率。这些手段可以分为两个大的部分:编码技术和编译优化技术。本文从编码技术和编译技术来讨论。大家发现有好的代码,也请回贴或更新。第一部分:编码技术。下面的这些方法(到现在为止共27种)可以帮助你提高代码的运行速度:1. 使用整数(Integer)和长整数(Long)提高代码运行速度最简单的方法莫过于使用正确的数据类型了。也许你不相信,但是正确地选择数据类型可以大幅度提升代码的性能。在大多数情况下,程序员可以将Single,Double和Currency类型的变量替换为Integer或Long类型的变量,因为VB处理Integer和Long的能力远远高于处理其它几种数据类型。下面是排序:Long 最快Integer .Byte .Single .Double .Currency 最慢在大多数情况下,程序员选择使用Single或Double的原因是因为它们能够保存小数。但是小数也可以保存在Integer类型的变量中。例如程序中约定有三位小数,那么只需要将保存在Integer变量中的数值除以1000就可以得到结果。根据我的经验,使用Integer和Long替代Single,Double和Currency后,代码的运行速度可以提高将近10倍。2. 避免使用变体对于一个VB程序员来说,这是再明显不过的事情了。变体类型的变量需要16个字节的空间来保存数据,而一个整数(Integer)只需要2个字节。通常使用变体类型的目的是为了减少设计的工作量和代码量,也有的程序员图个省事而使用它。但是如果一个软件经过了严格设计和按照规范编码的话,完全可以避免使用变体类型。在这里顺带提一句,对于Object对象也存在同样的问题。请看下面的代码:Dim FSOSet FSO = New Scripting.FileSystemObject或Dim FSO as objectSet FSO = New Scripting.FileSystemObject上面的代码由于在申明的时候没有指定数据类型,在赋值时将浪费内存和CPU时间。正确的代码应该象下面这样:Dim FSO as New FileSystemObject3. 尽量避免使用属性在平时的代码中,最常见的比较低效的代码就是在可以使用变量的情况下,反复使用属性(Property),尤其是在循环中。要知道存取变量的速度是存取属性的速度的20倍左右。下面这段代码是很多程序员在程序中会使用到的:Dim intCon as IntegerFor intCon = 0 to Ubound(SomVar()Text1.Text = Text1.Text & vbcrlf & SomeVar(intCon)Next intCon下面这段代码的执行速度是上面代码的20倍。Dim intCon as IntegerDim sOutput as StringFor intCon = 0 to Ubound(SomeVar()sOutput = sOutput & vbCrlf &SomeVar(intCon)NextText1.Text = sOutput同样地,像这样的代码 . . .Do Until EOF(F) Line Input #F, nextLine Text1.Text = Text1.Text + nextLineLoop. . . 比下面的代码慢得多:Do Until EOF(F) Line Input #F, nextLine bufferVar = bufferVar + nextLineLoopText1.Text = bufferVar然而,下面的代码完成了相同的功能,而且还要快: Text1.Text = Input(F, LOF(F)如上述,几种方法都实现了同样的任务;同时,最好的算法也是最优的。4. 尽量使用数组,避免使用集合除非你必须使用集合(Collection),否则你应该尽量使用数组。据测试,数组的存取速度可以达到集合的100倍。这个数字听起来有点骇人听闻,但是如果你考虑到集合是一个对象,你就会明白为什么差异会这么大。5. 展开小的循环体在编码的时候,有可能遇到这种情况:一个循环体只会循环2到3次,而且循环体由几行代码组成。在这种情况下,你可以把循环展开。原因是循环会占用额外的CPU时间。但是如果循环比较复杂,你就没有必要这样做了。6. 避免使用很短的函数和使用小的循环体相同,调用只有几行代码的函数也是不经济的-调用函数所花费的时间或许比执行函数中的代码需要更长的时间。在这种情况下,你可以把函数中的代码拷贝到原来调用函数的地方。7. 减少对子对象的引用在VB中,通过使用.来实现对象的引用。例如:Form1.Text1.Text在上面的例子中,程序引用了两个对象:Form1和Text1。利用这种方法引用效率很低。但遗憾的是,没有办法可以避免它。程序员唯一可以做就是使用With或者将用另一个对象保存子对象(Text1)。 使用WithWith frmMain.Text1.Text = Learn VB.Alignment = 0.Tag = Its my life.BackColor = vbBlack.ForeColor = vbWhiteEnd With或者 使用另一个对象保存子对象Dim txtTextBox as TextBoxSet txtTextBox = frmMain.Text1TxtTextBox.Text = Learn VBTxtTextBox.Alignment = 0TxtTextBox.Tag = Its my lifeTxtTextBox.BackColor = vbBlackTxtTextBox.ForeColor = vbWhite注意,上面提到的方法只适用于需要对一个对象的子对象进行操作的时候,下面这段代码是不正确的:With Text1.Text = Learn VB.Alignment = 0.Tag = Its my life.BackColor = vbBlack.ForeColor = vbWhiteEnd With很不幸的是,我们常常可以在实际的代码中发现类似于上面的代码。这样做只会使代码的执行速度更慢。原因是With块编译后会形成一个分枝,会增加了额外的处理工作。8. 检查字符串是否为空大多数程序员在检查字符串是否为空时会使用下面的方法:If Text1.Text = then 执行操作End if很不幸,进行字符串比较需要的处理量甚至比读取属性还要大。因此我建议大家使用下面的方法:If Len(Text1.Text) = 0 then 执行操作End if9. 去除Next关键字后的变量名在Next关键字后加上变量名会导致代码的效率下降。我也不知道为什么会这样,只是一个经验而已。不过我想很少有程序员会这样画蛇添足,毕竟大多数程序员都是惜字如金的人。 错误的代码For iCount = 1 to 10 执行操作Next iCount 正确的代码For iCount = 1 to 10 执行操作Next10. 使用数组,而不是多个变量当你有多个保存类似数据的变量时,可以考虑将他们用一个数组代替。在VB中,数组是最高效的数据结构之一。11. 使用动态数组,而不是静态数组使用动态数组对代码的执行速度不会产生太大的影响,但是在某些情况下可以节约大量的资源。12. 销毁对象无论编写的是什么软件,程序员都需要考虑在用户决定终止软件运行后释放软件占用的内存空间。但遗憾的是很多程序员对这一点好像并不是很在意。正确的做法是在退出程序前需要销毁程序中使用的对象。例如:Dim FSO as New FileSystemObject 执行操作 销毁对象Set FSO = Nothing对于窗体,可以进行卸载:Unload frmMain或Set frmMain = Nothing13. 变长和定长字符串从技术上来说,与变长字符串相比,定长字符串需要较少的处理时间和空间。但是定长字符串的缺点在于在很多情况下,你都需要调用Trim函数以去除字符串末的空字符,这样反而会降低代码效率。所以除非是字符串的长度不会变化,否则还是使用变长字符串。14. 使用类模块,而不是ActiveX控件除非ActiveX控件涉及到用户界面,否则尽量使用轻量的对象,例如类。这两者之间的效率有很大差异。15. 使用内部对象在涉及到使用ActiveX控件和DLL的时候,很多程序员喜欢将它们编译好,然后再加入工程中。我建议你最好不要这样做,因为从VB连接到一个外部对象需要耗费大量的CPU处理能力。每当你调用方法或存取属性的时候,都会浪费大量的系统资源。如果你有ActiveX控件或DLL的源代码,将它们作为工程的私有对象。16. 减少模块的数量有些人喜欢将通用的函数保存在模块中,对于这一点我表示赞同。但是在一个模块中只写上二三十行代码就有些可笑了。如果你不是非常需要模块,尽量不要使用它。这样做的原因是因为只有在模块中的函数或变量被调用时,VB才将模块加载到内存中;当VB应用程序退出时,才会从内存中卸载这些模块。如果代码中只有一个模块,VB就只会进行一次加载操作,这样代码的效率就得到了提高;反之如果代码中有多个模块,VB会进行多次加载操作,代码的效率会降低。17. 使用对象数组当设计用户界面时,对于同样类型的控件,程序员应该尽量使用对象数组。你可以做一个实验:在窗口上添加100个PictureBox,每个PictureBox都有不同的名称,运行程序。然后创建一个新的工程,同样在窗口上添加100个PictureBox,不过这一次使用对象数组,运行程序,你可以注意到两个程序加载时间上的差别。18. 使用Move方法在改变对象的位置时,有些程序员喜欢使用Width,Height,Top和Left属性。例如:Image1.Width = 100Image1.Height = 100Image1.Top = 0Image1.Left = 0实际上这样做效率很低,因为程序修改了四个属性,而且每次修改之后,窗口都会被重绘。正确的做法是使用Move方法:Image1.Move 0,0,100,10019. 减少图片的使用图片将占用大量内存,而且处理图片也需要占用很多CPU资源。在软件中,如果可能的话,可以考虑用背景色来替代图片-当然这只是从技术人员的角度出发看这个问题。20. 使用ActiveX DLL,而不是ActiveX控件如果你设计的ActiveX对象不涉及到用户界面,使用ActiveX DLL。21. 使用类可以提高软件的整体性能 VB提供的机制不完全支持面向对象的设计和编码,但是VB提供了简单的类。大多数人认为使用对象将导致代码的效率降低。对于这一点我个人有些不同的意见;考察代码的效率不能纯粹从运行速度的角度出发,软件占用的资源也是需要考虑的因素之一。使用类可以帮助你在整体上提升软件的性能。22. 尽可能使用常数使用常数可以加快应用程序的运行,增强代码的可读性,而且易于维护。如果代码中的字符串或数字是不变的,则可把它们声明为常数。常数在编译时只处理一次,将适当的值写进代码;而变量在每次运行应用程序时都要读取当前值。尽量使用对象浏览器中列举的内部常数,而不要自己去创建。不要担心应用程序中引用的模块包含多余的常数;多余的常数在形成 .exe 文件时被删除。23. 用 ByVal 传递参数,而不用 ByRef编写含参数的 Sub 或 Function 过程时,按值 (ByVal) 传递参数比按地址 (ByRef) 快。尽管 Visual Basic 中参数传递的缺省方式是按地址的 (ByRef) ,但实际上需要改变参数值的过程极少。如果过程中不需改变参数的值,就可以按值 (ByVal) 来传递,举例说明如下:Private Sub DoSomething(ByVal strName As String, _ByVal intAge As Integer)24. 使用类型确定的可选参数使用 Visual Basic 5.0 中类型确定的可选参数,可以提高 Sub 或 Function 的调用速度。Visual Basic 以前版本中的可选参数只能是 Variant 的。如果过程是按值传递参数的,正如下面的例子,16 个字节的 Variant 变量保存在堆栈中。Private Sub DoSomething(ByVal strName As String, _Optional ByVal vntAge As Variant, _Optional ByVal vntWeight As Variant)使用类型确定的可选参数,每次调用时占用的堆栈空间较少,而且传递到内存中的数据也较少:Private Sub DoSomething(ByVal strName As String, _Optional ByVal intAge As Integer, _Optional ByVal intWeight As Integer)类型确定的可选参数的访问速度比 Variant 快,而且一旦数据类型错误,编译时就显示错误信息。25利用集合的优点可以定义和使用对象的集合是 Visual Basic 的强大功能之一。尽管集合是非常有用的,但还要正确使用才能获得最好的效果:使用 For Each.Next 替代 For.Next。26. 添加集合的对象时避免使用 Before 和 After 参数。使用键集而不用几组相同对象的数组。集合可以用 For.Next 循环进行迭代。但采用 For Each.Next 可读性更好,而且多数情况下更快。For Each.Next 是由集合的生成器实现迭代的,所以实际的操作速度将随集合对象的不同而改变。由于 For Each.Next 的最简单的实现机理就是 For.Next 的线性迭代,因此 For Each.Next 不会比 For.Next 慢。但是,有些情况下采用了比线性迭代更复杂的实现机理,所以 For Each.Next 要快得多。如果没有使用 Before 和 After 参数,则往集合中添加对象是非常快的。否则,Visual Basic 必须在集合中检测到其它对象后,才能添加新对象。如果对象的类型都一样,集合或数组都可以用来管理这些对象(如果对象的类型不一样,则只能用集合)。从速度的观点看,选择何种方式取决于对象的访问方式。如果能够为每一对象分配唯一的键,则集合是访问对象的最快方式。使用键从集合中检索对象比从数组中顺序遍历对象快。当然,如果没有键而要遍历对象时,则选择数组比较好。就顺序遍历方式而言,数组比集合快。如果对象的个数少,则数组使用的内存小,并且搜索的速度快。当对象的个数在 100 左右时,集合比数组的效率高;当然,具体的数目还有赖于微处理器的速度和可用的内存。26. 不要用Do While Not record.EOF 语句。例如下面的代码比较慢:Do While Not record.EOF 代码 record.MoveNextLoop下面的要快好多Record.MoveLastintCount=Record.RecordCountRecord.Mo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论