1. ASP對(duì)Excel的基本操作
(1) 建立Excel對(duì)象
創(chuàng)建Excel對(duì)象可以通過(guò)下面的代碼來(lái)實(shí)現(xiàn):
<%
set objExcelApp = CreateObject("Excel.Application")
objExcelApp.DisplayAlerts = false '不顯示警告
objExcelApp.Application = false '不顯示界面
%>
(2) 新建Excel文件
新建Excel文件可以通過(guò)以下代碼來(lái)實(shí)現(xiàn):
<%
objExcelApp.WorkBooks.add
set objExcelBook = objExcelApp.ActiveWorkBook
set objExcelSheets = objExcelBook.Worksheets
set objExcelSheet = objExcelBook.Sheets(1)
%>
(3) 讀取已有的Excel文件
讀取已有的Excel文件可以通過(guò)下面的代碼來(lái)實(shí)現(xiàn)
<%
strAddr = Server.MapPath(".")
objExcelApp.WorkBooks.Open(strAddr & "TempletTable.xls")
set objExcelBook = objExcelApp.ActiveWorkBook
set objExcelSheets = objExcelBook.Worksheets
set objExcelSheet = objExcelBook.WorkSheets(1)
%>
(4) 另存Excel文件
另存Excel文件可以通過(guò)以下代碼來(lái)實(shí)現(xiàn)
<%
objExcelBook.SaveAs strAddr & "templateTables.xls"
%>
(5) 保存Excel文件
保存Excel文件可以通過(guò)以下代碼來(lái)實(shí)現(xiàn):
<%
objExcelBook.Save
%>
(6) 退出Excel操作
<%
objExcelApp.Quit '一定要退出
set objExcelApp = nothing
%>
2 讀取Excel文件的實(shí)例
<%
set xlApp = server.CreateObject("Excel.Application")
%>
2 讀取Excel文件的實(shí)例
<%
set xlApp = server.CreateObject("Excel.Application")
strsource = server.MapPath("xl.xls")
set xlbook = xlApp.WorkBooks.Open(strsource)
set xlsheet = xlbook.Worksheets(1)
i = 1
response.write "<table>"
while xlsheet.cells(i,1) <> ""
response.write "<tr>"
response.write "<td>" & xlsheet.Cells(i,1) & "</td>"
response.write "<td>" & xlsheet.Cells(i,2) & "</td>"
response.write "<td>" & xlsheet.Cells(i,3) & "</td>"
response.write "<tr>"
i = i + 1
wend
response.write "</table>"
set xlsheet = nothing
set xlbook = nothing
xlApp.quit
'千萬(wàn)記住要加這一句,否則每運(yùn)行一次你的機(jī)器里就增加一個(gè)Excel進(jìn)程,而且無(wú)法釋放
'set xlApp = nothing 是不行的
%>
2006-4-3 7:58:27 #
shuiziliuvvv
性別 True
加入日期 2005-10-26
QQ號(hào)碼 191081370
郵箱 shuiziliuvvv@163.com
發(fā)帖
回復(fù)
怎樣將數(shù)據(jù)從Excel導(dǎo)入到SQL Server中
(1)
<%
sub dataIntoSqlServer_ceritificate(strFileName,strSheetName,myConn)
'定義
dim myConnection
dim strName
dim rsXsl,rsSql
dim myConn_Xsl
dim cmd
dim i,j
dim maxId
strName = strFileName
set myConnection = Server.CreateObject("ADODB.Connection")
set rsXsl = Server.CreateObject("ADODB.Recordset")
set rsSql = Server.CreateObject("ADODB.Recordset")
set cmd = server.CreateObject("ADODB.Command")
cmd.ActiveConnection = myConn
myConn_Xsl = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strName & _
";Extended Properties=Excel 8.0"
'打開(kāi)連接
myconnection.open myConn_Xsl
'打開(kāi)表
str_Xsl = "select * from [" & strSheetName & "$]"
rsXsl.open str_Xsl,myconnection,1,1
j = 1
Do while not rsXsl.eof
'取出最大值
str_sql = "select Max(id) as maxId from exceltosql"
rsSql.open str_Sql,myConn,1,3
if Not rsSql.eof then
if not isNull(rsSql("maxId")) then
maxId=CLng(rsSql("maxId")) + 1
else
maxId = 1
end if
else
maxId = 1
end if
rsSql.close '//關(guān)閉對(duì)象
'加入數(shù)據(jù)庫(kù)
str_Sql = "insert into exceltosql values(" & maxId&",'"&rsXsl(1)&"','" & rsXsl(2)&"')"
cmd.CommandText = str_Sql
cmd.Excute()
''''''''''''''''''''''''''''''''''''''''''
j = j + 1
rsXsl.moveNext
loop
response.write "共導(dǎo)入 " & j_1 & " 條記錄.<br>"
response.write "<a href=# onclick='self.close();'>關(guān)閉窗口</a>"
set rsXsl = nothing
set rsSql = nothing
set myconnection = nothing
set cmd = nothing
end sub
(2)
'調(diào)用方法
<%
file1 = "c:\excelexample.xls"
myconn = "DRIVER={SQL SERVER};SERVER=(local);uid=sa;pwd=sa;DATABASE=aspbook"
dataIntoSqlServer_ceritificate file1,"sheet1",myconn
%>
2006-4-4 7:19:21 #
shuiziliuvvv
性別 True
加入日期 2005-10-26
QQ號(hào)碼 191081370
郵箱 shuiziliuvvv@163.com
發(fā)帖
回復(fù)
ASP操作Excel技術(shù)總結(jié)
目錄
一、 環(huán)境配置
二、 ASP對(duì)Excel的基本操作
三、 ASP操作Excel生成數(shù)據(jù)表
四、 ASP操作Excel生成Chart圖
五、 服務(wù)器端Excel文件瀏覽、下載、刪除方案
六、 附錄
正文
一、 環(huán)境配置
服務(wù)器端的環(huán)境配置從參考資料上看,微軟系列的配置應(yīng)該都行,即:
1.Win9x+PWS+Office
2.Win2000 Professional+PWS+Office
3.Win2000 Server+IIS+Office
目前筆者測(cè)試成功的環(huán)境是后二者。Office的版本沒(méi)有特殊要求,考慮到客戶機(jī)配置的不確定性和下兼容特性,建議服務(wù)器端Office版本不要太高,以防止客戶機(jī)下載后無(wú)法正確顯示。
服務(wù)器端環(huán)境配置還有兩個(gè)偶然的發(fā)現(xiàn)是:
1. 筆者開(kāi)發(fā)機(jī)器上原來(lái)裝有金山的WPS2002,結(jié)果Excel對(duì)象創(chuàng)建始終出現(xiàn)問(wèn)題,卸載WPS2002后,錯(cuò)誤消失。
2. 筆者開(kāi)發(fā)ASP代碼喜歡用FrontPage,結(jié)果發(fā)現(xiàn)如果FrontPage打開(kāi)(服務(wù)器端),對(duì)象創(chuàng)建出現(xiàn)不穩(wěn)定現(xiàn)象,時(shí)而成功時(shí)而不成功。擴(kuò)展考察后發(fā)現(xiàn),Office系列的軟件如果在服務(wù)器端運(yùn)行,則Excel對(duì)象的創(chuàng)建很難成功。
服務(wù)器端還必須要設(shè)置的一點(diǎn)是COM組件的操作權(quán)限。在命令行鍵入“DCOMCNFG”,則進(jìn)入COM組件配置界面,選擇Microsoft Excel后點(diǎn)擊屬性按鈕,將三個(gè)單選項(xiàng)一律選擇自定義,編輯中將Everyone加入所有權(quán)限。保存完畢后重新啟動(dòng)服務(wù)器。
客戶端的環(huán)境配置沒(méi)發(fā)現(xiàn)什么特別講究的地方,只要裝有Office和IE即可,版本通用的好象都可以。
二、 ASP對(duì)Excel的基本操作
1、 建立Excel對(duì)象
set objExcelApp = CreateObject("Excel.Application")
objExcelApp.DisplayAlerts = false 不顯示警告
objExcelApp.Application.Visible = false 不顯示界面
2、 新建Excel文件
objExcelApp.WorkBooks.add
set objExcelBook = objExcelApp.ActiveWorkBook
set objExcelSheets = objExcelBook.Worksheets
set objExcelSheet = objExcelBook.Sheets(1)
3、 讀取已有Excel文件
strAddr = Server.MapPath(".")
objExcelApp.WorkBooks.Open(strAddr & "\Templet\Table.xls")
set objExcelBook = objExcelApp.ActiveWorkBook
set objExcelSheets = objExcelBook.Worksheets
set objExcelSheet = objExcelBook.Sheets(1)
4、 另存Excel文件
objExcelBook.SaveAs strAddr & "\Temp\Table.xls"
5、 保存Excel文件
objExcelBook.Save (筆者測(cè)試時(shí)保存成功,頁(yè)面報(bào)錯(cuò)。)
6、 退出Excel操作
objExcelApp.Quit 一定要退出
set objExcelApp = Nothing
三、 ASP操作Excel生成數(shù)據(jù)表
1、 在一個(gè)范圍內(nèi)插入數(shù)據(jù)
objExcelSheet.Range("B3:k3").Value = Array("67", "87", "5", "9", "7", "45", "45", "54", "54", "10")
2、 在一個(gè)單元格內(nèi)插入數(shù)據(jù)
objExcelSheet.Cells(3,1).Value="Internet Explorer"
3、 選中一個(gè)范圍
4、 單元格左邊畫粗線條
5、 單元格右邊畫粗線條
6、 單元格上邊畫粗線條
7、 單元格下邊畫粗線條
8、 單元格設(shè)定背景色
9、 合并單元格
10、 插入行
11、 插入列
四、 ASP操作Excel生成Chart圖
1、 創(chuàng)建Chart圖
objExcelApp.Charts.Add
2、 設(shè)定Chart圖種類
objExcelApp.ActiveChart.ChartType = 97
注:二維折線圖,4;二維餅圖,5;二維柱形圖,51
3、 設(shè)定Chart圖標(biāo)題
objExcelApp.ActiveChart.HasTitle = True
objExcelApp.ActiveChart.ChartTitle.Text = "A test Chart"
4、 通過(guò)表格數(shù)據(jù)設(shè)定圖形
objExcelApp.ActiveChart.SetSourceData objExcelSheet.Range("A1:k5"),1
5、 直接設(shè)定圖形數(shù)據(jù)(推薦)
objExcelApp.ActiveChart.SeriesCollection.NewSeries
objExcelApp.ActiveChart.SeriesCollection(1).Name = "=""333"""
objExcelApp.ActiveChart.SeriesCollection(1).Values = "={1,4,5,6,2}"
6、 綁定Chart圖
objExcelApp.ActiveChart.Location 1
7、 顯示數(shù)據(jù)表
objExcelApp.ActiveChart.HasDataTable = True
8、 顯示圖例
objExcelApp.ActiveChart.DataTable.ShowLegendKey = True
五、 服務(wù)器端Excel文件瀏覽、下載、刪除方案
瀏覽的解決方法很多,“Location.href=”,“Navigate”,“Response.Redirect”都可以實(shí)現(xiàn),建議用客戶端的方法,原因是給服務(wù)器更多的時(shí)間生成Excel文件。
下載的實(shí)現(xiàn)要麻煩一些。用網(wǎng)上現(xiàn)成的服務(wù)器端下載組件或自己定制開(kāi)發(fā)一個(gè)組件是比較好的方案。另外一種方法是在客戶端操作Excel組件,由客戶端操作服務(wù)器端Excel文件另存至客戶端。這種方法要求客戶端開(kāi)放不安全ActiveX控件的操作權(quán)限,考慮到通知每個(gè)客戶將服務(wù)器設(shè)置為可信站點(diǎn)的麻煩程度建議還是用第一個(gè)方法比較省事。
刪除方案由三部分組成:
A: 同一用戶生成的Excel文件用同一個(gè)文件名,文件名可用用戶ID號(hào)或SessionID號(hào)等可確信不重復(fù)字符串組成。這樣新文件生成時(shí)自動(dòng)覆蓋上一文件。
B: 在Global.asa文件中設(shè)置Session_onEnd事件激發(fā)時(shí),刪除這個(gè)用戶的Excel暫存文件。
C: 在Global.asa文件中設(shè)置Application_onStart事件激發(fā)時(shí),刪除暫存目錄下的所有文件。
注:建議目錄結(jié)構(gòu) \Src 代碼目錄 \Templet 模板目錄 \Temp 暫存目錄
六、 附錄
出錯(cuò)時(shí)Excel出現(xiàn)的死進(jìn)程出現(xiàn)是一件很頭疼的事情。在每個(gè)文件前加上“On Error Resume Next”將有助于改善這種情況,因?yàn)樗鼤?huì)不管文件是否產(chǎn)生錯(cuò)誤都堅(jiān)持執(zhí)行到“Application.Quit”,保證每次程序執(zhí)行完不留下死進(jìn)程。
2006-4-6 6:51:42 #
shuiziliuvvv
性別 True
加入日期 2005-10-26
QQ號(hào)碼 191081370
郵箱 shuiziliuvvv@163.com
發(fā)帖
回復(fù)
ASP讀EXCEL2000的文章?。?br>
由于工作需要 要用ASP讀取EXCEL的工資單 所以在網(wǎng)上找了些資料
寫了以下程序 送給大家:)
<%
'=====================ASP讀取EXCEL注事項(xiàng)===========================
'i)將Excel97或Excel2000生成的XLS文件(book)看成一個(gè)數(shù)據(jù)庫(kù),其中的每一個(gè)工作表(sheet)看成數(shù)據(jù)庫(kù)表
'ii)ADO假設(shè)Excel中的第一行為字段名.所以你定義的范圍中必須要包括第一行的內(nèi)容
'iii)Excel中的行標(biāo)題(即字段名)不能夠包含數(shù)字. Excel的驅(qū)動(dòng)在遇到這種問(wèn)題時(shí)就會(huì)出錯(cuò)的。例如你的行標(biāo)題名為“F1”
'iiii)如果你的Excel電子表格中某一列同時(shí)包含了文本和數(shù)字的話,那么Excel的ODBC驅(qū)動(dòng)將不能夠正常, 處理這一行的數(shù)據(jù)類型,你必須要保證該列的數(shù)據(jù)類型一致
'E-MAIL:Kaxue@Hotmail.com QQ:484110 HOMEPAGE:www.Flyday.net
'整理時(shí)間:Thursday, May 23, 2002 5:54 PM WIN2000SERVER+IIS5 測(cè)式通過(guò)
'===================================================================
Dim Conn,Driver,DBPath,Rs
' 建立Connection對(duì)象
Set Conn = Server.CreateObject("ADODB.Connection")
Driver = "Driver={Microsoft Excel Driver (*.xls)};"
DBPath = "DBQ=" & Server.MapPath( "test.xls" )
'調(diào)用Open 方法打開(kāi)數(shù)據(jù)庫(kù)
Conn.Open Driver & DBPath
'DSN連接方式
'Conn.Open "Dsn=test"
'注意 表名一定要以下邊這種格試 "[表名$]" 書寫
Sql="Select * From [Sheet1$] where 序號(hào)=0"
Set Rs=Conn.Execute(Sql)
IF Rs.Eof And Rs.Bof Then
Response.write "沒(méi)有找到您需要的數(shù)據(jù)!!"
Else
Do While Not Rs.EOF
Response.write Rs("姓名")
Rs.MoveNext
Loop
End IF
Rs.Close
Set Rs=nothing
Conn.Close
Set Conn=Nothing
'Response.Write "成功!"
%>
2006-4-6 6:56:09 #
shuiziliuvvv
性別 True
加入日期 2005-10-26
QQ號(hào)碼 191081370
郵箱 shuiziliuvvv@163.com
發(fā)帖
回復(fù)
ASP與電子表格EXCEL的交互操作
Here we go again with another sample for Excel, this time we will be using ASP to create a chart. You all
asked me for it, now here is the solution. Thanks again for all your nice comments :)
First we set the type of script
<%@ LANGUAGE="VBSCRIPT" %>
Make the object, and set the object to an Excelsheet
Dim MyExcelChart
Set MyExcelChart = CreateObject("Excel.Sheet")
Now lets write the rest of the script, see the comments
' show or dont show excel to user, TRUE or FALSE
MyExcelChart.Application.Visible = True
' populate the cells
MyExcelChart.ActiveSheet.Range("B2:k2").Value = Array
("Week1", "Week2", "Week3", "Week4", "Week5", "Week6", "Week7", "Week8", "Week9", "Week10")
MyExcelChart.ActiveSheet.Range("B3:k3").Value = Array
("67", "87", "5", "9", "7", "45", "45", "54", "54", "10")
MyExcelChart.ActiveSheet.Range("B4:k4").Value = Array
("10", "10", "8", "27", "33", "37", "50", "54", "10", "10")
MyExcelChart.ActiveSheet.Range("B5:k5").Value = Array
("23", "3", "86", "64", "60", "18", "5", "1", "36", "80")
MyExcelChart.ActiveSheet.Cells(3,1).Value="Internet Explorer"
MyExcelChart.ActiveSheet.Cells(4,1).Value="Netscape"
MyExcelChart.ActiveSheet.Cells(5,1).Value="Other"
' Select the contents that need to be in the chart
MyExcelChart.ActiveSheet.Range("b2:k5").Select
' Add the chart
MyExcelChart.Charts.Add
' Format the chart, set type of chart, shape of the bars, show title, get the data for the chart, show
datatable, show legend
MyExcelChart.activechart.ChartType = 97
MyExcelChart.activechart.BarShape =3
MyExcelChart.activechart.HasTitle = True
MyExcelChart.activechart.ChartTitle.Text = "Visitors log for each week shown in browsers percentage"
MyExcelChart.activechart.SetSourceData MyExcelChart.Sheets("Sheet1").Range("A1:k5"),1
MyExcelChart.activechart.Location 1
MyExcelChart.activechart.HasDataTable = True
MyExcelChart.activechart.DataTable.ShowLegendKey = True
' Save the the excelsheet to excelface
MyExcelChart.SaveAs "c:\chart.xls"
%>
Now lets complete the HTML tags.
<HTML>
<HEAD>
<TITLE>MyExcelChart</TITLE>
</HEAD>
<BODY>
</BODY>
</HTML>
This completes yer ASP page, look below for the complete code of myexcelchart.asp
<%@ LANGUAGE="VBSCRIPT" %>
<%
' Create Object
Set MyExcelChart = CreateObject("Excel.Sheet")
' show or dont show excel to user, TRUE or FALSE
MyExcelChart.Application.Visible = True
' populate the cells
MyExcelChart.ActiveSheet.Range("B2:k2").Value = Array
("Week1", "Week2", "Week3", "Week4", "Week5", "Week6", "Week7", "Week8", "Week9", "Week10")
MyExcelChart.ActiveSheet.Range("B3:k3").Value = Array
("67", "87", "5", "9", "7", "45", "45", "54", "54", "10")
MyExcelChart.ActiveSheet.Range("B4:k4").Value = Array
("10", "10", "8", "27", "33", "37", "50", "54", "10", "10")
MyExcelChart.ActiveSheet.Range("B5:k5").Value = Array
("23", "3", "86", "64", "60", "18", "5", "1", "36", "80")
MyExcelChart.ActiveSheet.Cells(3,1).Value="Internet Explorer"
MyExcelChart.ActiveSheet.Cells(4,1).Value="Netscape"
MyExcelChart.ActiveSheet.Cells(5,1).Value="Other"
' Select the contents that need to be in the chart
MyExcelChart.ActiveSheet.Range("b2:k5").Select
' Add the chart
MyExcelChart.Charts.Add
' Format the chart, set type of chart, shape of the bars, show title, get the data for the chart, show
datatable, show legend
MyExcelChart.activechart.ChartType = 97
MyExcelChart.activechart.BarShape =3
MyExcelChart.activechart.HasTitle = True
MyExcelChart.activechart.ChartTitle.Text = "Visitors log for each week shown in browsers percentage"
MyExcelChart.activechart.SetSourceData MyExcelChart.Sheets("Sheet1").Range("A1:k5"),1
MyExcelChart.activechart.Location 1
MyExcelChart.activechart.HasDataTable = True
MyExcelChart.activechart.DataTable.ShowLegendKey = True
' Save the the excelsheet to chart.xls
MyExcelChart.SaveAs "c:\chart.xls"
%>
<HTML>
<HEAD>
<TITLE>MyExcelChart</TITLE>
</HEAD>
<BODY>
</BODY>
</HTML>
2006-4-6 6:56:58 #
shuiziliuvvv
性別 True
加入日期 2005-10-26
QQ號(hào)碼 191081370
郵箱 shuiziliuvvv@163.com
發(fā)帖
回復(fù)
asp實(shí)現(xiàn)在web中顯示電子表格數(shù)據(jù)(一)
顯示數(shù)據(jù)表格的應(yīng)用
在用ASP語(yǔ)言開(kāi)發(fā)的Web數(shù)據(jù)庫(kù)應(yīng)用程序中,ADO (ActiveX Data Objects) 已經(jīng)成為非常流行的工具,而且對(duì)于真正的關(guān)系型數(shù)據(jù)庫(kù),比如Oracle、SQL Server,它都不會(huì)有局限性。ADO能夠存取多種不同的數(shù)據(jù)格式,MS Excel電子數(shù)據(jù)表格就是其中之一。
關(guān)于這個(gè)應(yīng)用
可供下載的例程代碼中包括一個(gè)ASP文件ReadX1.asp,一個(gè)Excel文件TheWorkbook.xls。你也可以另外加入一些電子數(shù)據(jù)表文件。
執(zhí)行ReadXl.asp頁(yè)面,將顯示出可用的電子數(shù)據(jù)表文件列表。選擇好一個(gè)文件,并提交表單后,你將會(huì)看到:
一個(gè)下拉菜單,其中是工作表名稱
一個(gè)下拉菜單,其中是命名的范圍
一個(gè)單元格范圍輸入框
第一個(gè)工作表的全部?jī)?nèi)容
可以選擇工作簿文件中的另外一個(gè)工作表,或者輸入符合Excel格式的單元格范圍數(shù)值,比如:D20:E21 或者 Sheet3!F12:J22。注意:在ADO和ODBC驅(qū)動(dòng)程序中,要用$符合替換分界符號(hào)!。
實(shí)現(xiàn)步驟
現(xiàn)在對(duì)這個(gè)應(yīng)用程序已經(jīng)有了初步的認(rèn)識(shí),下面開(kāi)始討論ASP代碼,看看如何讀取電子數(shù)據(jù)表的數(shù)據(jù),如何找到電子數(shù)據(jù)簿
(workbook)文件中可用的電子數(shù)據(jù)表(worksheet)和范圍,并看看實(shí)現(xiàn)文件列表選擇的技術(shù)。這里假設(shè)你已經(jīng)熟悉了編寫HTML表單的技術(shù),所以對(duì)此不做詳細(xì)介紹。
基本條件
下面將涉及到ADO對(duì)象、方法、屬性、收集和常量。在服務(wù)器上安裝IIS后,ADO就存在了,并且還有相關(guān)文檔,地址是
http://YourServer/IisHelp/ado210.chm (版本2.1),或者
http://YourServer/IisHelp/ado/docs/(老版本1.5)。如果需要升級(jí)ADO,可以從
http://www.microsoft.com/Data/download.htm下載最新版本的MDAC工具包進(jìn)行安裝。
實(shí)現(xiàn)“文件列表選擇”使用到了內(nèi)建的VBScript腳本對(duì)象,相關(guān)文檔可以查看
http://YourServer/IisHelp/vbscript/htm/vbstoc.htm,如果想查看最新的文檔,請(qǐng)?jiān)L問(wèn)
http://msdn.microsoft.com/scripting(版本5)。當(dāng)然,在服務(wù)器端和客戶端,你都不需要安裝MS Excel。
讀取電子數(shù)據(jù)表(Worksheet)數(shù)據(jù)
通過(guò)ADO讀取電子數(shù)據(jù)表與讀取數(shù)據(jù)庫(kù)表的方法基本是一樣的。從下圖可以看到,電子數(shù)據(jù)表的行被稱作記錄Records,列被稱作字段Fields。電子數(shù)據(jù)表或者單元格的范圍可以被看成表Tables,并按照記錄集recordsets進(jìn)行存取。
Spreadsheet Database HTML
< table >
< tr >
< th >NameA< /th >
< th >NameB< /th >
< th >NameC< /th >
< /tr >< tr >
< td >1< /td >
< td >2< /td >
< td >3< /td >
< /tr >< tr >
< td >11< /td >
< td >12< /td >
< td >13< /td >
< /tr >
< /table >
執(zhí)行下面的步驟,從數(shù)據(jù)庫(kù)表中讀取數(shù)據(jù)并顯示:
連接數(shù)據(jù)庫(kù)(同樣:打開(kāi)數(shù)據(jù)簿文件)
讀取記錄集recordset(同樣:讀取一定范圍的單元格)
循環(huán)每一個(gè)記錄(同樣:每一行),經(jīng)過(guò)格式化,顯示
建立ADO連接
在連接數(shù)據(jù)庫(kù)或者打開(kāi)文件前,需要了解一些信息。其中只要是設(shè)置名叫DSN的ODBC驅(qū)動(dòng),但為每一個(gè)數(shù)據(jù)表都建立這樣的ODBC驅(qū)動(dòng),是非常麻煩的,因?yàn)檫@需要在服務(wù)器的控制臺(tái)上通過(guò)“控制面板/ODBC設(shè)置”手工完成。
幸好,ASP提供了替代DSN的其他方法,它可以非常容易地在運(yùn)行時(shí)建立連接。比如,字符串“DRIVER={Microsoft Excel Driver?*.xls)};ReadOnly=1;DBQ=C:dirfile.xls",表示了替代DSN打開(kāi)文件c:dirfile.xls,因此通過(guò)這種方法僅僅需要提供給ASP程序一個(gè)文件名即可。執(zhí)行下面的代碼,將從表單中讀取文件名,然后轉(zhuǎn)換為全路徑,接著生成連接字符串,最后建立并打開(kāi)這個(gè)連接。
vXlFile = Request("XlBook")
vXlFilePath = Server.MapPath(vXlFile) ' assumes file in current directory
vConnString = "DRIVER={Microsoft Excel Driver (*.xls)};ReadOnly=1;DBQ=" & _
vXlFilePath
Set oConn = Server.CreateObject("ADODB.Connection")
oConn.Open vConnString
如果想查看更多的非DSN連接信息,請(qǐng)打開(kāi)Windows或者NT System目錄下的幫助文件Odbcjet.hlp。
讀取記錄集
連接上電子數(shù)據(jù)簿文件后,讀取一定范圍的單元格數(shù)據(jù)就很簡(jiǎn)單了。盡管不是必須的,但還是建議:用符合“[” 和 “]”包含住單元格的范圍定義。只所以這么做,是以防在數(shù)據(jù)庫(kù)的操作中產(chǎn)生非法的符合。
vXlRange = Request("XlRange")
Set ors = oConn.Execute("[" & vXlRange & "]")
執(zhí)行上面的語(yǔ)句,將返回記錄集對(duì)象,其中包括范圍內(nèi)單元格的所有可用信息, 記錄集的數(shù)值和描述數(shù)據(jù)的元數(shù)據(jù)。
給你個(gè)將數(shù)據(jù)從EXCEL導(dǎo)入SQL Server的例子,EXCEL導(dǎo)入ACCESS類似
sub dataIntoSqlServer_ceritificate(strFileName,strSheetName,myConn)
'定義
dim myConnection
dim strName
dim rsXsl,rsSql
dim str_Xsl,str_Sql
dim myConn_Xsl
dim cmd
dim i,j
dim maxId
strName=strFileName
set myConnection=server.createobject("adodb.connection")
set rsXsl=Server.Createobject("ADODB.Recordset")
set rsSql=Server.CreateObject("ADODB.Recordset")
set cmd=Server.CreateObject("ADODB.Command")
cmd.ActiveConnection=myConn
'myConn_Xsl="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strName& ";Extended Properties=Excel 8.0"
myConn_Xsl="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application("ASP_Directory") & "chapter05\database\" & strName & ";Extended Properties=Excel 8.0"
'打開(kāi)連接
myconnection.open myConn_Xsl
'打開(kāi)表
str_Xsl="select * from ["& strSheetName &"$]"
rsXsl.open str_Xsl,myconnection,1,1
j=1
Do While not rsXsl.eof
'取出最大值
str_Sql="select Max(id) as maxId from exceltosql"
rsSql.open str_Sql,myConn,1,3
If Not rsSql.Eof Then
If not isNull(rsSql("maxId")) Then
maxId=Clng(rsSql("maxId"))+1
Else
maxId=1
End if
else
maxId=1
End if
rsSql.close'//關(guān)閉對(duì)象
'加入數(shù)據(jù)庫(kù)
str_Sql=" insert into exceltosql values("&maxId&",'"&rsXsl(1)&"','"&rsXsl(2)&"')"
cmd.CommandText=str_Sql
cmd.Execute()
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
j=j+1
rsXsl.movenext
Loop
response.write "共導(dǎo)入<font color='red'>" & j-1 & "</font>條記錄.<br/>"
response.write "<a href=# onclick='self.close();'>關(guān)閉窗口</a>"
set rsXsl=nothing
set rsSql=nothing
set myconnection=nothing
set cmd=nothing
end sub
下面是調(diào)用導(dǎo)入方法的代碼
file1="C:\excelexample.xls"
myconn=Application("ASP_Chapter05_Con1")'"DRIVER={SQL SERVER};SERVER=(local);uid=sa;pwd=sa;DATABASE=aspbook"
dataIntoSqlServer_ceritificate file1,"sheet1",myconn
=========================================
<%
'On Error Resume Next
'導(dǎo)入Excel電子表格數(shù)據(jù)到SQL Sever數(shù)據(jù)庫(kù) By Dicky 2004-12-27 16:41:12 QQ:25941
Function Open_Conn(SqlDatabaseName,SqlPassword,SqlUsername,SqlLocalName,SqlConn)
'創(chuàng)建數(shù)據(jù)庫(kù)連接對(duì)象并打開(kāi)數(shù)據(jù)庫(kù)連接
Dim ConnStr
SqlUsername = "sa"
SqlPassword = "sa"
SqlDatabaseName = "sztcsc"
SqlLocalName = "(local)"
ConnStr = "Provider = Sqloledb; User ID = " & SqlUsername & "; Password = " & SqlPassword & "; Initial Catalog = " & SqlDatabaseName & "; Data Source = " & SqlLocalName & ";"
Set SqlConn = Server.CreateObject("ADODB.Connection")
SqlConn.Open ConnStr
If Err Then
Err.Clear
Set SqlConn = Nothing
Response.Write "數(shù)據(jù)連接錯(cuò)誤!"
Response.End
End If
End Function
Function Close_Conn(SqlConn)
'關(guān)閉數(shù)據(jù)庫(kù)連接并清除數(shù)據(jù)庫(kù)連接對(duì)象
If IsObject(SqlConn) Then
SqlConn.Close
Set SqlConn = Nothing
End If
End Function
Call Open_Conn("sztcsc","sa","sa","(local)",SqlConn) '打開(kāi)SQL Server數(shù)據(jù)庫(kù)連接
Function Get_EMP_CnName(NTACCNT)
'根據(jù)用戶NT賬號(hào)得到用戶中文名
Dim Sql,Rs
Sql = "Select EMP_CNAME From RF_EMPLOYEE Where EMP_NTACCNT='"&NTACCNT&"'"
Set Rs = Server.CreateObject("Adodb.RecordSet")
Rs.Open Sql,SqlConn,1,1
If Rs.Eof Then
Get_EMP_CnName = ""
Else
Get_EMP_CnName = Rs("EMP_CNAME")
End If
Rs.Close
Set Rs = Nothing
End Function
%>
<html>
<head>
<title>導(dǎo)入Excel電子表格數(shù)據(jù)到SQL Sever數(shù)據(jù)庫(kù)</title>
<body bgcolor="#ACD9AF">
<center><b>導(dǎo)入Excel電子表格數(shù)據(jù)到SQL Sever數(shù)據(jù)庫(kù)</b></center>
<FORM METHOD="POST" name="form1">
請(qǐng)選擇數(shù)據(jù)源: <input type="file" name="File" size="40" title="請(qǐng)選擇需要導(dǎo)出的Excel文件"> <input type=submit name=submit value="開(kāi)始導(dǎo)出">
<br>請(qǐng)選擇目標(biāo)表:
<Select NAME="Table" title="請(qǐng)選擇需要導(dǎo)入數(shù)據(jù)的表">
<option></option>
<% Dim RsSqlDatabaseTable
Set RsSqlDatabaseTable = SqlConn.OpenSchema(20)
Do While Not RsSqlDatabaseTable.Eof %>
<option<%If Trim(Request("Table"))=RsSqlDatabaseTable(2) Then Response.Write " selected"%>><%=RsSqlDatabaseTable(2)%></option>
<% RsSqlDatabaseTable.MoveNext:Loop
Set RsSqlDatabaseTable = Nothing %>
</Select>
</FORM>
<font color=blue>導(dǎo)出過(guò)程中請(qǐng)不要刷新頁(yè)面!</font><br>
<%
If Right(Trim(Request("File")),3) = "xls" Then
Response.Write "<font color=red>您所導(dǎo)出的Excel文件是:"&Trim(Request("File"))&"</font><br>"
End If
'=====================ASP讀取EXCEL注事項(xiàng)=====================================
'i)將Excel97或Excel2000生成的XLS文件(book)看成一個(gè)數(shù)據(jù)庫(kù),其中的每一個(gè)工作表(sheet)看成數(shù)據(jù)庫(kù)表
'ii)ADO假設(shè)Excel中的第一行為字段名.所以你定義的范圍中必須要包括第一行的內(nèi)容
'iii)Excel中的行標(biāo)題(即字段名)不能夠包含數(shù)字. Excel的驅(qū)動(dòng)在遇到這種問(wèn)題時(shí)就會(huì)出錯(cuò)的。例如你的行標(biāo)題名為“F1”
'iiii)如果你的Excel電子表格中某一列同時(shí)包含了文本和數(shù)字的話,那么Excel的ODBC驅(qū)動(dòng)將不能夠正常, 處理這一行的數(shù)據(jù)類型,你必須要保證該列的數(shù)據(jù)類型一致
'E-MAIL:Kaxue@Hotmail.com QQ:484110 HOMEPAGE:www.Flyday.net
'整理時(shí)間:Thursday, May 23, 2002 5:54 PM WIN2000SERVER+IIS5 測(cè)式通過(guò)
'============================================================================
If Trim(Request("File")) = "" Then
Response.Write "<font color=red>對(duì)不起,請(qǐng)選擇需要導(dǎo)出的Excel文件!</font>"
Response.End
ElseIf Right(Trim(Request("File")),3) <> "xls" Then
Response.Write "<font color=red>對(duì)不起,請(qǐng)確定您要導(dǎo)出的是Excel文件!</font>"
Response.End
Else
'列出所選擇的Excel文件中的所有工作表
Dim ExeclFile,objExcelApp,objExcelBook
ExeclFile = Trim(Request("File"))
Set objExcelApp = CreateObject("Excel.Application")
objExcelApp.Quit
objExcelApp.DisplayAlerts = False '不顯示警告
objExcelApp.Application.Visible = False '不顯示界面
objExcelApp.WorkBooks.Open(ExeclFile)
set objExcelBook = objExcelApp.ActiveWorkBook
reDim arrSheets(objExcelBook.Sheets.Count)
For i=1 to objExcelBook.Sheets.Count
arrSheets(i) = objExcelBook.Sheets(i).Name
' Response.Write arrSheets(i)
Next
objExcelApp.Quit
Set objExeclApp = Nothing
'列出所選擇的Excel文件中的所有工作表
End If
Dim Conn,Driver,DBPath,Rs,SqlInsert,SqlDelete
'建立Connection對(duì)象
Set Conn = Server.CreateObject("ADODB.Connection")
Driver = "Driver={Microsoft Excel Driver (*.xls)};"
'DBPath = "DBQ=" & Server.MapPath( "HRB.xls" )
DBPath = "DBQ=" & Trim(Request("File"))
'調(diào)用Open 方法打開(kāi)數(shù)據(jù)庫(kù)
Conn.Open Driver & DBPath
'DSN連接方式
'Conn.Open "Dsn=test"
'注意 表名一定要以下邊這種格式 "[表名$]" 書寫
For i = 1 To UBound(arrSheets)'開(kāi)始循環(huán)所有工作表
Sql = "Select * FROM ["& arrSheets(i) &"$] "
Set Rs = Conn.Execute(Sql)
If Rs.Eof And Rs.Bof Then
Response.write "沒(méi)有找到您需要的數(shù)據(jù)!!<br>"
Else
' Response.Write "<font color=blue>工作表:</font><font color=green>"&arrSheets(i)&"</font><br>"
Do While Not Rs.Eof
SqlInsert = "Insert Into "&Trim(Request("Table"))&" (EDG_Project_Name,EDG_Project_No,EDG_Project_VM,EDG_Project_VM_CnName,EDG_Project_M,EDG_Project_M_CnName,EDG_Project_Director,EDG_Project_Director_CnName) Values ('"&Trim(Rs(0))&"','"&Trim(Rs(1))&"','"&Trim(Rs(2))&"','"&Trim(Rs(2))&"("&Get_EMP_CnName(Trim(Rs(2)))&")"&"','"&Trim(Rs(3))&"','"&Trim(Rs(3))&"("&Get_EMP_CnName(Trim(Rs(3)))&")"&"','"&Trim(Rs(4))&"','"&Trim(Rs(4))&"("&Get_EMP_CnName(Trim(Rs(4)))&")"&"')"
'此處插入的值根據(jù)實(shí)際數(shù)據(jù)庫(kù)結(jié)構(gòu)進(jìn)行調(diào)整
SqlConn.Execute(SqlInsert)'插入Excel表格裏所有東東
Rs.MoveNext
Loop
Response.Write "<font color=red>恭喜,成功導(dǎo)出Excel文件中工作表[</font><font color=blue>"&arrSheets(i)&"</font><font color=red>]的數(shù)據(jù)到SQL Server數(shù)據(jù)表[<font color=blue>"&Trim(Request("Table"))&"</font>]中!^_^</font><br>"
End If
Rs.Close
Set Rs = Nothing
Next'循環(huán)所有工作表結(jié)束
Call Close_Conn(Conn) '關(guān)閉Excel數(shù)據(jù)庫(kù)連接
Call Close_Conn(SqlConn) '關(guān)閉SQL Server數(shù)據(jù)庫(kù)連接 %>
</body>
</html>
======================================================
<%
On Error Resume Next
''導(dǎo)入Excel電子表格數(shù)據(jù)到SQL Sever數(shù)據(jù)庫(kù) By Dicky 2004-12-27 16:41:12
Function Open_Conn(SqlDatabaseName,SqlPassword,SqlUsername,SqlLocalName,SqlConn)
''創(chuàng)建數(shù)據(jù)庫(kù)連接對(duì)象并打開(kāi)數(shù)據(jù)庫(kù)連接
Dim ConnStr
''SQL Server數(shù)據(jù)庫(kù)連接參數(shù):數(shù)據(jù)庫(kù)名、用戶密碼、用戶名、連接名(本地用local,外地用IP)
ConnStr = "Provider=Sqloledb; User ID=" & SqlUsername & "; Password=" & SqlPassword & "; Initial Catalog = " & SqlDatabaseName & "; Data Source=" & SqlLocalName & ";"
Set SqlConn = Server.CreateObject("ADODB.Connection")
SqlConn.Open ConnStr
If Err Then
Err.Clear
Set SqlConn = Nothing
Response.Write "數(shù)據(jù)連接錯(cuò)誤!"
Response.End
End If
End Function
Function Close_Conn(SqlConn)
''關(guān)閉數(shù)據(jù)庫(kù)連接并清除數(shù)據(jù)庫(kù)連接對(duì)象
If IsObject(SqlConn) Then
SqlConn.Close
Set SqlConn = Nothing
End If
End Function
Call Open_Conn("xformdemo","sa","sa","(local)",SqlConn) ''打開(kāi)本地SQL Server數(shù)據(jù)庫(kù)連接
'Call Open_Conn("xformdemo","","sa","ssh03",SqlConn1) ''打開(kāi)遠(yuǎn)程SQL Server數(shù)據(jù)庫(kù)連接
Function Get_EMP_CnName(NTACCNT)
''根據(jù)用戶NT賬號(hào)得到用戶中文名
Dim Sql1,Rs1
Sql1 = "Select * From C_DEPT Where EMP_NTACCNT=''"&NTACCNT&"''"
Set Rs1 = Server.CreateObject("Adodb.RecordSet")
Rs1.Open Sql1,SqlConn1,1,1
If Rs1.Eof Then
Get_EMP_CnName = ""
Else
Get_EMP_CnName = Rs1("EMP_CNAME")
End If
Rs1.Close
Set Rs1 = Nothing
End Function %>
<html>
<head>
<title>導(dǎo)入Excel電子表格數(shù)據(jù)到SQL Sever數(shù)據(jù)庫(kù)</title>
<body bgcolor="#ACD9AF">
<center><b>導(dǎo)入Excel電子表格數(shù)據(jù)到SQL Sever數(shù)據(jù)庫(kù)</b></center>
<FORM METHOD="POST" name="form1">
請(qǐng)選擇數(shù)據(jù)源(本地庫(kù)):
<Select NAME="Table" title="請(qǐng)選擇需要導(dǎo)入數(shù)據(jù)的表">
<option></option>
<% Dim RsSqlDatabaseTable
Set RsSqlDatabaseTable = SqlConn.OpenSchema(20)
Do While Not RsSqlDatabaseTable.Eof %>
<option<%If Trim(Request("Table"))=RsSqlDatabaseTable(2) Then Response.Write " selected"%>><%=RsSqlDatabaseTable(2)%></option>
<% RsSqlDatabaseTable.MoveNext:Loop
Set RsSqlDatabaseTable = Nothing %>
</Select><input type=submit name=submit value="開(kāi)始導(dǎo)出">
<br>請(qǐng)選擇目標(biāo)表(遠(yuǎn)程庫(kù)):
<Select NAME="Table1" title="請(qǐng)選擇需要導(dǎo)入數(shù)據(jù)的表">
<option></option>
<% Dim RsSqlDatabaseTable1
Set RsSqlDatabaseTable1 = SqlConn1.OpenSchema(20)
Do While Not RsSqlDatabaseTable1.Eof %>
<option<%If Trim(Request("Table1"))=RsSqlDatabaseTable1(2) Then Response.Write " selected"%>><%=RsSqlDatabaseTable1(2)%></option>
<% RsSqlDatabaseTable1.MoveNext:Loop
Set RsSqlDatabaseTable1 = Nothing %>
</Select>
</FORM>
<font color=blue>導(dǎo)出過(guò)程中請(qǐng)不要刷新頁(yè)面!</font><br>
<%
If Trim(Request("Table1")) <> "" Then
Dim Sql,Rs
Sql = "Select * From Sheet1$" ''Sheet1$是我們實(shí)現(xiàn)用SQL Server自身數(shù)據(jù)轉(zhuǎn)換功能得到的表名
Set Rs = SqlConn.Execute(Sql)
If Rs.Eof And Rs.Bof Then
Response.write "沒(méi)有找到您需要的數(shù)據(jù)!!<br>"
Else
Do While Not Rs.Eof
SqlInsert = "Insert Into "&Trim(Request("Table1"))&" (EDG_Project_Name,EDG_Project_No,EDG_Project_VM,EDG_Project_VM_CnName,EDG_Project_M,EDG_Project_M_CnName,EDG_Project_Director,EDG_Project_Director_CnName) Values (''"&Trim(Rs("工程名稱"))&"'',''"&Trim(Rs("工程編號(hào)"))&"'',''"&Trim(Rs("項(xiàng)目副理"))&"'',''"&Trim(Rs("項(xiàng)目副理"))&"("&Get_EMP_CnName(Trim(Rs("項(xiàng)目副理")))&")"&"'',''"&Trim(Rs("項(xiàng)目經(jīng)理"))&"'',''"&Trim(Rs("項(xiàng)目經(jīng)理"))&"("&Get_EMP_CnName(Trim(Rs("項(xiàng)目經(jīng)理")))&")"&"'',''"&Trim(Rs("項(xiàng)目總監(jiān)"))&"'',''"&Trim(Rs("項(xiàng)目總監(jiān)"))&"("&Get_EMP_CnName(Trim(Rs("項(xiàng)目總監(jiān)")))&")"&"'')"
'' Response.Write SqlInsert
''此處插入的值根據(jù)實(shí)際數(shù)據(jù)庫(kù)結(jié)構(gòu)進(jìn)行調(diào)整
SqlConn1.Execute(SqlInsert)''插入Excel表格裏所有東東
Rs.MoveNext
Loop
Response.Write "<font color=red>恭喜,成功導(dǎo)出數(shù)據(jù)!^_^</font><br>"
End If
Rs.Close
Set Rs = Nothing
End If
Call Close_Conn(SqlConn) ''關(guān)閉Excel數(shù)據(jù)庫(kù)連接
Call Close_Conn(SqlConn1) ''關(guān)閉SQL Server數(shù)據(jù)庫(kù)連接 %>
</body>
</html>
============================================================
導(dǎo)出excel文件
<%
Response.Clear
Response.ContentType = "text/xls"
Response.AddHeader "content-disposition", "attachment; filename=export.xls" 'filename導(dǎo)出的文件名
'點(diǎn)導(dǎo)出按鈕后事件
Response.Write "文件編號(hào)"&chr(9)&"文件名稱"&chr(9)&"文件版次"&chr(9)&"發(fā)起時(shí)間"&chr(9)&"生效時(shí)間"&chr(13)
'導(dǎo)出時(shí)
set conn=server.createobject("adodb.connection")
conn.open "Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=xformdemo;Data Source=127.0.0.1"
SQL="Select * FROM c_dept"
Set rs=conn.execute(SQL)
'STOP
total=rs.fields.count '總共的列數(shù)
'response.write total
while not rs.eof
i=0
while i<cint(total)
Data=Data&rs(i)&chr(9)
i=i+1
wend
Response.Write Data&chr(13)
Data=""
rs.moveNext
wend
rs.close
conn.close
Response.Flush
Response.End
%>
=================================================================================
說(shuō)明:復(fù)制表(只復(fù)制結(jié)構(gòu),源表名:a 新表名:b)
SQL: select * into b from a where 1<>1
說(shuō)明:拷貝表(拷貝數(shù)據(jù),源表名:a 目標(biāo)表名:b)
SQL: insert into b(a, b, c) select d,e,f from b;
說(shuō)明:顯示文章、提交人和最后回復(fù)時(shí)間
SQL: select a.title,a.username,b.adddate from table a,(select max(adddate) adddate
from table where table.title=a.title) b
說(shuō)明:外連接查詢(表名1:a 表名2:b)
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
首先引用Imports system.IO
'創(chuàng)建文件夾
Public Sub CreateName()
N = 0
Dim Path As String = "\\" & getIniNode(Application.StartupPath &
"\system\Gardman.cfg", "ServerName")
StrEmail = Path & "\" & "Email文件存儲(chǔ)"
Try
'根據(jù)啟動(dòng)目錄建立一個(gè)Directoryinfo對(duì)象
Dim MyDirectoryInfo As New DirectoryInfo(StrEmail)
MyDirectoryInfo.CreateSubdirectory(CboInputDate.Value) '創(chuàng)建一個(gè)它的子目錄
StrEmail = StrEmail & "\" & CboInputDate.Value
&n
創(chuàng)建表名中字段的約束2006年07月19日 星期三 01:36在一個(gè)表中,要限制一個(gè)字段只能擁有幾個(gè)值的方
法.
在表結(jié)構(gòu)設(shè)計(jì)中選中CHECK約束:點(diǎn)新建,約束名可以自己取,只要符合命名規(guī)則即可。
假設(shè)要設(shè)置QCType這個(gè)列只能默認(rèn)的幾個(gè)選項(xiàng):設(shè)置方法可以如下:
([QCType] is null or ([QCType] = 'Other' or ([QCType] = 'Fittings' or [QCType] = 'Amount')))
相當(dāng)于這個(gè)列可以為空,或者可以為Other(其他)或者為Fittings(配件)或Amount(金額)這幾個(gè)選項(xiàng),其
它選項(xiàng),輸入進(jìn)去,將提示相關(guān)的錯(cuò)誤信息。
Sql Server實(shí)用操作小技巧集合
包括安裝時(shí)提示有掛起的操作、收縮數(shù)據(jù)庫(kù)、壓縮數(shù)據(jù)庫(kù)、轉(zhuǎn)移數(shù)據(jù)庫(kù)給新用戶以已存在用戶權(quán)限、檢查
備份集、修復(fù)數(shù)據(jù)庫(kù)等
(一)掛起操作
在安裝Sql或sp補(bǔ)丁的時(shí)候系統(tǒng)提示之前有掛起的安裝操作,要求重啟,這里往往重啟無(wú)用,解決辦法:
到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager
刪除PendingFileRenameOperations
(二)收縮數(shù)據(jù)庫(kù)
--重建索引
DBCC REINDEX
DBCC INDEXDEFRAG
--收縮數(shù)據(jù)和日志
DBCC SHRINKDB
DBCC SHRINKFILE
(三)壓縮數(shù)據(jù)庫(kù)
dbcc shrinkdatabase(dbname)
(四)轉(zhuǎn)移數(shù)據(jù)庫(kù)給新用戶以已存在用戶權(quán)限
exec sp_change_users_login 'update_one','newname','oldname'
go
(五)檢查備份集
RESTORE VERIFYONLY from disk='E:\dvbbs.bak'
(六)修復(fù)數(shù)據(jù)庫(kù)
Alter DATABASE [dvbbs] SET SINGLE_USER
GO
DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK
GO
Alter DATABASE [dvbbs] SET MULTI_USER
GO
COMPUTE BY 子句使您得以用同一 Select 語(yǔ)句既查看明細(xì)行,又查看匯總行??梢杂?jì)算子組的匯總值,
也可以計(jì)算整個(gè)結(jié)果集的匯總值。
COMPUTE 子句需要下列信息:
可選的 BY 關(guān)鍵字,該關(guān)鍵字可按對(duì)一列計(jì)算指定的行聚合。
行聚合函數(shù)名稱;例如,SUM、AVG、MIN、MAX 或 COUNT。
要對(duì)其執(zhí)行行聚合函數(shù)的列。
COMPUTE 生成的結(jié)果集
COMPUTE 所生成的匯總值在查詢結(jié)果中顯示為分離的結(jié)果集。包括 COMPUTE 子句的查詢的結(jié)果類似于控
制中斷報(bào)表,即匯總值由指定的組(或
稱中斷)控制的報(bào)表??梢詾楦鹘M生成匯總值,也可以對(duì)同一組計(jì)算多個(gè)聚合函數(shù)。
當(dāng) COMPUTE 帶有可選的 BY 子句時(shí),符合 Select 條件的每個(gè)組都有兩個(gè)結(jié)果集:
每個(gè)組的第一個(gè)結(jié)果集是明細(xì)行集,其中包含該組的選擇列表信息。
每個(gè)組的第二個(gè)結(jié)果集有一行,其中包含該組的 COMPUTE 子句中所指定的聚合函數(shù)的小計(jì)。
當(dāng) COMPUTE 不帶可選的 BY 子句時(shí),Select 語(yǔ)句有兩個(gè)結(jié)果集:
每個(gè)組的第一個(gè)結(jié)果集是包含選擇列表信息的所有明細(xì)行。
第二個(gè)結(jié)果集有一行,其中包含 C
使SQL數(shù)據(jù)庫(kù)日志1G多收縮成幾兆的過(guò)程2006年07月19日 星期三 01:25首先在您要收縮的數(shù)據(jù)庫(kù)中,進(jìn)去
查詢分析器:
輸入如下代碼:DUMP TRANSACTION [db_name] WITH NO_LOG [db_name]:數(shù)據(jù)庫(kù)的名稱
然后用“收縮數(shù)據(jù)庫(kù)”工具將刪除后留下的空白空間收回。具體如下操作:
然后選中要收縮的數(shù)據(jù)庫(kù),右擊所有任務(wù),再點(diǎn)收縮數(shù)據(jù)庫(kù)。會(huì)彈出一個(gè)窗口,點(diǎn)擊收縮文件下面的一個(gè)
文件按鈕,在下拉框中,選擇數(shù)據(jù)庫(kù)名稱_Log的文件,在收縮操作中,選擇第四個(gè)按鈕,看它最小值能小
的那個(gè)值,你就填那個(gè)最小的值,接著點(diǎn)確定即可。