vb判断数据库中表是否存在

hanshuhe 2004-09-05 11:34:57
小弟有这样一个问题要解决,连接数据库后(用ADO连接ACCESS数据库)先判断数据库中是否存在这个表,如果不存在就建立这样一个表,例如,要以日期作为表名称创建表,今天第一次执行此程序时,建立一个名字为“2004-09-05”的表(之后在向表里插入记录),但今天第二次运行这个程序是就不建立这个表,直接向这个表里面插入记录就行了,明天第一次运行时在建立一个表名为“2004-09-06”的表
小弟想问的是今天第二次执行程序时怎么判断已经存在这个表“2004-09-05”了?
...全文
913 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
风之浪漫 2004-09-15
  • 打赏
  • 举报
回复
这样也行的。这个是连接SQL数据库的,你改一下就行了! ̄
strConn = "driver={SQL Server};server=;uid=;pwd=;database=jthis"
Con1.Open strConn
sql = "select * from sysobjects where name='Temp1'"
rs.Open sql, Conn, 1, 1
If rs.RecordCount = 0 Then
TFlags =false' 表不存在
Else
TFlags = True'表存在
End If
rs.Close
littlefishli 2004-09-15
  • 打赏
  • 举报
回复
系统表里不是有所有表的记录吗。。。。
reddeephehe 2004-09-15
  • 打赏
  • 举报
回复
支持!
如果打开表,出现错误,可以根据错误。来检测是否有表的存在,方法最简单的~~
suxylin 2004-09-15
  • 打赏
  • 举报
回复
如果是这样建表的话,可能你先建立年的文件夹,在建月的文件夹,然后是表名为日期,这样访问和统计都方便点。

不过在SQL数据库中就未必这么好做了额,谁会呢?》
haohaohappy 2004-09-14
  • 打赏
  • 举报
回复
建议:还是按一楼的做法吧。可以得到数据库里你自己建立的所有表名,然后你在这些表里判断你所要找的表是否存在。
其实你用ON ERROR RESUME NEXT可以掠过找到这个表的报错,对后面的不会有影响的。但注意要及时ON ERROR GOTO 0
officecn 2004-09-14
  • 打赏
  • 举报
回复
对的,你使用ADOX就可以了,具体的在MS的KB知识库里有介绍
arabbob 2004-09-14
  • 打赏
  • 举报
回复
access數據庫的權限問題吧.
Abyss-Xu 2004-09-14
  • 打赏
  • 举报
回复
支持一楼
allan80 2004-09-13
  • 打赏
  • 举报
回复
你的程序段少了一个连接数据库的语句
allan80 2004-09-13
  • 打赏
  • 举报
回复
"select count(*) as total from Msysobjects where name='表名'"
from 的对象应该是表名,你不会写错吧
hanshuhe 2004-09-13
  • 打赏
  • 举报
回复
to starsoulxp 怎么修改Msysobjects 的属性?在Access下面我看不到Msysobjects 这个对象
starsoulxp 2004-09-06
  • 打赏
  • 举报
回复
是不是Msysobjects表的属性问题
hanshuhe 2004-09-06
  • 打赏
  • 举报
回复
To titan90
不会好意思上面的程序少了一句

我实验过了,这个sql语句真的能把表名字找出来,但我又遇到一个问题
下面是数据库操作程序

dim cnn as adodb.connetion
dim rst as adodb.recordset
dim SqlCmd as string
''''连接数据库
SqlCmd="select count(*) as total from Msysobjects where name='表名'"
rst.open SqlCmd,cnn……
if rst("total")=0 then
''创建表
end if
执行的时候出现错误,错误信息是 不能从Msysobjects 中读取数据
怎么解决
hanshuhe 2004-09-06
  • 打赏
  • 举报
回复
To titan90
我实验过了,这个sql语句真的能把表名字找出来,但我又遇到一个问题
下面是数据库操作程序

dim cnn as adodb.connetion
dim rst as adodb.recordset
dim SqlCmd as string
''''连接数据库
SqlCmd="select count(*) as total from Msysobjects where name='表名'"
if rst("total")=0 then
''创建表
end if
执行的时候出现错误,错误信息是 不能从Msysobjects 中读取数据
怎么解决
titan90 2004-09-06
  • 打赏
  • 举报
回复
select name from sysobjects where name='表名'
RUKYO 2004-09-06
  • 打赏
  • 举报
回复
判断存在上面已经有了,这是代码建mdb表:

Sub CreateKey()
'建立主键
Dim adPrimary As New ADOX.Key
Dim mCat As New ADOX.Catalog
mCat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\db1.mdb" & ";Persist Security Info=False"
adPrimary.Name = "AddPriKey"
adPrimary.Type = adKeyPrimary
adPrimary.Columns.Append "自动增号"
adPrimary.UpdateRule = adRICascade
mCat.Tables("OneTable").Keys.Append adPrimary
End Sub

Sub CreateTableAndIndexAndAutoIncrementField()

Dim mTbl As New Table
Dim mIdx As New ADOX.Index
Dim mCat As New ADOX.Catalog

' 打开目录。
mCat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\db1.mdb" & ";Persist Security Info=False"

' 定义表并将其追加到目录
mTbl.Name = "OneTable"
mTbl.ParentCatalog = mCat
mTbl.Columns.Append "自动增号", adInteger
mTbl.Columns("自动增号").Properties("Jet OLEDB:Allow Zero Length").Value = False
mTbl.Columns("自动增号").Properties("AutoIncrement").Value = True
mTbl.Columns.Append "帐号", adVarWChar
mTbl.Columns.Append "名称", adVarWChar
mTbl.Columns.Append "金额", adCurrency
mTbl.Columns.Append "代销", adDouble
mCat.Tables.Append mTbl

' 定义多列索引
mIdx.Name = "MultiColIdx"
mIdx.Columns.Append "自动增号"

' 将索引追加到表上
mTbl.Indexes.Append mIdx

End Sub

Private Sub Command4_Click()
Call CreateTableAndIndexAndAutoIncrementField
Call CreateKey
End Sub
zyg0 2004-09-05
  • 打赏
  • 举报
回复
SELECT MSysObjects.Name FROM MsysObjects WHERE (Left([Name],1)<>"~") AND (Left$([Name],4) <> "Msys") AND (MSysObjects.Type)=1 and MSysObjects.Name ='表名' ORDER BY MSysObjects.Name;
online 2004-09-05
  • 打赏
  • 举报
回复
搜索以前的帖子,很多的

'引用微软 ADO Ext.2.7 for dll and Security
Dim cat As ADOX.Catalog
Dim cnn As ADODB.Connection
Dim tbl As ADOX.Table

Private Sub Command1_Click()
On Error Resume Next
For Each tbl In cat.Tables
If Left(tbl.Name, 4) <> "MSys" Then
List1.AddItem tbl.Name
End If
Next
End Sub

Private Sub Form_Load()
Set cnn = New ADODB.Connection
Set cat = New ADOX.Catalog
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\csdn_vb\database\treeview的节点添加\article.mdb"
Set cat.ActiveConnection = cnn
End Sub

Private Sub Form_Unload(Cancel As Integer)
Set cat = Nothing
Set con = Nothing
End Sub
jtkkjtkk 2004-09-05
  • 打赏
  • 举报
回复
记得以前是哪位高人说的:
思路 :
假定该表存在,执行一个从该表取数据的SELECT count(*) from table1 ,如果没有此表,将引发错误,否则不会引发错误处理,代码用on error goto 处理就OK了。

1,217

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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