写入记录的代码:
         CString strSQL;
int a[15]={1,2,3,4,1,2,3,5,6,7,8,9,1,2};
strSQL.Format("INSERT INTO TestTable(列1,列2,列3)VALUES('%d','%s','%s')",a[0],a[1],a[2]);
ExecuteSQL(strSQL);ExecuteSQL(strSQL);是自己写的一个执行SQL语句的函数,代码出下:
try
{
// 是否已经连接数据库
if(m_Connection == NULL)
          OnInitADOConn();//初始化并建立ADO连接
m_Connection->Execute((_bstr_t)m_strSQL,NULL,adCmdText);
return true;
}
catch(_com_error e) //捕捉异常 

CString errormessage; 
errormessage.Format("操作失败!\r\n错误信息:%s",e.ErrorMessage()); 
AfxMessageBox(errormessage); //显示错误信息 
return false;
}  
编译是可以通过的,没错,可是执行时就提示“"ox1021674c"指令引用的“ox00000001”内存。该内存不能为"REED"”

解决方案 »

  1.   

    这个软件里试试你SQL语句是否正确e.ErrorMessage()改成
    (LPCTSTR)e.Description()才能看到好的错误提示。
      

  2.   


    多谢了,按你说的改了,可还没有提示出错原因,只是“"ox1021674c"指令引用的“ox00000001”内存。该内存不能为"REED"”
      

  3.   

    strSQL.Format("INSERT INTO TestTable(列1,列2,列3)VALUES('%d','%s','%s')",a[0],a[1],a[2]);执行这语句,没崩溃吗?
      

  4.   

    对了,我的TestTable格式如下:
    列1 int 4 0
    列2 char 10 1
    列3 char 10 1
      

  5.   

    多谢帮忙了,我是新手,好多不懂
    编译都正常,没有调试,直接叹号 执行没有崩溃呀,可是就弹出对话框说“"ox1021674c"指令引用的“ox00000001”内存。该内存不能为"REED"
      

  6.   

    strSQL.Format("INSERT INTO TestTable(列1,列2,列3)VALUES('%d','%d','%d')",a[0],a[1],a[2]);
      

  7.   


    可是我表里存的是字符型的,不是整型的呀
    列1 int 4 0
    列2 char 10 1
    列3 char 10 1
      

  8.   


    晕,原来你是那样理解的啊
    这个SQL字符串和表里面的字段类型没太大关系,它会自己转换,转换不了会报错
      

  9.   


    之前看到文章说要用 _varant_t中间转换,可是我转了好多次,总提示不行,就怕了,然后就定义一样的,你意思是说,不用管表里声名的是啥类型,也不用管外部数组a[]的格式,都可以'%d'格式化后存入数据库中(数据库会根据表中的数据格式自动转化)? 是这样嘛? 我菜鸟一个,问的问题可能的BC了一点,多谢指教了先。
      

  10.   

    %d是格式化整形的
    %c是格式化字符的
    %s是格式化字符串的
    ……这些是C基础知识里面的你的程序中定义是int类型的数组,格式化数组的每个成员肯定应该用%d啊
      

  11.   

    我声明的数组是用来测试用的,本身定义的就是INT型的:int a[15]={1,2,3,4,1,2,3,5,6,7,8,9,1,2};数据本身已经是int了,还用“%d”格式化为int嘛?不用了吧。格式化“%d”是将数组里数据格式化后存入DB的表里的,所以应该根据表中声明的数据类型来决定用“%d”或"%s"吧?