我有一个宏,它连接到数据库并为我获取数据,并将其以逗号分隔。但问题是逗号被附加到最后一行,这是我不想要的。我在这里苦苦挣扎。你能帮帮我吗?
以下是代码的一部分。
If cn.State = adStateOpen Then
Rec_set.Open "SELECT concat(trim(Columns_0.ColumnName), ' ','(', 'varchar(2000)' ,')') columnname FROM DBC.Columns Columns_0 WHERE (Columns_0.TableName= " & Chr(39) & Tablename & Chr(39) & "and Columns_0.Databasename=" & Chr(39) & db & Chr(39) & ")ORDER BY Columns_0.Columnid;", cn 'Issue SQL statement
If Not Rec_set.EOF And Not Rec_set.EOF Then
Do Until Rec_set.EOF
For i = 0 To Rec_set.Fields.Count - 1
strString = strString & Rec_set(i) & ","
Next
strFile.WriteLine (strString)
strString = ""
Rec_set.MoveNext
Loop
这是我得到的结果。
EMPNO (varchar(2000))、ENAME (varchar(2000))、JOB (varchar(2000))、MGR (varchar(2000))、HIREDATE (varchar(2000))、SAL (varchar(2000))、COMM (varchar(2000))、DEPTNO (varchar(2000))、
我不想要最后一行的最后一个逗号。
答案1
经过大量的研发,这个已经可以运行了。
Do Until Rec_set.EOF
For i = 0 To Rec_set.Fields.Count - 1
strString = strString & Rec_set(i) & "," & vbNewLine
Next
Rec_set.MoveNext
Loop
strString = Left(strString, Len(strString) - 3)
strFile.WriteLine (strString)
strString = ""
但请让我知道,这是否会产生任何问题,尽管它给出了预期的结果!
答案2
像这样的事情应该可以做到:
Do Until Rec_set.EOF
For i = 0 To Rec_set.Fields.Count - 1
strString = strString & Rec_set(i)
if i < Rec_set.Fields.Count - 1
strString = strString & ","
end if
Next
strFile.WriteLine (strString)
strString = ""
Rec_set.MoveNext
Loop
这样,它会在循环的每次迭代中将记录集信息附加到 strString,但仅在循环的最后一次迭代之外的所有迭代中附加逗号。
答案3
Next
输入下面这行之后:
If Len(strString)>1 Then strString = Left(strString, Len(strString) - 1)
此条件检查您在尝试删除尾随逗号之前是否已从记录集中实际构建了一个字符串。