我的数据库中有个用户信息(共有8列)原来是用二维数组从数据库中接收这些数据,因为用户的多少是变动的,我就只好估计最大为100个,写成CString strSoftExpertsList[100][8];现在想改用CStringArray动态接收这些数据,但我不知如何用它存储二维数组,请详细告知CStringArray的用法。

解决方案 »

  1.   

    用CStringArray好像是没有办法做成二维数组了。CStringArray只是一维数组。
    可以考虑用这样的数组:typedef CArray<CStringArray,CStringArray> CString2Array;
    这样,CString2Array的每个元素代表一个CStringArray,就可以到达二维的效果了。
      

  2.   

    楼主的CString数组中第二维固定是8,只是第一维是变化的。
    这在一个SQL数据库是常见的,一般数据的列数都是固定的,只是行数随着SELECT查询语句的不同而变化,应该有更简便而通用的方法。
     happyparrot(快乐鹦鹉) 的方法太繁琐了!
      

  3.   

    那么这样:
    typedef CArray<CString*,CString*> CStrPArray;
    CStrPArray arStrP;
    CString *pStr = new CString[8];
    pStr[0] = "***";
    .....
    pStr[7] = "...";
    arStrP.Add(pStr);
      

  4.   

    就用CStringArray<CStringArray<>> 构建二维数组好了
    或用vector<vector<> >
      

  5.   

    如果列数固定,就干脆把一行做成一个struct,然后放到数组中
    CStringArray<Mystruct&,Mystruct&>
      

  6.   

    happyparrot(快乐鹦鹉)的方法不错。
      

  7.   

    happyparrot(快乐鹦鹉)的方法用了new,在哪里delete呢?
     oyljerry(【勇敢的心】说的CStringArray<Mystruct&,Mystruct&>,能够再将详细点吗?因为我只是个初学者。
      

  8.   

    CArray<CStringArray,CStringArray> CString2Array;不灵的,必须有拷贝构造函数
      

  9.   

    还有请问appyparrot(快乐鹦鹉),如果我想调用第二行的第5个字段是用:arStrP[2][5]吗?
      

  10.   

    happyparrot(快乐鹦鹉)的方法用了new,在哪里delete呢?
    ==在arStrP数组不再使用的时候delete啊。循环从arStrP中得到每一个CString*,然后delete[]就可以了。
      

  11.   

    goodboyws(深夜不眠者)如果遇到从数据库SELECT数据,是采用什么简便的方法存储的呢?也就是行数变化,列数(字段)固定的数据,应该是很普遍的呀?
      

  12.   

    请问happyparrot(快乐鹦鹉) 具体讲讲如何循环得到每一行的各个字段?
      

  13.   

    还有请问appyparrot(快乐鹦鹉),如果我想调用第二行的第5个字段是用:arStrP[2][5]吗?
    如果是从0开始,那么是这样。
      

  14.   

    用 向量容器呀。vector
      

  15.   

    看看这段代码:
    CMapWordToPtr m_map;//word 对应行,Ptr对应你要的CStringArray指针
                        //一个CStringArray对象保存一行记录(你的一行是八段,其实可以
                        //任意,因为CStringArray.Add()可以将每个字段值加入)/////////////////////////////////////////////////////////////////////////
    //Write//////////////
    CStringArray* pStringArray = new CStringArray;
    ASSERT(pStringArray != NULL);
    for(int i=0;i</*行数*/;i++)
    {
    for(int j=0;j</*字段数*/;j++)
    {
       ....................////////
       ....................//取值//
       ....................////////
       pStringArray->Add(/* 值的字串形式*/);
    }m_map.SetAt(i,pStringArray);
    }
    ..............
    //////////////////////////////////////////////////////////
    //Read
    CStringArray* p=NULL;
    m_map.GetAt(/*行位置*/,(void*&)p);
    CString strValue;
    strValue = p->GetAt(/*字段位置*/);
    ////////////////////////////
      

  16.   

    从性能考虑,用CStringArray最好先SetSize()一个大概的容量。
    CString str;
    CStringArray strarray;
    strarray.SetSize(100);str = "SQL";
    strarray.SetAt(0, str);
      

  17.   

    每个用户8列,可以作为一个struct
      

  18.   

    可以考虑创建8个CCStringArray 
    然后让他们的index保持一致就可以了