Vb6需要帮助测试以查看表是否存在,然后创建表(如果不存在)

时间:2015-12-03 11:04:12

标签: sql vb6

标题几乎说明了一切。我们被迫在大学里使用15年历史的软件,我没有时间自己学习一个软件,更不用说它在大学里的电脑上运行的速度有多慢。 VB6本身几乎没有运行。

现在,我们几乎没有教过代码,我们教的第一语言是Pascal,现在是VB6(记住这是2015年!)。

所以,几乎没有任何知识,我可以在网上找到什么信息,我尝试了这段可怕的代码:

frm_menu.dbMain.Execute "if(exists(select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME != 'fencer' )) begin create table fencer(<insert fields here>)  end"

frm_menu是名为dbMain的数据库变量所在的形式。 'fencer'是表格的名称。

当然,我刚刚添加的<insert fields here>因为我有大量的字段,但语法很好并且已经过测试。

我不知道information_schema是什么,研究没有帮助,我没有太多时间去尝试理解它。

VB6抛出以下错误:

  

运行时错误'3078'   Microsoft Jet数据库引擎无法找到输入表或查询(上面的代码行&gt;)。确保它存在且其名称拼写正确。

不幸的是,由这些不称职的老师教导导致我陷入困境,没有时间解决它。

如果有人可以提供任何建议或帮助,我将非常感激。

感谢。

1 个答案:

答案 0 :(得分:1)

您发布的代码片段尝试从数据库中选择表名。你发布的内容并不完全正确。 !=意味着不等于。 !被称为“Bang”,就SQL而言,在语法上与<>在语法上相同(并且可以互换)。发布的代码将选择数据库中名称不是“fencer”的所有表。

您发布的示例正在传递的是尝试从数据库中选择表信息的查询,如果没有返回任何内容,请创建该表。如果在尝试访问数据库之前运行该行代码,它将检查数据库中是否存在表,如果找不到,则会创建表。

更正的代码应为(SQL):

frm_menu.dbMain.Execute "IF (NOT EXISTS( SELECT * FROM " & _
                         INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'fencer'))" & _
                        "BEGIN" & _
                             code to create the table goes here
                        "END"

更正后的代码应为(MS Access):

frm_menu.dbMain.Execute "If Not Exists(SELECT [Name] FROM MSysObjects WHERE " & _
                        "[Name]='spencer' And Type In (1,4,6)) Then " & _
                            code to create the table goes here
                        "End If"
相关问题