У меня есть макрос, который подключается к БД и извлекает данные для меня и разделяет их запятыми. Но проблема в том, что к последнему ряду добавляется запятая, чего я не хочу. Я борюсь здесь. Не могли бы вы помочь?

Вот часть из кода.

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)),

Я не хочу последнюю запятую в последней строке.

3 ответа3

2

После большого количества RnD этот работает.

  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 = ""

Но, пожалуйста, дайте мне знать, если это создаст какие-либо проблемы, хотя и даст желаемый результат!

1

Примерно так должно это сделать:

  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 на каждой итерации цикла, но добавляет только запятую во всех, кроме последней итерации цикла.

1

После Next введите строку ниже:

If Len(strString)>1 Then strString = Left(strString, Len(strString) - 1)

Это условие проверяет, что вы на самом деле построили строку из набора записей, прежде чем пытаться удалить завершающую запятую.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .