读书人

关于INSERT INTO使用的有关问题

发布时间: 2012-04-02 19:58:59 作者: rapoo

关于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才对

读书人网 >C++ Builder

热点推荐