VBScript Recordset字段名称和长度

时间:2016-01-22 12:08:11

标签: sql vbscript

使用VBScript,我从SQL查询和ADO连接对象创建记录集。我需要能够将字段名称和最大字段长度写入文本文件,基本上是一个二维数组,格式为FieldName | FieldLength,带有回车分隔符,例如:

物质编号| x(13)
说明| X(92)
截止日期| x(10)

虽然我能够遍历列并写出字段名称,但我无法解决字段长度问题。代码如下:

Set objColNames = CreateObject("Scripting.FileSystemObject").OpenTextFile(LF14,2,true)
For i=0 To LF06 -1
  objColNames.Write(Recordset.Fields(i).Name & "|x(" & Recordset.Fields(i).ActualSize & ")" & vbCrLf)
Next

在这种情况下,它只写入当前选定的字段长度。

3 个答案:

答案 0 :(得分:0)

如果我正确理解了这个问题(我不确定我这样做)......

如果更改SQL语句,则只需返回一条记录。

 Select Max(Len([Matter Number])) as [Matter Number], 
  Max(Len([Description])) As Description, Max(Len([Due Date])) As [Due Date] FROM TableName

这将返回每个字段的最大长度。然后从那里构建你的输出。

答案 1 :(得分:0)

要获得集合的极值项(最大,最小......),您需要对所有元素进行循环,以检查当前元素的值是否与目前已知的极值相对应。 :

>> a = Array(1, 3, 2)
>> x = a(0)
>> For i = 1 To UBound(a)
>>     If a(i) > x Then
>>        x = a(i)
>>     End If
>> Next
>> WScript.Echo x
>>
3

答案 2 :(得分:0)

经过一些研究和测试后,我通过基于记录集字段(列)计数创建字典,然后遍历每个项目并评估每个字段的长度来解决问题:

昏暗的连接 昏暗的记录集

Set Connection = CreateObject("ADODB.Connection")
Set Recordset = CreateObject("ADODB.Recordset")

Connection.Open LF08
Recordset.Open LF05,Connection

LF06=Recordset.Fields.Count

Set d = CreateObject("Scripting.Dictionary")
Set objColNames = CreateObject("Scripting.FileSystemObject").OpenTextFile(LF14,2,true)
For i=0 to LF06 -1
  d.Add i, 0
Next

Dim aTable1Values
aTable1Values=Recordset.GetRows()

Set objFileToWrite = CreateObject("Scripting.FileSystemObject").OpenTextFile(LF07,2,true)

Dim iRowLoop, iColLoop
For iRowLoop = 0 to UBound(aTable1Values, 2)
  For iColLoop = 0 to UBound(aTable1Values, 1)
    If d.item(iColLoop) < Len(aTable1Values(iColLoop, iRowLoop)) Then
      d.item(iColLoop) = Len(aTable1Values(iColLoop, iRowLoop))
    End If

    If IsNull(aTable1Values(iColLoop, iRowLoop)) Then
      objFileToWrite.Write("")
    Else
      objFileToWrite.Write(aTable1Values(iColLoop, iRowLoop))
    End If
    If iColLoop <> UBound(aTable1Values, 1) Then
      objFileToWrite.Write("|")
    End If
  next 'iColLoop
  objFileToWrite.Write(vbCrLf)
Next 'iRowLoop

For i=0 to LF06 -1
  d.item(i) = d.item(i) + 3
  objColNames.Write(Recordset.Fields(i).Name & "|x(" & d.item(i) & ")" & vbCrLf)
Next 

然后我有两个文本文件,一个带有字段名称和长度,另一个带有查询结果。然后,我可以从结果中在CMS(VisualFiles)中创建一个二维数组。