我知道问题挺弱的
刚转PB,现在要做个小东西,选择一个EXCEL文件,显示在数据窗口中,然后导入SQL SERVER,这个帖子我看了
http://topic.csdn.net/t/20040823/15/3301373.html
我放了一个DATA WINDOW控件,然后我就是不知道怎么整DATA WINDOW对象,选择一个GRID,然后呢?跟SQL应该没什么关系啊?
[解决办法]
你首先要有数据库才能导入啊 控件连接到相应的表,然后再操作
[解决办法]
也可以分,你也可以使用外部源,—W象的候external
[解决办法]
oleobject lole_import
datastore lds_head
lole_import = create oleobject
lole_import.ConnectToNewObject("excel.application")
lole_import.Workbooks.Open(is_filename)
lole_import.workbooks(1).worksheets(1).cells.copy()
lds_head.importclipboard(text!,1,19,2,2)
lole_import.workbooks.close()
lole_import.quit()
[解决办法]
1.因为,你要将excel中数据存入sql server一表中,所以你应该首先建一数据窗口,选择sql server中的目标表为数据源,用以写入数据。
2. 获取excel文件中数据,方法有两种,5楼讲的是一种,ole+模板。另外有一种,就是直接把excel文件作为数据源,简单讲就是直接视其为数据库,
ls_tran = Create gs_tran
ls_tran.DBMS = "OLE DB "
ls_tran.AutoCommit = False
ls_tran.DBParm = "PROVIDER= 'Microsoft.ACE.OLEDB.12.0',DATASOURCE= '" + filepath + "',PROVIDERSTRING= 'Excel 12.0';HDR=YES;IMEX=1;MAXSCANROWS=0;"
connect using ls_tran;
ls_sql = 'select * from [sheet1$]' //sheet视为数据表
ls_syntax = ls_tran.syntaxfromsql(ls_sql,'',ls_error)
上述模式可以直接动态创建数据窗口,如果你仅仅是需要显示数据(对美观程度要求不高),那么直接用动态创建的数据窗口即可,省掉用ole对象用模板的麻烦。
另外说一句,连接驱动使用OLE,odbc都可以,但悲催的是微软自己的驱动居然有bug,我擦:
A.如果用ODBC,取数据时只扫描excel文件的前8行,以判断该列的数据类型。如果恰巧有一列字符型,偏偏前8行都是数字字符,那么这一列会被判定为数值类型,非数值类型会被抛弃,会导致数据丢失。
B.如果用OLE DB呢,可以指定扫描的行数,比如扫描所有行,那样就不会有这个问题,但是,OLE DB不能正确的获取excel表中时间类型,如果碰到时间类型的列,该列获取不到。
不知道你以前做什么的,如果是.net 的,微软的这个延续了十年以上的BUG应该有知道吧。
那现在呢,excel表中的数据你已经取到程序中了,具体的说就是一个datawindow或datastore中,你从这个datawindow中取数据,写入数据源为sql server表的datawindow中,然后update()连接sql server的datawindow,再commit,你的任务就完成了。
闪人了,兄弟凑合着看吧,有不懂得地方,多翻翻书。datawindow这个东西实在是好啊,慢慢学习吧。