在VS2008中编写MFC对话框程序,现在要判断sql数据库中是否含有表A,如果有的话,就直接从表中读取数据,如果没有的话,那么就创建表A,,这个应该怎么做呢??大神们。

解决方案 »

  1.   

    用sql语句判断
    Create table aa if NOT exist
      

  2.   

     同意楼上,具体语句是
    CREATE TABLE IF not exists `car` (
      `id` int(11) NOT NULL,
      `name` varchar(45) DEFAULT NULL COMMENT '名称',
      `model` varchar(45) DEFAULT NULL COMMENT '型号',
      `IP` char(15) NOT NULL COMMENT 'PLC IP',
      `port` int(11) NOT NULL COMMENT 'PLC 端口',
      `outTime` int(11) NOT NULL COMMENT '通讯超时时间,单位秒,初始值2秒',
      `disabled` tinyint(1) NOT NULL COMMENT '停用',
      `deleted` tinyint(1) NOT NULL COMMENT '已删除',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;mysql的,mssql类似
      

  3.   

    我们一般是select count(1) from table_a where 1=2;判断是否出错.这个方法可以用在任何标准的数据库。where 1=2 是必须的,因为如果表存在,不加条件,它会真的去计数,浪费时间。-------------------------
    具体到每个不同的DBMS,一般都有系统表可以查。但上面那个是通用的。
      

  4.   

    同样,实际开发中,你可能还需要判断有没有哪个column.//比如你以后哪天程序升级,要自动加字段那就select count(字段) from table_a where 1=2;出错就加,不出错就继续。
      

  5.   

    这种方法不好,建议不要用这种方法。出错并不表示没有,要判断是否因为不存在而报的错,需要对报错的信息进行分析才能确定。比如网络断了、数据库关闭了等种种原因都可能导致出错,如果不根据出错原因就直接认为是表不存在,是要出问题的。而且,表不存在报的错误信息,不同数据报的错不一定相同。
    我们项目中的一个问题,从数据库查磁带是否存在,如果不存,就认为是新磁带,从头开始写,如果存在就是旧磁带,接着写。可是,程序员写代码时,把查询失败当作是不存在,把一盘老磁带当作新磁带从头写了,导致把之前写的东西覆盖掉了。这是很严重的问题。
    判断数据库表是否存在,不同数据库都是有正统方法的。
    比如Oracle如下,TABLE_NAME是表名,要换成大写民:
    select * from user_tables t where t.table_name='TABLE_NAME';