小弟是ADO新手 ,刚刚开始学习,现在想从SQL2000的一个数据库中将数据读出来放入数组  modules中去,但是不知道怎么放。请大家帮帮我。谢谢
#include "stdafx.h"
#include "pullon.h"//建立一个数组
struct Modules{
   char ipaddress[16];
   char name[16];
   char deviceid[];
} modModule[255];
// 初始化—连接数据库
void  pullon::OnInitpullon()
{
// 初始化OLE/COM库环境 
::CoInitialize(NULL);
  try
{
// 创建Connection对象
_ConnectionPtr m_pConnection;
m_pConnection.CreateInstance("ADODB.Connection");
m_pcon->Open("Drive={SQLServer};server=127.0.0.1;database=ip;uid=sa;pwd=sa","","",adModeUnknown);  // 捕捉异常
catch(_com_error e)
{
      CString errormessage;
      errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
      AfxMessageBox(errormessage);///显示错误信息
} }// 执行查询
_RecordsetPtr&  pullon::GetRecordSet(_bstr_t bstrSQL)
{
try
{
// 连接数据库,如果Connection对象为空,则重新连接数据库
if(m_pConnection==NULL)
OnInitpullon();
// 创建记录集对象
m_pRecordset.CreateInstance(__uuidof(Recordset));
// 取得表中的记录
m_pRecordset->Open("select * from csql",m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}
// 捕捉异常
catch(_com_error e)
{
      CString errormessage;
      errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
      AfxMessageBox(errormessage);///显示错误信息

// 返回记录集
return m_pRecordset;
}void pullon::Onreadsql()
{ _variant_t var;
CString strName,strIP,strwModule;
    //m_pRecordset->BOF判断是否 在第一条记录前面
try
{
if(!m_pRecordset->BOF)
m_pRecordset->MoveFirst();
else
{
AfxMessageBox("表内数据为空");
return;
} // 读入库中各字段
while(!m_pRecordset->adoEOF)
{
var = m_pRecordset->GetCollect("模块名称");
if(var.vt != VT_NULL)
strName = (LPCSTR)_bstr_t(var);
var = m_pRecordset->GetCollect("模块Ip");
if(var.vt != VT_NULL)
strip = (LPCSTR)_bstr_t(var);
var = m_pRecordset->GetCollect("模块型号");
if(var.vt != VT_NULL)
strwModule = (LPCSTR)_bstr_t(var); 
//将sql读到的数据存入数组中去
         
 strName=Moulds.name }
}
// 捕捉异常
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}}

解决方案 »

  1.   

    做法正确!1、你先定义了一个 255 元素的一维结构体数组,用来存储数据;2、建立连接,打开记录集;3、循环读取数据,存入数组;int i=0;while(!m_pRecordset->adoEOF) 
    { var = m_pRecordset->GetCollect("模块名称"); 
    if(var.vt != VT_NULL) 
    strName = (LPCSTR)_bstr_t(var); 
    var = m_pRecordset->GetCollect("模块Ip"); 
    if(var.vt != VT_NULL) 
    strip = (LPCSTR)_bstr_t(var); //将sql读到的数据存入数组中去 
            
    //strName=Moulds.name // 这里搞反了Moulds[i].name = strName;// 一个记录读取完后,需要向下移动指针,同时数组下标加1
    m_pRecordset->MoveNext();
    i++;

      

  2.   

    Modules *modules;
    modules = new Modules[]; //维数多大你自己确定吧int i = 0;
    while(!m_pRecordset->adoEOF) 

    var = m_pRecordset->GetCollect("模块名称"); 
    if(var.vt != VT_NULL) 
    strName = (LPCSTR)_bstr_t(var); 
    var = m_pRecordset->GetCollect("模块Ip"); 
    if(var.vt != VT_NULL) 
    strip = (LPCSTR)_bstr_t(var); 
    var = m_pRecordset->GetCollect("模块型号"); 
    if(var.vt != VT_NULL) 
    strwModule = (LPCSTR)_bstr_t(var); 
    //将sql读到的数据存入数组中去 
    modules[i].name = strName;
    modules[i].ip = strip;
    m_pRecordset->MoveNext();
    i++;
      

  3.   

    //建立一个数组
    struct Modules{
      char ipaddress[16];
      char name[16];
      char deviceid[];
    } modModule[255]; // 中间略....// 数据量不能超过当前 modModule 的大小 ( 255)
    int nRecord = 0;
    // 读入库中各字段
    while(!m_pRecordset->adoEOF)
    {
    var = m_pRecordset->GetCollect("模块名称");
    if(var.vt != VT_NULL)
    strName = (LPCSTR)_bstr_t(var);
    var = m_pRecordset->GetCollect("模块Ip");
    if(var.vt != VT_NULL)
    strip = (LPCSTR)_bstr_t(var);
    var = m_pRecordset->GetCollect("模块型号");
    if(var.vt != VT_NULL)
    strwModule = (LPCSTR)_bstr_t(var);
    //将sql读到的数据存入数组中去
    // strName=Moulds.name
    if (nRecord < 256)
    {
    strcpy(modModule[i].ipaddress, strName.GetBuffer());
    strcpy(modModule[i].name, strip.GetBuffer());
    strcpy(modModule[i].deviceid, strwModule.GetBuffer());
    strName.ReleaseBuffer();
    strip.ReleaseBuffer();
    strwModule.ReleaseBuffer();
    }
           nRecord++;

    // 以下略 ...