我用的是Delphi7.0和InterBase7.0
代码如下:  MainForm.Q_E.Close;
  MainForm.Q_E.sql.Clear;
  T_N:='E_'+StringReplace(Edit11.Text, '-', '_', [rfReplaceAll]);
  Sql_1:='CREATE TABLE '+T_N+' (P_NO VARCHAR(3),WELD_OB VARCHAR(100),WPS VARCHAR(4),WPS_1 VARCHAR(40),WPS_1_S VARCHAR(40),';
  Sql_2:='....';
  Sql_3:='....';
  Sql_4:='....';
  Sql_5:='....';
  Sql_6:='P_H BOOLEAN,HTI VARCHAR(4),HTI_1 VARCHAR(3),HTI_1_M VARCHAR(20),HTI_2 VARCHAR(3),HTI_2_M VARCHAR(20),HTI_3 VARCHAR(3),HTI_3_M VARCHAR(20),INSP VARCHAR(40),REMARK VARCHAR(100),HJDE BOOLEAN)';
  MainForm.Q_E.SQL.Add(Sql_1+Sql_2+Sql_3+Sql_4+Sql_5+Sql_6);
  MainForm.Q_E.ExecSQL;PS:Q_E是TIBQuery我的思路是先动态建表,然后在一侧的TTreeView中显示所有表名,包括新建表,点击TTreeView中的表名,程序借助TIBTable和TDBCtrlGrid编辑新建表。遇到两个问题:
1.执行完上面的动态建表语句后,并不能立即建立表,必须将程序完全关闭后才能刷出刚刚新建的表,即使只关掉子窗口也不行。
2.在确认表建立之后,试图通过TIBTable和TDBCtrlGrid为新建表添加记录时,代码如下:    MainForm.T_E.Close;
    MainForm.T_E.TableName:='E_'+StringReplace(TreeView1.Selected.Text, '-', '_', [rfReplaceAll]);
    MainForm.T_E.Active:=true;报错如下:Unknown SQL Data Type (590)求解答!万分感谢!

解决方案 »

  1.   

    直接寫成存儲過程,然後再exec調用之1.編寫存儲過程:USE [MES]
    GO/****** Object:  Table [dbo].[WL_XX]    Script Date: 08/27/2010 13:46:07 ******/
    SET ANSI_NULLS ON
    GOSET QUOTED_IDENTIFIER ON
    GOCREATE TABLE [dbo].[WL_XX](
    [ID] [int] NOT NULL,
    [LH] [nvarchar](50) NULL,
    [PM] [nvarchar](50) NULL,
    [LB] [nvarchar](50) NULL,
    [WZ] [nvarchar](50) NULL,
    [FLQH] [float] NULL,
    [JLQH] [float] NULL,
    [CZQH] [float] NULL,
    [BZ] [nvarchar](50) NULL,
    [USER] [nvarchar](50) NULL
    ) ON [PRIMARY]GO2.調用之:  qry_BaseTemp.Close;
      qry_BaseTemp.SQL.Text:=' exec 存儲過程名字 ';//也可以直接創建表(參考一)
      qry_BaseTemp.OPEN;
      

  2.   


    意思我知道,关键建表能成功,说明字段的数据类型应该没问题(只有varchar、float和boolean三种),我在TDBCtrlGrid中只引用了两个字段,其数据类型都是varchar,为什么还会这样报错呢??
      

  3.   

    因為你的代碼有問題,創建表的數據庫字段類型錯誤1.引用你的代碼:
    ....
    Sql_6:='P_H BOOLEAN,HTI VARCHAR(4),HTI_1 VARCHAR(3),HTI_1_M VARCHAR(20),HTI_2 VARCHAR(3),HTI_2_M VARCHAR(20),HTI_3 VARCHAR(3),HTI_3_M VARCHAR(20),INSP VARCHAR(40),REMARK VARCHAR(100),HJDE BOOLEAN)';
    ....
    2.檢查一下這裡:
    ...
    HJDE BOOLEAN
    ...說明:字段HJDE在delphi中的定義是布爾型boolean,而創建表時應該用bit類型...
    [HCK] [bit] NULL,明白??了解??不建議你使用這種方法
      

  4.   

    先谢了!
    我之前用BIT类型,但是报错:Specified domain or source column does not exist
      

  5.   

    建立表后,将连接关掉,然后再open,再刷
      

  6.   

    请问怎么关掉连接?是.close吗?
      

  7.   

    我知道了,只要把Database的Connected断掉再连上就好了就剩第一个问题了,重新描述如下:想用DBCtrlGrid引用一个已经建好的表,该表中有Boolean型字段,出错如下:Unknown SQL Data Type (590)
    我将Boolean型字段全部删除或修改成varchar就能成功引用,有人说应该将Boolean型改成Bit型,可这样一来根本无法成功建立数据表。求原因!PS:DBGrid也同样有这个问题。
      

  8.   

    原来是IBX driver版本太低,只要装一下IBX driver for Delphi问题就搞定了!!
    谢谢楼上两位!