?? bcjq022.txt
字號:
C++ Builder開發者:程序員之家
var how_many_ads = 3;
var now = new Date()
var sec = now.getSeconds()
var ad = sec % how_many_ads;
ad +=1;
首頁
| 控件天堂 | 控件使用
| 編程技巧
| 源代碼 | 編程工具 |
系統補丁 | 電子書籍 | 技術論壇
| 相關鏈接
if (ad==1) {document.write(''+'');}
if (ad==2) {document.write(''+'');}
if (ad==3) {document.write(''+'');}
var marqueecontents=''+scroll_text+''
if (document.all)
document.write(''+marqueecontents+'')
function regenerate(){
window.location.reload()
}
function regenerate2(){
if (document.layers){
setTimeout("window.onresize=regenerate",450)
intializemarquee()
}
}
function intializemarquee(){
document.cmarquee01.document.cmarquee02.document.write(marqueecontents)
document.cmarquee01.document.cmarquee02.document.close()
thelength=document.cmarquee01.document.cmarquee02.document.height
scrollit()
}
function scrollit(){
if (document.cmarquee01.document.cmarquee02.top>=thelength*(-1)){
document.cmarquee01.document.cmarquee02.top-=speed
setTimeout("scrollit()",100)
}
else{
document.cmarquee01.document.cmarquee02.top=marqueeheight
scrollit()
}
}
window.onload=regenerate2
當前位置
:
編程技巧
用C++Builder存取Excel
----
C++Builder是Borland公司繼Delphi之后又一成功的產品,她集VB、VC++
及 Delphi 的優點于一體而深得C語言愛好者的青睞。由于多數操作者愛用
MicroSoft公司的Excel組織數據,為此本文介紹了用C++Builder存取Excel
文件的兩種方法。
---- 一.用OLE技術操縱Excel
---- OLE(對象鏈接與嵌入)是微軟提出的標準,是應用程序間交換數據、相互操作的一種方式,MS
OFFICE 提供了很強的 OLE 服務功能,VB、Delphi 及C++Builder等語言都可以以客戶方式向Excel提交命令,以存取其數據,其中VB和Delphi最為簡單,在語法上就采用類VBA的語句,本報九九年第48期的《在Delphi中操作Excel》一文曾介紹了Delphi的做法。我們原以為C++Builder照搬Delphi,結果語法編譯都未能通過,查不到這方面具體介紹的資料。經反復試驗方知:原來C++Builder采用間接的辦法,利用變體類Variant所提供的四個“方法”向OLE服務程序提交操縱命令:
Variant Variant::OlePropertyGet(屬性名,參數….);
// 取對象屬性
Void Variant::OlePropertySet(屬性名,參數….);
// 設置對象屬性
Variant Variant::OleFunction(函數名,參數….);
// 運行對象的函數
void Variant::OleProcedure(過程名,參數….);
// 運行對象的過程
其頭文件“vcl\utilcls.h”必須嵌在用戶程序中,
對于這四個長長的方法名可在程序中用宏語句重新定義一下:
#define PG OlePropertyGet
#define PS OlePropertySet
#define FN OleFunction
#define PR OleProcedure
例如對于VB的提交語句:
Ex.ActiveWorkBook.ActiveSheet.Cells(1,2).Value=3
為便于理解在C++Builder對應的語句可分解為如下四句:
Variant t1=Ex.OlePropertyGet("ActiveWorkBook");
Variant t2=t1.OlePropertyGet("ActiveSheet");
Variant t3=t2.OlePropertyGet("Cells,1,2);
t3.OlePropertySet("Value",3);
可去掉中間變量將這四句合為一句,就是:
Ex.PG("ActiveWorkBook").PG("ActiveSheet").
PG("Cells",1,2).PS("Value",3);
我們將下面的VB程序片段改成對應的C++Builder程序以供參考:
Private Sub Command1_Click() ' Visual Basic程序片段
Dim Ex As Object,Wb As Object, Sh1 As Object
Set Ex = CreateObject("Excel.Application")
Ex.WorkBooks.Open("c:\book1.xls")
Set Wb = Ex.Activeworkbook
Set Sh1 = Wb.ActiveSheet
Text1.Text = Sh1.Cells(1, 1).Value
For i = 1 To 10: For j = 1 To 10
Sh1.Cells(i, j).Value = i * 100 + j
Next j: Next i
Wb.save: Wb.Close: Ex.Quit
End Sub ' - - - - - -- - - - - - - - - - -
#include "Unit1.h" // C++Builder程序片段
#include "vcl\utilcls.h" // util classes實用類說明
// …省寫此處原一段代碼
// 請在此處插入上面提及的四個宏定義語句
void __fastcall TForm1::Button1Click(TObject *Sender)
{ Variant Ex,Wb,Sh1;
Ex=Variant::CreateObject("Excel.Application");
Ex.PG("WorkBooks").PR("Open","c:\\book1.xls");
Wb=Ex.PG("ActiveWorkBook");
Sh1=Wb.PG("ActiveSheet");
Edit1->Text=Sh1.PG("Cells",1,1).PG("Value");
for (int i=1;i<=10;i++)
for (int j=1;j<=10;j++)
Sh1.PG("Cells",i,j).PS("Value",i*100+j);
Wb.PR("Save"); Wb.PR("Close");
}
----
使用這種方法的程序運行時,必須保證系統中同時有MS
OFFICE;下面我們再介紹另一種脫離MS OFFICE也能存取Excel表格的方法。
---- 二.用ODBC數據庫技術存取Excel
---- ODBC就是開放式數據庫鏈接標準,不同種類的數據庫只需提供各自的ODBC
驅動程序就可按相同的命令操縱,微軟同樣為Excel提供了ODBC驅動程序,我們可在程序中象數據庫一樣存取Excel表格。定義好ODBC數據源后,實際試驗中并沒有如想象的那樣簡單,在控件Table的屬性TableName中總是檢索不到表名,同樣也沒有相關的資料可供查閱。通過對Excel的分析,終于發現了問題的關鍵所在:ODBC的表名并不就是Excel的工作表名(如Sheet1),在Excel
表格中必須對要求操作的行列區域定義一個“名稱”作為數據庫的表名,該區域的首行各列必須是字段名(否則首行數據會當成字段名),可以定義多個表名。具體操作步驟如下:
---- 1.在Excel上定義“表名”:
---- 運行Excel程序,打開或新建一表格,按下鼠標左鍵選擇一片區域(起始行先填上字段名),再將鼠標位置點到左上角的地址欄,輸入一表名如ABC,或者在菜單上選:“插入(I)”-“名稱(N)”-“定義(D)”,再輸入表名(若已定義,
可在此處刪除掉),存盤退出(假定文件名取為c:\Book.xls),若嫌字段名行多余,存盤前可隱藏掉;
---- 2.定義ODBC數據源:
---- 從Windows桌面“我的電腦"進入“控制面板”,雙擊“32位ODBC”圖標,運行“用戶DSN”中的“添加(D)"后選“Excel
Driver(*.xls)", 再點“完成”便彈出對話框,在“數據源名(N)"右邊填一名稱,如:excel01,在“版本(V)"上選“Excel97",
點中“選項”取消“只讀”,在“選定工作目錄”中,選定Excel文件名(本例
c:\Book1.xls),再點“確定”直至退出;
---- 3.設置Database控件避免登錄檢查:
---- 運行C++Builder,在Form1中加上Data Access的三個控件:Database1、
DataSource1、Table1,加入Database1的目的是為了避免打開數據庫時出現登錄框,為此雙擊此控件彈出一對話框,在Alias
name中選ODBC數據源名(本例為Excel01),在Name中填上一新的別名(本例取Excel02),再點“Defaults”
出現一批參數缺省值,最后取消Options中的兩項“Login
prompt"與"Keep inactive connect”,點OK退出;
---- 4.設置其它控件屬性:
---- 將Table1的屬性DatabaseName選為步驟3中的新別名Excel02,再將另一屬性TableName選為步驟1的表名(本例為ABC);將控件DataSource1的屬性
DataSet選為Table1;雙擊Form1,在FormCreate事件子程序內加上一句
Table1- >Open( );
---- 5.查看數據庫內容:
---- 為了直接看到Excel數據,在Form1中再加上Data
Controls的控件DBGrid1 和DBNavigator1,將兩者的屬性DataSource都選為DataSource1,雙擊Table1
的屬性Active將值改為true,等待數秒就可看到DBGrid1中出現數據,最后恢復Tabel1-
>Active為false;
---- 注意:程序編譯前,必須將剛打開的表關閉,即:使Table1-
>Active為false, 否則程序運行時報告出錯,因為Excel表總是被ODBC以“獨占”方式打開;
---- 我們使用的是C++ Builder 4.0專業版,電子表格為Excel
97
if (ad==1) {document.write(''+'');}
if (ad==2) {document.write(''+'');}
if (ad==3) {document.write(''+'');}
C++ Builder開發者®
2000年06月01日 站長:唐朝
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
www.一区二区|
国内精品免费**视频|
亚洲欧洲日韩女同|
日韩免费性生活视频播放|
欧美日韩精品欧美日韩精品一|
北岛玲一区二区三区四区|
成人一区在线看|
国产传媒欧美日韩成人|
国产精品一级黄|
国产精品一区在线观看你懂的|
韩国精品主播一区二区在线观看|
久久精品二区亚洲w码|
看电视剧不卡顿的网站|
另类的小说在线视频另类成人小视频在线|
日本视频免费一区|
毛片基地黄久久久久久天堂|
国产激情一区二区三区四区|
成人国产视频在线观看|
色婷婷精品大在线视频|
欧美视频精品在线观看|
欧美一区二区视频观看视频|
26uuu精品一区二区|
中文字幕在线不卡视频|
亚洲成人一二三|
国产一区在线观看视频|
成人高清视频在线观看|
欧美日韩成人在线一区|
精品国产第一区二区三区观看体验|
欧美一区二区三区白人|
欧美精品一区二区三|
国产精品久久久久久久久免费丝袜
|
日韩av午夜在线观看|
国产精品一区二区免费不卡
|
99国产一区二区三精品乱码|
欧美在线视频不卡|
久久久久国产精品免费免费搜索|
亚洲欧美中日韩|
日本不卡高清视频|
成人av电影在线观看|
欧美猛男gaygay网站|
欧美国产日韩一二三区|
亚洲mv在线观看|
成人激情开心网|
91精品国产aⅴ一区二区|
欧美—级在线免费片|
亚洲成av人**亚洲成av**|
国产在线精品一区二区|
欧美日韩一区三区四区|
亚洲bt欧美bt精品777|
九色porny丨国产精品|
日本精品视频一区二区|
精品国产三级电影在线观看|
亚洲一二三专区|
成人h动漫精品一区二|
91精品国产欧美一区二区18
|
不卡欧美aaaaa|
精品久久久久香蕉网|
亚洲国产精品一区二区尤物区|
国产电影一区在线|
日韩一卡二卡三卡四卡|
亚洲婷婷在线视频|
国产成人免费视频一区|
精品嫩草影院久久|
天天色天天爱天天射综合|
91尤物视频在线观看|
欧美精彩视频一区二区三区|
午夜欧美大尺度福利影院在线看|
亚洲欧美电影一区二区|
成人黄色大片在线观看|
欧美久久久久久蜜桃|
亚洲欧美怡红院|
丁香六月综合激情|
欧美α欧美αv大片|
午夜激情一区二区三区|
欧洲精品中文字幕|
亚洲人成网站在线|
av不卡免费在线观看|
国产精品污www在线观看|
国产一区二区影院|
久久综合久久综合久久综合|
黄色日韩三级电影|
精品国产91乱码一区二区三区|
天堂久久久久va久久久久|
欧美日韩在线播放|
三级不卡在线观看|
日韩一区二区免费高清|
免费欧美在线视频|
精品免费视频.|
国产精品 欧美精品|
国产精品国产精品国产专区不片|
成人综合在线视频|
亚洲欧美综合色|
欧美在线制服丝袜|
日韩黄色片在线观看|
日韩午夜激情免费电影|
国产一区二区三区四区五区入口|
久久久不卡网国产精品二区|
99精品国产热久久91蜜凸|
亚洲最新在线观看|
日韩一区二区免费在线电影
|
欧美日韩国产一二三|
亚洲mv在线观看|
91精品国产综合久久蜜臀|
另类成人小视频在线|
国产日韩视频一区二区三区|
色视频成人在线观看免|
爽爽淫人综合网网站|
久久综合久久鬼色|
99久久99久久精品国产片果冻|
亚洲成人资源在线|
国产网站一区二区三区|
欧美在线|欧美|
国产一区二区在线看|
亚洲欧美日韩国产成人精品影院|
欧美精品三级日韩久久|
国产精选一区二区三区|
亚洲欧美日韩国产中文在线|
51精品国自产在线|
成人黄页毛片网站|
日本系列欧美系列|
国产精品国产三级国产普通话99
|
欧美日韩一区二区三区高清|
久99久精品视频免费观看|
亚洲色图视频网|
欧美一个色资源|
色婷婷精品大视频在线蜜桃视频|
久久激五月天综合精品|
亚洲精品成人少妇|
久久久美女艺术照精彩视频福利播放|
色一区在线观看|
国产高清不卡一区二区|
蜜桃视频在线观看一区二区|
亚洲精品国产a久久久久久|
久久蜜桃av一区二区天堂|
欧美欧美午夜aⅴ在线观看|
99精品1区2区|
国产一区二区免费看|
亚洲二区视频在线|
亚洲九九爱视频|
中文字幕av一区 二区|
日韩免费性生活视频播放|
欧美剧情电影在线观看完整版免费励志电影
|
欧美亚洲另类激情小说|
成人免费视频caoporn|
精彩视频一区二区三区|
亚洲第一二三四区|
樱桃国产成人精品视频|
国产精品久久久久影院亚瑟|
国产精品无码永久免费888|
26uuu精品一区二区三区四区在线|
欧美一区二区三区的|
欧美精三区欧美精三区|
欧美日韩精品福利|
欧美午夜精品免费|
欧美精品一区二区久久婷婷|
日韩一级片在线播放|
欧美日韩色综合|
6080国产精品一区二区|
欧美高清视频一二三区
|
精品欧美乱码久久久久久|
欧美一区二区三区不卡|
欧美二区三区的天堂|
91精品国产综合久久精品性色|
欧美疯狂做受xxxx富婆|
欧美一区日本一区韩国一区|
337p亚洲精品色噜噜狠狠|
91精品国产欧美一区二区18|
日韩女同互慰一区二区|
久久久噜噜噜久久中文字幕色伊伊|
日韩欧美国产小视频|
精品日韩在线观看|
国产日韩精品一区二区三区|
国产精品初高中害羞小美女文|
亚洲日本乱码在线观看|
亚洲一区二区三区在线看|
日韩精品1区2区3区|
国产黑丝在线一区二区三区|
成人av集中营|
欧美日韩电影一区|
久久免费偷拍视频|
亚洲人午夜精品天堂一二香蕉|
亚洲电影在线播放|
国精产品一区一区三区mba视频
|
亚洲一二三专区|
蜜桃av一区二区在线观看
|
国产三级三级三级精品8ⅰ区|
自拍偷自拍亚洲精品播放|
五月天久久比比资源色|
国产经典欧美精品|
91黄视频在线|
久久日一线二线三线suv|
成人欧美一区二区三区黑人麻豆|
天堂久久一区二区三区|
国产精品1区二区.|
欧美视频一区二|
国产精品色一区二区三区|
天堂久久久久va久久久久|
国产不卡一区视频|
在线不卡免费欧美|
欧美国产精品劲爆|