我先进入pg admin界面,然后新建表,在新建表框中选择SQL,把只读去掉,写入SQL语句,但是这时确认键就变灰了,无法写入数据,求指点。还有怎么建立复合类型?应该在新建字段里面选择哪个类型是指复合类型?如果使用vc2008,应该如何实现复合类型的写入?

解决方案 »

  1.   

    当有些工具做不到你所想的, 你就直接写SQL语句来执行吧
    数据库的复合类型, 都不会映射到你的客户端, 一搬都解析为字符串
      

  2.   

    复合类型就是自定义类型。只读是指在SQL框里面有个只读选项,初始时SQL框里是空白的,我写上语句,想按确认键时,确认键是灰的
      

  3.   

    你好,在c里面是这么写的吗?
    void CreateComplexType(PGconn *conn)
    {
      // Execute with sql statement
        PGresult *res = PQexec(conn, "CREATE TYPE complex AS ( r double precision,i  double precision)");
        
      if (PQresultStatus(res) != PGRES_COMMAND_OK)
        {
            printf("Create complex type failed");
            PQclear(res);
            CloseConn(conn);
        }  printf("Create complex type - OK\n");  // Clear result
      PQclear(res);
    }
      

  4.   

    SQL语句是没错的
    复合型字段写入请应字符串类型, 格式为row(xxx,xxx)
      

  5.   

    不好意思有点没太看明白。你的意思是说把 "CREATE TYPE complex AS ( r double precision,i double precision)"中的double precision改成char吗?如果可以的话,麻烦在我贴的代码里面帮忙改下,小妹不胜感激!
      

  6.   

    你的CREATE TYPE 没错
    我说的是你要INSERT INTO数据的时候, 复合型字段用字符串代替, 格式如row(1.0,2.0)
      

  7.   

    明白,谢谢啦。但是不知道为什么我创建complex类型不能成功,求指点。下面是我的完整代码:#include   <iostream>   
    #include "libpq-fe.h"
    using namespace std;PGconn *ConnectDB()
    {
      PGconn *conn = NULL;  // Make a connection to the database
      conn = PQconnectdb("user=postgres password=112799 dbname=postgres hostaddr=127.0.0.1 port=5432");  // Check to see that the backend connection was successfully made 
        if (PQstatus(conn) != CONNECTION_OK)
        {
            printf("Connection to database failed");
            CloseConn(conn);
        }  printf("Connection to database - OK\n");  return conn;
    }
    void CreateType(PGconn *conn)
    {
     PGresult *res =  PQexec(conn, "CREATE TYPE complex AS ( r double precision,i double precision)");
     if (PQresultStatus(res) != PGRES_COMMAND_OK)
        {
            printf("Create type complex failed");
            PQclear(res);
            CloseConn(conn);
        }  printf("Create type complex - OK\n");
     // Clear result
      PQclear(res);}
    int main(int argc, char* argv[])
    {
      PGconn     *conn = NULL;
      conn = ConnectDB();
      CreateType(conn);
      return 0;
      system("pause");
    }
      

  8.   

    可能是运行期错误, 
    你用PQerrorMessage返回错误信息看一看
      

  9.   

    你好,最后还是没搞定。请问下如果在pg admin里面是需要在哪个新建选项下实现新建自定义类型呢?我试了下载已建好表里面新建字段,貌似不是在那建的。。
      

  10.   

    pgadmin 有SQL窗口, 直接在里面敲SQL命令 来执行