请教下 adodb.recordset.fields().value 的返回值长度
vb吧
全部回复
仅看楼主
level 5
我mssql表里的数据字段值,明明长度是2,但是VB下用 recordset.fields()或者 recordset.fields().value 取得的字段值长度是10,百思不得其解,求大神指点
2021年07月14日 01点07分 1
level 5
2021年07月14日 01点07分 2
level 5
2021年07月14日 01点07分 3
吧务
level 13
好像表达式是这样的:
对于【ADODB】rs.Fields(i).Value ' 字段内容,【.Value】可省略
对于【ADODC】Adodc1.Recordset.Fields(i)

看看你的
命令是怎么样的,用的什么数据库表控件?
2021年07月14日 01点07分 4
你用的【ADODB】模式,第一项字段内容长度应该是【Len(rst.Fields(1))】
2021年07月14日 01点07分
如果字段内有空格,应该是【Len(Trim(rst.Fields(1)))】
2021年07月14日 01点07分
@Luosen56 您好,我现在实际应用已经加了trim了,我并没有加任何ADODB的控件,只是引用了后,在事件中敲出来的, 因为我的最终目的是将表以csv形式输出,但 recordset.fields取得的字段值居然带有空格,这让我不解
2021年07月14日 01点07分
请参看五楼的代码,看看你有些什么工作没有做到位?
2021年07月14日 02点07分
吧务
level 13
' 在 VB 中使用数据库表【ADODB】的步骤——
' ⑴ 点击顶行菜单中的:工程 → 引用;勾选
'   Microsoft ActiveX Data Objects 6.1 Library
'   C:\Program Files\Comm Files\System\Ado\msado15.dll
' ⑵ 声明全局变量
Dim cn As Object ' 数据库连接对象变量
Dim rs As Object ' 数据表记录集变量
Dim mLink As String ' 数据库文件连接字符串
Dim mSQL As String ' 使用数据库表的SQL命令字符串
' ⑶ 构成连接字符串 mLink
Public Sub 连接数据()
Dim DbUser As String, DbPw As String
Dim DbName As String, DbIP As String
DbUser = "用户名"
DbPw = "用户密码"
DbName = "数据库名"
DbIP = "服务器IP"
mLink = "Provider = MSDataShape"
mLink = mLink & "; Data PROVIDER = MSDASQL"
mLink = mLink & "; UID = " & DbUser
mLink = mLink & "; PWD = " & DbPw
mLink = mLink & "; DRIVER = SQL Server"
mLink = mLink & "; DataBASE = " & DbName
mLink = mLink & "; WSID = GQSOFT"
mLink = mLink & "; SERVER = " & DbIP
End Sub
' ⑶ 连接并打开数据库表
Public Sub 打开数据()
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
Call 连接数据
mSQL = "Select * From 表名"
cn.Open mLink
rs.Open mSQL, cn, 1, 3
' 将数据填表并刷新表格控件
Set MSHFlexGrid1.DataSource = rs
MSHFlexGrid1.Refresh
End Sub
' ⑷ 【Call 打开数据】即可看到表格中有数据了。
' :
2021年07月14日 02点07分 5
吧务
level 13
2021年07月14日 02点07分 6
老师你好,谢谢你给我导出csv的完成方法,但是我仍然想知道为什么 mssql数据库中 len()为 2 的字段值,用 adodb.fields获取后,字段值的长度 与在数据库中存储的长度不一致,仅仅想钻个牛角尖,您自己也可以测试
2021年07月14日 03点07分
不是不一样,是你的表达式有问题。【Len(Trim(rst.Fields(1)))】中,没有【adodb.fields】这样的短句。
2021年07月16日 04点07分
吧务
level 13
6楼有一个全局性变量【mPath】,用于记忆程序刚进入时的【绝对路径】。
Public mPath As String ' 程序所在的绝对路径
Private Sub Form_Load() ' 初始化程序
mPath = App.Path ' 获取路径(结束位置是反斜杠)
If Right(mPath, 1) <> Chr(92) Then
mPath = mPath & Chr(92)
End If
' ……
End Sub
2021年07月14日 02点07分 7
用【mPath】代替内部变量【App.Path】的好处是:内部变量【App.Path】将在浏览文件位置时发生改变,特别是【通用对话框】或【文件夹】控件的使用。这一技巧对于频繁发生磁盘信息交换的程序中十分重要。
2021年07月14日 02点07分
@Luosen56 多谢老师了,我本来只想取一瓢井水,你把整个池塘都搬来了
2021年07月14日 03点07分
这在数据库理论和应用中,仅仅是【沧海一粟】,所以谈不上【池塘】。这些仅仅是数据库程序设计的入门而已。
2021年07月16日 04点07分
level 7
受益良多
2021年07月15日 03点07分 8
level 11
查下nvarchar(20)
2021年07月15日 18点07分 9
2021年07月16日 04点07分
1