首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

关于INSERT INTO使用的有关问题

2012-04-02 
关于INSERT INTO使用的问题问题如下:TABLE1 是表名,number和receive_data是列名,datacount1是长整形变量,t

关于INSERT INTO使用的问题
问题如下:
  TABLE1 是表名,number和receive_data是列名,
  datacount1是长整形变量,temp是字符型变量
  把temp的内容插到numner等于7的行里,下面的没错,
  sql="INSERT INTO TABLE1 (number,receive_data) VALUES (7,"+temp+")";
  ADOQuery1->Connection=ADOConnection1;
  ADOQuery1->Close();
  ADOQuery1->SQL->Clear();
  ADOQuery1->SQL->Add(sql);
  ADOQuery1->ExecSQL();
  但是当把7换成变量datacount1时,INSERT INTO该怎么用?
  求个位帮我 看看.

[解决办法]
这个与BCB无关,与数据库的SQL有关
你的receive_data是字串型,而某些数据库的SQL也有像BCB的自动类型转换,你的temp为纯数字时,它会自动转成字串,但有其它字符时,它就不能转了
标准SQL规定,字串要加一对'',所以BCB提供了QuotedStr,而且能自动处理本身带'的串

[解决办法]
sql = "insert into table1(number,receive_data) values(:t1,:t2)";
 ADOQuery1->Connection=ADOConnection1;
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add(sql);
ADOQuery1->Parameters->ParamByName("t1")->Value = 整型变量;
ADOQuery1->Parameters->ParamByName("t2")->Value = temp;
ADOQuery1->ExecSQL();

不论temp是啥都可以。。
你说的是数字行,是字母不行是跟数据库解析sql语句的方式有关系,不是所有数据库上都行。
有的数据库支持强制转换,有的数据库不支持就报错。。。你用的数据库支持强制转换,所以不带引号的时候temp被强制转换了。
如果temp是字符的时候,没办法强制转换。。。
还是应该用QuotedStr才对

热点排行