我知道问题挺弱的

yinrenzhuyidemingzi 2012-03-08 12:57:16
刚转PB,现在要做个小东西,选择一个EXCEL文件,显示在数据窗口中,然后导入SQL SERVER,这个帖子我看了
http://topic.csdn.net/t/20040823/15/3301373.html
我放了一个DATA WINDOW控件,然后我就是不知道怎么整DATA WINDOW对象,选择一个GRID,然后呢?跟SQL应该没什么关系啊?
...全文
143 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
以前做DELPHI
sjlion 2012-03-08
  • 打赏
  • 举报
回复
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这个东西实在是好啊,慢慢学习吧。
xiedongdong88 2012-03-08
  • 打赏
  • 举报
回复
DataWindow 要連接到數據庫中的表。。。
zlf19810306 2012-03-08
  • 打赏
  • 举报
回复
ole对象操作excel就行了,这里只写个简单的列子,复杂的就要去找个vba的文档看看,里面excel的对象都有详细说明。
zlf19810306 2012-03-08
  • 打赏
  • 举报
回复
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()
baiynije 2012-03-08
  • 打赏
  • 举报
回复
也可以分離,你也可以使用外部數據源,建DW對象的時候選擇external
  • 打赏
  • 举报
回复
就是在DW中说显示和表的建立不是分离的
  • 打赏
  • 举报
回复
你是说必须先建好表,然后才能显示在DW中?
bingyan123456 2012-03-08
  • 打赏
  • 举报
回复
你首先要有数据库才能导入啊 控件连接到相应的表,然后再操作

611

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧