只能读,不能设置,你要设置他字段的type不是不可能。
'//在查询里就把字段原始类型给设置了我按你的方法在查询里就把字段原始类型给设置了
如:Adodc1.RecordSource="Select CStr(序号)from [Sheet1$]"
但是执行下面代码:
Set MSHFlexGrid1.DataSource = Adodc1
MSHFlexGrid1.Refresh
会报错。
请问高手这是为什么?有什么办法解决吗?
把源代码给我看一下:
邮箱:[email protected]
怎么可能呢,VB是乱报错的,位置没那么准确,MSHFlexGrid1跟数据类型没有一丁点关系。八杆子打不着
我已经发过去了,麻烦您帮我看看!谢谢!
追答你还是比较聪明的,知道用变量存取字符串,但是忽略一点,Excel读来的数据默认原始类型,他自己本身也是一个Windows应用程序,不是数据库,他格式的限制不是存储过程上的限制,是显示在Sheets.Cells的简单限制,你用表格读出来的就是他的原形,用VS.NET 的dataGridView、Java的Tables读出来是一样的效果。MSHFlexGrid与DataGrid区别就在于这里,没有处理这样的数据,VSFlexGrid就处理过了。你修改后的唯一错误是根本就没查到数据,本来就是文本形式,为什么还有强制转换成文本形式呢?重复定义会引起查询错误。还有一点你没忽略数据混淆,在连接语句后加上:HDR=YES意思是把一列作为标题,加上EMIX=1意思是避免数据混淆引起的错误。尽量用数据库,不要用Excel操作
我的意思是能不能转换这个adodc1.recordset.filed(i).type的类型,就是type的类型,不是数据的强制类型转换。
因为我加载数据文件的时候type已经自动确定了,比如某字段里的数据大多数是浮点类型,它就自动识别type=5,但是我后续需要向该字段添加文本"abc",这个时候就会报错“类型不匹配”
能不能把type转换成文本类型(202)。
那只改在数据库里面改字段类型了
请问具体如何类型转换:
比如我读取到Adodc1.Recordset.Fields(2).Type 为5,是数字类型,我后续需进行Adodc1..Recordset.Fields(2)=”abc"操作,就会报错“类型不匹配”,请问我具体如何转换Type?
谢谢!
我这种操作方式本来就不合理,怎么可以所字符串存到数值类型的字段中呢?你得改表,把原来的数值字段类型改成文本型:Access中的文本类型或SqlServer中的NVARCHAR型。不同类型的数据存储结构是不同的,不能乱放。
嗯,我开始Adodc1.Recordset加载数据表时,Type的类型已经自动设定好了,比如说我数据表这个字段的都是数字,它自动识别Type=5,但是我后续需向数据表添加记录是字符,就会报错说“类型不匹配,我想把Type统一设定为202(文本型),这个具体怎么操作?如何强制转换?谢谢!
追答数据库中的字段类型是数字类型,你非要把文本放进去,那根本就放不进去,肯定提示类型不匹配。
如果你把数字放入文本类型的字段中,不会报错,因为自动在后台转换了,比如数字15,系统自动就转换成字符串"15"了。
因为不同数据类型存储方式不同,就说上面的数字15和字符串"15"吧:
如果定义字段1为int16类型,那么这个字段只占用2个字节,能存放有符号-32768~32767之间的数或者无符号0~65535之间的数,把15存进去的话高字节为0,低位字节为15;但是如果是字符串类型的话,每个字符占有1个字节,"15"这个字符串就占有2个字节,第1个字节存放字符"1"的ASCII码49,第2个字节存放字符"5"的ASCII码53,这样的话,你把字符串"15"不经过转换数字类型来读的话,结果是121597,那结果跟15相差多了。
说了这么多,意思就说说,不同的数据类型存储结构不同,不能混用。有些能够混用且没有报错的,那是因为系统能够自动转换,如果系统不能自动转换,肯定要报错的。
数据库设计的时候,表格的字段数据类型是根据需要设计好的,一般不再更改。如果你想在这个字段既存储数字又存储字符串,那就把字段的数据类型设置为文本类型或者字符类型的。读的时候再转换