Conn_Go "driver={sql server};server=.;uid=sa;data sources=northwind"
Set Rs = CreateObject("adodb.recordset")
Dim Str
Rs.Open "select * from [sysobjects]", Conn
Debug.Print Rs(2) & Rs(3)
中的数据可以输出。
为什么改成..如下
Conn_Go "driver={sql server};server=.;uid=sa;data sources=northwind"
Set Rs = CreateObject("adodb.recordset")
Dim Str
Rs.Open "select * from [orders]", Conn
Debug.Print Rs(2) & Rs(3)
报错,提示,对象名称无效还有,sql 2000 的存储过程。如下....
SET QUOTED_IDENTIFIER ON
SET  ANSI_NULLS ON
SET  ANSI_WARNINGS ON
GO
CREATE PROCEDURE [Excel_Insert_sql_aa]  AS
Insert aa (Id,姓名,工号) select Id,姓名,工号 FROM OpenDataSource('Microsoft.Jet.OLEDB.4.0', 'Data Source= "D:\Documents and Settings\haichuan.zhu\桌面\BOS_EXP\asdf.xls";Extended Properties = "Excel 5.0;HDR=Yes; ";Persist Security Info=False')...sheet1$
GO
在vb中如何调用。。

解决方案 »

  1.   

    如何将
    SET QUOTED_IDENTIFIER ON 
    SET  ANSI_NULLS ON 
    SET  ANSI_WARNINGS ON 
    GO 
    CREATE PROCEDURE [Excel_Insert_sql_aa]  AS 
    Insert aa (Id,姓名,工号) select Id,姓名,工号 FROM OpenDataSource('Microsoft.Jet.OLEDB.4.0', 'Data Source= "D:\Documents and Settings\haic\桌面\BOS_EXP\asdf.xls";Extended Properties = "Excel 5.0;HDR=Yes; ";Persist Security Info=False')...sheet1$ 
    GO 
    存储过程中加入变量,将 D:\Documents and Settings\haic\桌面\BOS_EXP\asdf.xls
    存入变量当中,
    在vb里面text1.text中输入D:\Documents and Settings\haic\桌面\BOS_EXP\asdf.xls
    然后执行存储过程,将text1.text传进去。
    非常感谢
      

  2.   

    Conn_Go "driver={sql server};server=.;uid=sa;data sources=northwind"
    是什么意思?
    存储过程的创建语句放进变量里去就行了呀
      

  3.   


       --创建测试表
    create table aa (id int,姓名 varchar(10),工号 varchar(10))go 
    --创建测试存储过程
    Create PROCEDURE [Excel_Insert_sql_aa] 
       @FilePath varchar(200)
       /*
          EXCEL文件的全路径,在VB中调用时,
          可能需要用 cn.excute "''C:\Book1.xls''"的形式,即两个单引号
          此处的测试,仅以存储过程为例
       */  
    AS 
     declare @sql  nvarchar(4000)
     set @sql='Insert aa (Id,姓名,工号) select Id,姓名,工号 FROM OpenDataSource('+ ''''+
    'Microsoft.Jet.OLEDB.4.0'+''''+','+''''+
     'Data Source= "'+@filepath+'";Extended Properties = "Excel 5.0;HDR=Yes; ";Persist Security Info=False'
     +''''+')...sheet1$ ' print @sql  --测试一下所写的动态语句是否正常EXECUTE sp_executesql  @sql  --此处的调用方法很重要goexec  [Excel_Insert_sql_aa]  'C:\Book1.xls'  --测试存储过程,注意:应保证不C:\Book1.xls这个文件select  * from aa drop table aadrop proc [Excel_Insert_sql_aa]Book1.xls文件夹的内容如下1 00001 张三
    1 00002 李四
    1 00003 王五
    1 00004 马六执行结果Insert aa (Id,姓名,工号) select Id,姓名,工号 FROM OpenDataSource('Microsoft.Jet.OLEDB.4.0','Data Source= "C:\Book1.xls";Extended Properties = "Excel 5.0;HDR=Yes; ";Persist Security Info=False')...sheet1$ (4 行受影响)(4 行受影响)
      

  4.   

    你的第一个问题中,应该是Conn.open
    Conn_Go与Conn是两个不同的对象
      

  5.   


    谢谢,aohan我发的Conn_Go "driver={sql server};server=.;uid=sa;data sources=northwind" 我没说清楚,
    sorry. 
    是conn.open "driver={sql server};server=.;uid=sa;data sources=northwind" 
    连接数据库的,我写在一起了,代码没给完全。Excel 插入 sql我已经能够搞定还有一个问题,在sql 里面如何调用 存储过程?真的很感谢你们能帮助我!
      

  6.   

    说错了,在vb里面如何调用 sql 存储过程?真的很感谢你们能帮助我!
      

  7.   

    转载邹万秋的好文:如何操作Excel文件   
      全面控制   Excel   
      首先创建   Excel   对象,使用ComObj:   
      Dim   ExcelID   as   Excel.Application   
      Set   ExcelID   as   new   Excel.Application   
      1)   显示当前窗口:   
      ExcelID.Visible   :=   True;   
      2)   更改   Excel   标题栏:   
      ExcelID.Caption   :=   '应用程序调用   Microsoft   Excel';   
      3)   添加新工作簿:   
          ExcelID.WorkBooks.Add;   
      4)   打开已存在的工作簿:   
          ExcelID.WorkBooks.Open(   'C:\Excel\Demo.xls'   );   
      5)   设置第2个工作表为活动工作表:   
          ExcelID.WorkSheets[2].Activate;       
        或   ExcelID.WorkSheets[   'Sheet2'   ].Activate;   
      6)   给单元格赋值:   
        ExcelID.Cells[1,4].Value   :=   '第一行第四列';   
      7)   设置指定列的宽度(单位:字符个数),以第一列为例:   
        ExcelID.ActiveSheet.Columns[1].ColumnsWidth   :=   5;   
      8)   设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:   
          ExcelID.ActiveSheet.Rows[2].RowHeight   :=   1/0.035;   //   1厘米   
      9)   在第8行之前插入分页符:   
          ExcelID.WorkSheets[1].Rows[8].PageBreak   :=   1;   
      10)   在第8列之前删除分页符:   
          ExcelID.ActiveSheet.Columns[4].PageBreak   :=   0;   
      11)   指定边框线宽度:   
        ExcelID.ActiveSheet.Range[   'B3:D4'   ].Borders[2].Weight   :=   3;   
            1-左         2-右       3-顶         4-底       5-斜(   \   )           6-斜(   /   )   
      12)   清除第一行第四列单元格公式:   
        ExcelID.ActiveSheet.Cells[1,4].ClearContents;   
      13)   设置第一行字体属性:   
      ExcelID.ActiveSheet.Rows[1].Font.Name   :=   '隶书';   
      ExcelID.ActiveSheet.Rows[1].Font.Color     :=   clBlue;   
      ExcelID.ActiveSheet.Rows[1].Font.Bold       :=   True;   
      ExcelID.ActiveSheet.Rows[1].Font.UnderLine   :=   True;   
      14)   进行页面设置:   
          a.页眉:   
              ExcelID.ActiveSheet.PageSetup.CenterHeader   :=   '报表演示';   
          b.页脚:   
              ExcelID.ActiveSheet.PageSetup.CenterFooter   :=   '第&P页';   
          c.页眉到顶端边距2cm:   
              ExcelID.ActiveSheet.PageSetup.HeaderMargin   :=   2/0.035;   
          d.页脚到底端边距3cm:   
              ExcelID.ActiveSheet.PageSetup.HeaderMargin   :=   3/0.035;   
          e.顶边距2cm:   
              ExcelID.ActiveSheet.PageSetup.TopMargin   :=   2/0.035;   
          f.底边距2cm:   
              ExcelID.ActiveSheet.PageSetup.BottomMargin   :=   2/0.035;   
          g.左边距2cm:   
              ExcelID.ActiveSheet.PageSetup.LeftMargin   :=   2/0.035;   
          h.右边距2cm:   
              ExcelID.ActiveSheet.PageSetup.RightMargin   :=   2/0.035;   
          i.页面水平居中:   
              ExcelID.ActiveSheet.PageSetup.CenterHorizontally   :=   2/0.035;   
          j.页面垂直居中:   
              ExcelID.ActiveSheet.PageSetup.CenterVertically   :=   2/0.035;   
          k.打印单元格网线:   
              ExcelID.ActiveSheet.PageSetup.PrintGridLines   :=   True;   
      15)   拷贝操作:   
          a.拷贝整个工作表:   
              ExcelID.ActiveSheet.Used.Range.Copy;   
          b.拷贝指定区域:   
              ExcelID.ActiveSheet.Range[   'A1:E2'   ].Copy;   
          c.从A1位置开始粘贴:   
              ExcelID.ActiveSheet.Range.[   'A1'   ].PasteSpecial;   
          d.从文件尾部开始粘贴:   
              ExcelID.ActiveSheet.Range.PasteSpecial;   
      16)   插入一行或一列:   
            a.   ExcelID.ActiveSheet.Rows[2].Insert;   
            b.   ExcelID.ActiveSheet.Columns[1].Insert;   
      17)   删除一行或一列:   
          a.   ExcelID.ActiveSheet.Rows[2].Delete;   
          b.   ExcelID.ActiveSheet.Columns[1].Delete;   
      18)   打印预览工作表:   
          ExcelID.ActiveSheet.PrintPreview;   
      19)   打印输出工作表:   
          ExcelID.ActiveSheet.PrintOut;   
      20)   工作表保存:   
        If   not   ExcelID.ActiveWorkBook.Saved   then   
            ExcelID.ActiveSheet.PrintPreview   
            End   if   
      21)   工作表另存为:   
          ExcelID.SaveAs(   'C:\Excel\Demo1.xls'   );   
      22)   放弃存盘:   
        ExcelID.ActiveWorkBook.Saved   :=   True;   
      23)   关闭工作簿:   
        ExcelID.WorkBooks.Close;   
      24)   退出   Excel:   
      ExcelID.Quit;   
      25)   设置工作表密码:   
      ExcelID.ActiveSheet.Protect   "123",   DrawingObjects:=True,   Contents:=True,   Scenarios:=True   
      26)     EXCEL的显示方式为最大化   
      ExcelID.Application.WindowState   =   xlMaximized           
      27)   工作薄显示方式为最大化   
      ExcelID.ActiveWindow.WindowState   =   xlMaximized       
      28)   设置打开默认工作薄数量   
      ExcelID.SheetsInNewWorkbook   =   3   
      29)   '关闭时是否提示保存(true   保存;false   不保存)   
      ExcelID.DisplayAlerts   =   False       
      30)   设置拆分窗口,及固定行位置   
      ExcelID.ActiveWindow.SplitRow   =   1   
      ExcelID.ActiveWindow.FreezePanes   =   True   
      31)   设置打印时固定打印内容   
      ExcelID.ActiveSheet.PageSetup.PrintTitleRows   =   "$1:$1"       
      32)   设置打印标题   
      ExcelID.ActiveSheet.PageSetup.PrintTitleColumns   =   ""         
      33)   设置显示方式(分页方式显示)   
      ExcelID.ActiveWindow.View   =   xlPageBreakPreview       
      34)   设置显示比例   
      ExcelID.ActiveWindow.Zoom   =   100                                     
      35)   让Excel   响应   DDE   请求   
      Ex.Application.IgnoreRemoteRequests   =   False   
      
      

  8.   


      
      用VB操作EXCEL   
      Private   Sub   Command3_Click()   
      On   Error   GoTo   err1   
              Dim   i   As   Long   
              Dim   j   As   Long   
              Dim   objExl   As   Excel.Application       '声明对象变量   
              Me.MousePointer   =   11                         '改变鼠标样式   
              Set   objExl   =   New   Excel.Application   '初始化对象变量   
              objExl.SheetsInNewWorkbook   =   1     '将新建的工作薄数量设为1   
              objExl.Workbooks.Add                     '增加一个工作薄   
              objExl.Sheets(objExl.Sheets.Count).Name   =   "book1"     '修改工作薄名称     
              objExl.Sheets.Add   ,   objExl.Sheets("book1")   ‘增加第二个工作薄在第一个之后   
              objExl.Sheets(objExl.Sheets.Count).Name   =   "book2"     
              objExl.Sheets.Add   ,   objExl.Sheets("book2")   ‘增加第三个工作薄在第二个之后   
      objExl.Sheets(objExl.Sheets.Count).Name   =   "book3"     
        
      objExl.Sheets("book1").Select           '选中工作薄<book1>   
              For   i   =   1   To   50                                       '循环写入数据   
                      For   j   =   1   To   5   
      If   i   =   1   Then   
                          objExl.Selection.NumberFormatLocal   =   "@"     '设置格式为文本     
      objExl.Cells(i,   j)   =   "   E   "   &   i   &   j   
                              Else   
                                    objExl.Cells(i,   j)   =   i   &   j   
                              End   If   
                      Next   
              Next   
        
            objExl.Rows("1:1").Select                   '选中第一行   
            objExl.Selection.Font.Bold   =   True       '设为粗体   
            objExl.Selection.Font.Size   =   24           '设置字体大小   
            objExl.Cells.EntireColumn.AutoFit     '自动调整列宽     
      objExl.ActiveWindow.SplitRow   =   1     '拆分第一行   
            objExl.ActiveWindow.   SplitColumn   =   0     '拆分列   
      objExl.ActiveWindow.FreezePanes   =   True       '固定拆分       objExl.ActiveSheet.PageSetup.PrintTitleRows   =   "$1:$1"     '设置打印固定行   
      objExl.ActiveSheet.PageSetup.PrintTitleColumns   =   ""         '打印标题         objExl.ActiveSheet.PageSetup.RightFooter   =   "打印时间:   "   &   _   
                                            Format(Now,   "yyyy年mm月dd日   hh:MM:ss")   
            objExl.ActiveWindow.View   =   xlPageBreakPreview         '设置显示方式   
            objExl.ActiveWindow.Zoom   =   100                                   '设置显示大小   
              '给工作表加密码   
      objExl.ActiveSheet.Protect   "123",   DrawingObjects:=True,     _   
      Contents:=True,   Scenarios:=True   
            objExl.Application.IgnoreRemoteRequests   =   False   
            objExl.Visible   =   True                                               '使EXCEL可见   
            objExl.Application.WindowState   =   xlMaximized   'EXCEL的显示方式为最大化   
            objExl.ActiveWindow.WindowState   =   xlMaximized   '工作薄显示方式为最大化   
            objExl.SheetsInNewWorkbook   =   3                       '将默认新工作薄数量改回3个     
            Set   objExl   =   Nothing         '清除对象   
            Me.MousePointer   =   0       '修改鼠标   
      Exit   Sub   
      err1:   
      objExl.SheetsInNewWorkbook   =   3   
      objExl.DisplayAlerts   =   False     '关闭时不提示保存   
      objExl.Quit                                 '关闭EXCEL   
      objExl.DisplayAlerts   =   True       '关闭时提示保存   
      Set   objExl   =   Nothing   
      Me.MousePointer   =   0   
      End   Sub   
      

  9.   

    不好意思,我没说清楚,我的意思是vb 如何调用sql的存储过程,
    也就是vb ado操作 MSSQL SERVER 2000,给几个代码就结帖了,Help,谢谢。哎,分快光了...
      

  10.   

    create/delete/insert/select/update
    字段表 目标列表达式 函数
    from 表名
    [where 查询条件]
    [group by 列名1 [having 条件表达式]]
    [order by 列名2]
      

  11.   

    尝试一下
    Dim sqlCmd As String
    Dim ObjConn as New ADODB.Connection
    Dim DataSet as New ADODB.Recordset
    ObjConn.ConnectionString="DSN=Excel File; DBQ=c:\******; DefualtDir=c:\******; Driver ID=******;MaxBufferSize=2048;PageTimeout=5;"
    SqlCmd="select ******"
    ObjConn.Open 
    DateSet.Open SqlCmd,ObjConn,1,1
      

  12.   

    3楼的功能很好 我测试了一下 出现下面错误Insert aa (Id,[姓名],[工号]) select Id,姓名,工号 FROM OpenDataSource('Microsoft.Jet.OLEDB.4.0','Data Source= "D:\Excel_\Temp_.xls";Extended Properties = "Excel 5.0;HDR=Yes; ";Persist Security Info=False')...sheet1$
    服务器: 消息 207,级别 16,状态 3,行 1
    列名 'Id' 无效。
    服务器: 消息 207,级别 16,状态 1,行 1
    列名 '姓名' 无效。
    服务器: 消息 207,级别 16,状态 1,行 1
    列名 '工号' 无效。
      

  13.   

    3楼的我测试了,成功了!
    写好的sql 存储过程 在vb里面怎么用?
    ----------------------------------------------------------------
    Private Sub Show_Form(P_str As String)
        Dim strSQL As String
        Dim lngRecsAff As Long
        strSQL = "SELECT * INTO #tmpExcel1 FROM " & _
            "OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0', " & _
            "'Data Source=" & P_str & ";" & _
            "Extended Properties=Excel 8.0')...[sheet1$]"
        Conn.Execute strSQL, lngRecsAff, adExecuteNoRecords
    End Sub
    '可以执行完全正常
    -----------------------------------------------------------------
    -----------------------------------------------------------------
    Private Sub Show_Form(P_str As String)
        Dim strSQL As String
        Dim lngRecsAff As Long
        strSQL = "SELECT * INTO #tmpExcel1 FROM " & _
            "OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0', " & _
            "'Data Source=" & P_str & ";" & _
            "Extended Properties=Excel 8.0')...[sheet1$]"
        Rs.Open strSQL, Conn, 3, 4
    End Sub
    '提示不能更新记录。
    -----------------------------------------------------------------
    我刚学VB不久,能告诉我,比如Conn.Execute  中的lngRecsAff, adExecuteNoRecords
    参数说明在哪里能找到?谢谢.
      

  14.   

    谁有adodb帮助。给 一个。好结贴
      

  15.   

    MSDN里面没有啊.算了。结了。