SQL server字段名中有数据类型为text时,adoquery->fieldbyname->asstring取不到全部值。
提供两种方法:
方法1.
首先将text数据类型转换为varchar(8000),形成新的字段名,在通过新的字段得到全部值。具体查询语句参考:
select top 1 *,CAST(cont as varchar(8000)) as cont_varchar from 表名;
注:
(1)top 1 :取出第一行;
(2)cast(cont as varchar(8000)) as cont_varchar
将cont这个text类型的字段转换为新的字段cont_varchar,如果不更改字段名,可能查询结果还是得不到全部值;
注意:这里sqlserver版本>=2500(9.0以上)的,8000可以改为MAX;
<=2000(8.0一下)的,最大为8000,数据长度超过该值会报错。
(3)从表中查询所有字段,”*”后要加逗号“,”,否则查询语句报错。
方法2.
通过空间TDBMemo方式来直接获得text字段的值。
adoconnect设置数据库连接;dbGo
adoquery 查询数据库; dbGo
datasource从adoquery中获得数据;data access
dbmemo 通过datasource得到数据。data control
具体参考:
`
String SQLStr = “”; //sql语句
TADOConnection adoconn;
TADOQuery adoquery;
TDataSource datasource;
TDBMemo memo;
adoconn->connectionString = “”; //连接字符串,这里不多说。
adoconn->LoginPrompt = false; //登陆提示:不提示
adoconn->ConnectionTimeout = 40;//这里视网络状况而定
adoconn->Connected = true; //连接数据库
adoquery->Connection = adoconn;
adoquery->SQL->Clear();
adoquery->SQL->Add(SQLStr);
adoquery->Prepared = true;
adoquery->Active = true; //激活查询语句
datasource->DataSet = adoquery;
datasource->Enabled = true;
demo->DataField = “cont”;
String tmp = memo->Text;
`
综述:
方法1已测试成功,方法2是以为大神帮忙,我自己写的,思路没有问题,不过最终结果没有实现,如果大家看出其中的错误,请及时告知!
头一次把自己刚学到的东西总结分享,对大家有用最好,没用就当练手吧!呵呵。。。