twy1392336 2008-4-17 22:09
datagrid就不能显视新记录集字段的数据.
datagrid原本什么数据类型都能显视的一个记录集的数据赋予另一新记录集后,datagrid就不能显视新记录集字段的数据.
报 " 实时错误'-2147217887 (80040e21)多种操作产生错误.请检查每一步的状态值."代码如下.
Dim i As Integer
Dim objDataSource As New Recordset
For i= 0 To Adodc1.Recordset.Fields.Count - 1
objDataSource.Fields.Append Adodc1.Recordset.Fields(i).Name, _
adVarChar, _
Adodc1.Recordset.Fields(i).DefinedSize
Next
objDataSource.Open
For i = 1 To Adodc1.Recordset.PageSize
objDataSource.AddNew
objDataSource!打单日期 = Adodc1.Recordset!打单日期
objDataSource!单位名称 = Adodc1.Recordset!单位名称
objDataSource!金额 = Adodc1.Recordset!金额
objDataSource!打单人 = Adodc1.Recordset!打单人
Adodc1.Recordset.MoveNext
If Adodc1.Recordset.EOF Then Exit For
Next
Set DataGrid1.DataSource = objDataSource
感觉是原来的记录集里没有数据类型的限制,但数据到了新的记录集时却有了数据类型和不能为NULL等限制了.为什么??
请教各高手与Nothing。这是不是跟第5行代码的 adVarChar 有关呢??
Nothing 2008-4-17 22:36
你的错误是在哪里出现的?
adVarChar应当取Adodc1.Recordset.Fields(i)的数据类弄吧。
下面这样的写法很不好
objDataSource!打单日期 = Adodc1.Recordset!打单日期
最好写成
objDataSource.Fields("打单日期").Value = Adodc1.Recordset.Fields("打单日期").Value
如果想简单一点,可以使用With
twy1392336 2008-4-17 23:46
在打单日期出现,后把access数据库里把打单日期的[日期/时间]类型与为[文本],再把金额字段的数据类型由[数字]与为文本,就不报" 实时错误'-2147217887 (80040e21)多种操作产生错误.请检查每一步的状态值.",但还是报一个 “实时错误'-2147217887 (80040e21)非空列不能为NULL”,真烦人,~!为什么原来的记录集在datagrid什么数据类型都能显视,新记录集就不能呢??
twy1392336 2008-4-17 23:53
我把与objDataSource有关的代码去掉后,直接用原来记录集即Adodc1.Recordset,就不存在上述问题了,但这样不好,因为一个datagrid控件一下子就把数据库里的所有数据都打开,而文件太大,所以程序启动时,就显得特慢才能打开,更看不出分页显视的效果。
Nothing 2008-4-18 17:41
在哪一行出错啊?
你难道没有试试?adVarChar应当取Adodc1.Recordset.Fields(i)的数据类形。
Adodc1.Recordset.Fields(i).Type
twy1392336 2008-4-18 22:39
谢高手NOTHING
小弟在Nothing的指点下终于把上述问题搞定了.代码如下.
For i= 0 To Adodc1.Recordset.Fields.Count - 1
objDataSource.Fields.Append Adodc1.Recordset.Fields(i).Name, _
Adodc1.Recordset.Fields(i).Type, _
Adodc1.Recordset.Fields(i).DefinedSize,_
adFldIsNullable
Next