ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2237|回复: 1

[求助] 运行时提示“表被其他用户或进程使用”,请问哪出问题啦?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-9-5 20:16 | 显示全部楼层 |阅读模式
本帖最后由 zjszjs27 于 2012-9-5 20:44 编辑
  1. LineText = FileText.readline
  2.                     
  3.                     ''''''''''''''''''''''''''''''''''''按行读取的记录,如果不是已"/"开始的,进行处理'''''''''''''''''''''''''''''
  4.                                       
  5.                     
  6.                         If (Left(LineText, 1) <> "/" And LineText <> "") Then    '---------------------(2)--------------------------------
  7.                         '获取BSC名称,只在第一行有效数据中出现,才会获取BSC名称
  8.                            If bsc_search_biaoji = True And InStr(LineText, "SET SYS") Then
  9.                                BscName = Mid(LineText, InStr(LineText, "SYSOBJECTID") + 13, InStr(InStr(LineText, "SYSOBJECTID") + 13, LineText, ",") - 2 - (InStr(LineText, "SYSOBJECTID") + 13) + 1)
  10.                            End If
  11.                             '获取列名和列值\表名空格间隔形式
  12.                            linetext_str = str_sp(LineText, ",", ":")
  13.                            '获取表名
  14.                            tableName = Replace(linetext_str(0), " ", "_")
  15.                     
  16.                             colon_name = ""
  17.                             colon_value = ""

  18.                             If dic_tbl.Exists(tableName) = False Then  '---------------------(1)--------------------------------
  19.                             ''''''''''''''''''''''''''''''''''''''查找需要创建的表是否已经在数据库中'''''''''''''''''''''''''''''''''''''''
  20.                            
  21.                                       '该表不存在,则创建表,并增加所有列
  22.                                         '''''''''''''''''''查询结果,在数据库中没有找到需创建的表,所以进行创建新表的操作'''''''''''''''''''''''''''
  23.                                         dic_value = "-"
  24.                                         '创建表,默认包含一列BSC_NAME
  25.                                         sql_str = "create   table   " & tableName & "   (" & "HBSC_NAME" & "   text(255))"
  26.                                         CurrentProject.Connection.Execute sql_str
  27.                                             For I = LBound(linetext_str) + 1 To UBound(linetext_str) Step 2
  28.                                                 '获取列名和列值
  29.                                                 colon_name = colon_name & ", " & linetext_str(I)
  30.                                                 colon_value = colon_value & ", " & """" & linetext_str(I + 1) & """"
  31.                                                 '创建各列
  32.                                                 If (Len(linetext_str(I + 1)) <= 255) Then
  33.                                                     sql_str = "Alter   Table   " & tableName & "   Add   " & "COLUMN " & linetext_str(I) & "   text(255)"
  34.                                                     CurrentProject.Connection.Execute sql_str
  35.                                                 
  36.                                                 Else
  37.                                                     sql_str = "Alter   Table   " & tableName & "   Add   " & "COLUMN " & linetext_str(I) & "   longtext"
  38.                                                     CurrentProject.Connection.Execute sql_str
  39.                                             
  40.                                                 End If
  41.                                                 dic_value = dic_value & linetext_str(I) & "-"
  42.                                             Next I
  43.                                             dic_tbl.Add tableName, dic_value
  44.                             Else   '--------------------(1)-----------------------------------------
  45.                                       '该表存在,则判断各列是否都存在,不存在的增加列
  46.                                        
  47.                                         For I = LBound(linetext_str) + 1 To UBound(linetext_str) Step 2
  48.                                             '获取列名和列值
  49.                                             colon_name = colon_name & ", " & linetext_str(I)
  50.                                             colon_value = colon_value & ", " & """" & linetext_str(I + 1) & """"
  51.                                             '判断列名在表中是否存在
  52.                                             If InStr(dic_tbl.Item(tableName), linetext_str(I)) = 0 Then  '不存在
  53.                                                 '更新字典中列名值
  54.                                                 dic_tbl.Item(tableName) = dic_tbl.Item(tableName) & linetext_str(I) & "-"
  55.                                                 '在表中增加缺少的列
  56.                                                 If (Len(linetext_str(I + 1)) <= 255) Then
  57.                                                     sql_str = "Alter   Table   " & tableName & "   Add   " & "COLUMN " & linetext_str(I) & "   text(255)"
  58. 运行出错的地方:                                                    CurrentProject.Connection.Execute sql_str
  59.                                                 Else
  60.                                                     sql_str = "Alter   Table   " & tableName & "   Add   " & "COLUMN " & linetext_str(I) & "   longtext"
  61.                                                     CurrentProject.Connection.Execute sql_str
  62.                                                 End If
  63.                                             Else
  64.                                                 find_colomn_biaoji = False
  65.                                                 m = InStr(dic_tbl.Item(tableName), linetext_str(I))
  66.                                                 Do While m + Len(linetext_str(I)) - 1 <= Len(dic_tbl.Item(tableName))
  67.                                                     '获取M位前一位字符
  68.                                                     temp_str1 = Mid(dic_tbl.Item(tableName), m - 1, 1)
  69.                                                     '获取M+LEN()后一位字符
  70.                                                     temp_str2 = Mid(dic_tbl.Item(tableName), m + Len(linetext_str(I)), 1)
  71.                                                     '当两者均为“-”时,说明完全匹配,否则匹配失败
  72.                                                     If temp_str1 = "-" And temp_str2 = "-" Then
  73.                                                         find_colomn_biaoji = True
  74.                                                         Exit Do
  75.                                                     Else
  76.                                                         m = InStr(m + Len(linetext_str(I)), dic_tbl.Item(tableName), linetext_str(I))
  77.                                                         If m = 0 Then
  78.                                                             Exit Do
  79.                                                         End If
  80.                                                     End If
  81.                                                 Loop
  82.                                                 If find_colomn_biaoji = False Then
  83.                                                      '更新字典中列名值
  84.                                                     dic_tbl.Item(tableName) = dic_tbl.Item(tableName) & linetext_str(I) & "-"
  85.                                                     '在表中增加缺少的列
  86.                                                     If (Len(linetext_str(I + 1)) <= 255) Then
  87.                                                         sql_str = "Alter   Table   " & tableName & "   Add   " & "COLUMN " & linetext_str(I) & "   text(255)"
  88.                                                         CurrentProject.Connection.Execute sql_str
  89.                                                     Else
  90.                                                         sql_str = "Alter   Table   " & tableName & "   Add   " & "COLUMN " & linetext_str(I) & "   longtext"
  91.                                                         CurrentProject.Connection.Execute sql_str
  92.                                                     End If
  93.                                                 End If
  94.                                                 
  95.                                             End If
  96.                                             
  97.                                         Next I
  98.                             End If   '--------------------(1)-----------------------------------------
  99.                         
  100.                            '将所有列值插入到表中
  101.                        
  102.                             '默认创建的表中包含HBSC_NAME列,故需增加列HBSC_NAME及其对应的值BscName
  103.                             insertSQL1 = "insert into " & tableName & "(HBSC_NAME"
  104.                             insertSQL2 = " values(" & """" & BscName & """"
  105.                             sql_str = insertSQL1 & colon_name & ")" & insertSQL2 & colon_value & ")"
  106.                             CurrentProject.Connection.Execute sql_str
  107.                            
  108.                     End If    '---------------------(2)--------------------------------
复制代码
运行到”运行出错的地方“,提示表被其他用户或进程使用。这个表是已经存在的,之前已经插入两行数据,第三行数据比表中多了一列,所以在这增加一列,就在这出错了。请问哪里代码有问题啊,应该怎么修改啊?我程序里就是多次运行了语句 CurrentProject.Connection.Execute sql_str,对这个有什么要求吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-9-8 22:16 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-8 11:47 , Processed in 0.018299 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表