2011年4月12日 星期二

2011年4月11日 星期一

使用OpenRowSet操作Excel

來源
--
有两种接口可供选择:Microsoft.Jet.OLEDB.4.0(以下简称 Jet 引擎)和Microsoft.ACE.OLEDB.12.0(以下简称 ACE 引擎)。

Jet 引擎大家都很熟悉,可以访问 Office 97-2003,但不能访问 Office 2007。

ACE 引擎是随 Office 2007 一起发布的数据库连接组件,既可以访问 Office 2007,也可以访问 Office 97-2003。

另外:Microsoft.ACE.OLEDB.12.0 可以访问正在打开的 Excel 文件,而 Microsoft.Jet.OLEDB.4.0 是不可以的。



语法举例:

--> Jet 引擎访问 Excel 97-2003

select * from OpenRowSet('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;HDR=Yes;IMEX=1;Database=D:\97-2003.xls', 'select * from [Sheet1$]')
select * from OpenRowSet('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;HDR=Yes;IMEX=1;Database=D:\97-2003.xls', [Sheet1$])
select * from OpenDataSource('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;HDR=Yes;IMEX=1;Database=D:\97-2003.xls')...[Sheet1$]
select * from OpenDataSource('Microsoft.Jet.OLEDB.4.0', 'Data Source=D:\97-2003.xls;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1"')...[Sheet1$]


--> ACE 引擎访问 Excel 97-2003

select * from OpenRowSet('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;HDR=Yes;IMEX=1;Database=D:\97-2003.xls', 'select * from [Sheet1$]')
select * from OpenRowSet('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;HDR=Yes;IMEX=1;Database=D:\97-2003.xls', [Sheet1$])
select * from OpenDataSource('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;HDR=Yes;IMEX=1;Database=D:\97-2003.xls')...[Sheet1$]
select * from OpenDataSource('Microsoft.ACE.OLEDB.12.0', 'Data Source=D:\97-2003.xls;Extended Properties="Excel 12.0;HDR=Yes;IMEX=1"')...[Sheet1$]

--> ACE 引擎访问 Excel 2007

select * from OpenRowSet('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;HDR=Yes;IMEX=1;Database=D:\2007.xlsx', 'select * from [Sheet1$]')
select * from OpenRowSet('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;HDR=Yes;IMEX=1;Database=D:\2007.xlsx', [Sheet1$])
select * from OpenDataSource('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;HDR=Yes;IMEX=1;Database=D:\2007.xlsx')...[Sheet1$]
select * from OpenDataSource('Microsoft.ACE.OLEDB.12.0', 'Data Source=D:\2007.xlsx;Extended Properties="Excel 12.0;HDR=Yes;IMEX=1"')...[Sheet1$]
注:

Excel 2007 工作簿文件的扩展名是:xlsx

HDR=Yes/No

可选参数,指定 Excel 表的第一行是否列名,缺省为 Yes,可以在注册表中修改缺省的行为。

IMEX=1

可选参数,将 Excel 表中混合 Intermixed 数据类型的列强制解析为文本。

SQL to Excel 三种方法

來源
--
  方法1。使用CopyFromRecordset(适用于Access,SQL)
  第一次:49
  第二次:45
  第三次:43
  第四次:43
  第五次:42
  方法2:使用QueryTable(适用于Access,SQL)
  第一次:10
  第二次:6
  第三次:3
  第四次:4
  第五次:4
  方法3:使用bcp(适用于SQL)
  从命令行直接运行时间为701毫秒,从VB中返回时间为0
  测试代码如下:
  方法1:
  Option Explicit
  Private Sub Command1_Click()
   Dim t1 As Date
   t1 = Now()
  
  
   Dim strConn As String
   strConn = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist
  Security Info=False;Initial Catalog=mlog;Data Source=SZ09"
  
   Dim cn As ADODB.Connection
   Dim rs As ADODB.Recordset
  
  
   Set cn = CreateObject("ADODB.Connection")
   cn.Open strConn
   cn.CursorLocation = adUseServer
   Set rs = cn.Execute("table1", , adCmdTable)
  
   Dim oExcel As Excel.Application
   Dim oBook As Excel.Workbook
   Dim oSheet As Object
   Set oExcel = CreateObject("Excel.Application")
   Set oBook = oExcel.Workbooks.Add
   Set oSheet = oBook.Worksheets(1)
  
   oSheet.Range("A1").CopyFromRecordset rs
  
   oBook.SaveAs "d:\1.xls"
   oExcel.Quit
   Set oSheet = Nothing
   Set oBook = Nothing
   Set oExcel = Nothing
  
   rs.Close
   Set rs = Nothing
  
   cn.Close
   Set cn = Nothing
  
   MsgBox (DateDiff("s", t1, Now()))
  
  End Sub
  方法 2:
  Option Explicit
  Private Sub Command1_Click()
   Dim t1 As Date
   t1 = Now()
  
   'Create a new workbook in Excel
   Dim oExcel As Object
   Dim oBook As Object
   Dim oSheet As Object
   Set oExcel = CreateObject("Excel.Application")
   Set oBook = oExcel.Workbooks.Add
   Set oSheet = oBook.Worksheets(1)
  
   Dim strConn As String
   strConn = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist
  Security Info=False;Initial Catalog=mlog;Data Source=SZ09"
  
   'Create the QueryTable
  
   Dim oQryTable As Object
   Set oQryTable = oSheet.QueryTables.Add( _
   "OLEDB;" & strConn & ";", oSheet.Range("A1"), "Select * from table1")
   oQryTable.RefreshStyle = xlInsertEntireRows
   oQryTable.Refresh False
  
   'Save the Workbook and Quit Excel
   oBook.SaveAs "d:\1.xls"
   oExcel.Quit
   Set oSheet = Nothing
   Set oBook = Nothing
   Set oExcel = Nothing
  
   MsgBox (DateDiff("s", t1, Now()))
  End Sub
  方法3:
  Private Sub Command1_Click()
   Dim t1 As Date
   t1 = Now()
  
   Dim sCmd As String
   sCmd = "bcp mlog..table1 out d:\1.csv -w -t , -r \n -S sz09 -P
  kenfil"
   Dim WSH As Object
   Set WSH = CreateObject("WScript.Shell")
   WSH.Run sCmd, True
  
   MsgBox (DateDiff("s", t1, Now()))
  End Sub
  Note: cvs本身是一个可以被excel使用的文件(你可以直接在excel中打开这个文
  件),如果你希望将这个文件转换成xls文件,很简单:
   Dim oExcel As Object
   Dim oBook As Object
   Dim oSheet As Object
   Set oExcel = CreateObject("Excel.Application")
  
   Set oBook = oExcel.Workbooks.Open("d:\1.csv")
  
   'Save as Excel workbook and Quit Excel
   oBook.SaveAs "d:\1.xls", xlWorkbookNormal
   oExcel.Quit(王朝网络 wangchao.net.cn)
-

瀏覽器相容性問題的困擾

依般我習慣使用IE 當作開發測試的環境
結果,客戶使用Chrome or firefox ; 結果呈現的卻有差異性
最常見的是:寬,高問題;和一些指令問題
到底該依何者為標準? 真是萬般困擾...

2011年4月9日 星期六

計數器,防止重新整理後加1

參考
---
基本運作,主要是靠 session 來處;這是最簡單的方式!!
除非瀏覽器關閉

2011年4月8日 星期五

vb6 Visual Component Manager vs2010

相同的問題
----
果然有人跟我遇到相同的問題了.
當vb6安裝後,再安裝 VS 2010/SP1 後;此時開啟 VB6 卻會出現要安裝 VS 2010 的視窗
只好按取消,然後在VB6內的增益集選項內的:Visual Component Manager 6.0 先取消不載入和啟定後;才有辦法正常!!
但...都怪怪的,無法複製元件...
怎解決呢?

2011年4月7日 星期四