0

我在对行号进行排序时遇到问题。我的代码输出是这样的

(801;802;803;804;805;806;807;808-814(1);808-814(2);815;;;;;;;;;;;;;;;;;840) 

并且它的分隔符将循环到 840。

Dim sqlline As DataTable = MyDB.ExecCommand("SELECT `Line Number` from `" + cboJob.Text + "` WHERE `Orig Document Begin ID`='" + mData.Rows(z).Item(0).ToString.Trim + "' ORDER BY `Line Number`", "wellsfargo").Tables(0)
                    For q As Integer = 0 To sqlline.Rows.Count - 1
                        If sqlline.Rows.Count <> 0 Then

                            If q = 0 Then
                                lNum = sqlline.Rows(q).Item(0).ToString
                            Else
                                lNum += IIf(dZ.Rows(q).Item(13).ToString <> "", ";" + sqlline.Rows(q).Item(0).ToString, ";")
                            End If
                            'lNum += IIf(sqlline.Rows(q).Item(0).ToString <> "", ";" + sqlline.Rows(q).Item(0).ToString, "")

                        End If
                    Next

但我希望我的输出是这样的。

(801;802;803;804;805;806;807;815;;;;;;;;;;;;;;;;;;;;;840;808-814(1);808-814(2))

所以所有的行号都在最后。

现在.. 编辑我有这个代码让我在单行号的末尾放置空格分隔符:

  Dim sCont As String = ""
            If dZ.Rows.Count < 40 Then
                Dim iCont As Integer = 40 - dZ.Rows.Count
                For c As Integer = 0 To iCont - 1
                    If c = 0 Then
                        sCont = ";"
                    Else
                        sCont += ";"
                    End If
                Next
                'Loop then Concatinate strings for each field value.
            ElseIf dZ.Rows.Count = 40 Then
                'Loop as is...
            End If

            Dim sVal As String()
            If dZ.Rows.Count < 40 Then
                sVal = (OrgDocbeg + "■" + _
                                OrgDocend + "■" + _
                                BEGDOC + "■" + _
                                ENDDOC + "■" + _
                                LoanNum + "■" + _
                                PCount + "■" + _
                                Path + "■" + _
                                FNum + "■" + _
                                sDate + "■" + _
                                StrConv(LNF, VbStrConv.ProperCase) + "■" + _
                                lNum + sCont + "■" + _
                                sDesc + sCont + "■" + _
                                StrConv(Amount, VbStrConv.ProperCase).Replace("Poc", "POC").Replace(".00.00", "") + sCont + "■" + _
                                sPay.Replace("^", "").Replace(" Of ", " of ").Replace(" And ", " and ").Replace(" And/or", " and/or").Replace(" By ", " by ").Replace(" 2Nd ", " 2nd ").Replace(" 3Rd ", " 3rd ") + sCont + "■" + _
                                sBorrow.Replace("$.00", "$0.00") + sCont + "■" + _
                                sSell + sCont + "■" + _
                                ProsBor + sCont + "■" + _
                                ProSell + sCont).Split("■")

            Else
                sVal = (OrgDocbeg + "■" + _
                                OrgDocend + "■" + _
                                BEGDOC + "■" + _
                                ENDDOC + "■" + _
                                LoanNum + "■" + _
                                PCount + "■" + _
                                Path + "■" + _
                                FNum + "■" + _
                                sDate + "■" + _
                                StrConv(LNF, VbStrConv.ProperCase) + "■" + _
                                lNum + "■" + _
                                sDesc + "■" + _
                                sPay.Replace("^", "").Replace(" Of ", " of ").Replace(" And ", " and ").Replace(" And/or", " and/or").Replace(" By ", " by ").Replace(" 2Nd ", " 2nd ").Replace(" 3Rd ", " 3rd ") + "■" + _
                                StrConv(Amount, VbStrConv.ProperCase).Replace("Poc", "POC").Replace("$.", "$0.") + "■" + _
                                sBorrow.Replace("$.", "$0.") + "■" + _
                                sSell.Replace("$.", "$0.") + "■" + _
                                ProsBor.Replace("$.", "$0.") + "■" + _
                                ProSell.Replace("$.", "$0.")).Split("■")
            End If

但我的输出是错误的:

 801;802;803;804;;;;;;;;808 - 817(1);808 - 817(2);808 - 817(3);808 - 817(4);808 - 817(5);808 - 817(6);;;;;;;;;;;;;;;;;;;;;;;

如果我在行号中有范围,输出应该是这样的(必须有分隔符直到 840)

801;802;803;804;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;808 - 817(1);808 - 817(2);808 - 817(3);808 - 817(4);808 - 817(5);808 - 817(6)

但如果我没有范围,正确的输出将是

801;802;803;804
4

2 回答 2

1

如果您的行代码具有固定长度,那么您可以根据长度拆分结果集,对它们进行独立排序,然后将它们与UNION ALL

Dim strQuery = "(SELECT `Line Number` FROM `" + cboJob.Text + _ 
"` WHERE LOCATE('-', line) = 0 AND `Orig Document Begin ID`='" + mData.Rows(z).Item(0).ToString.Trim + _
" ORDER BY `Line Number`) " + _ 
"UNION ALL " + _
"(SELECT `Line Number` FROM `" + cboJob.Text + _ 
"` WHERE LOCATE('-', line) > 0 AND `Orig Document Begin ID`='" + mData.Rows(z).Item(0).ToString.Trim + _
" ORDER BY `Line Number`)"

Dim sqlline As DataTable = MyDB.ExecCommand(strQuery, "wellsfargo").Tables(0)
于 2012-12-26T05:56:02.467 回答
0

至于最后评论中提到的问题,解决此问题的方法之一是:

  1. 使用 COUNT 确定您是否有范围
  2. 如果您有范围,则仅检索正常的行号并填充数字中的空白
  3. 如果您有范围,请检索它们并使用范围号构建一个字符串
  4. 连接你的字符串

这是部分甚至伪代码:

'Retrieve a count of ranges in the resultset
'Replace objConn with your connection variable 
Dim strQuery As String = "SELECT COUNT(*) AS `RangesCount` FROM `" + cboJob.Text + _ 
"` WHERE LOCATE('-', line) > 0 AND `Orig Document Begin ID`='" + mData.Rows(z).Item(0).ToString.Trim + _
" GROUP BY `Line Number`"
Dim cmdQuery As New MySqlCommand(strQuery, objConn)
Dim intHasRanges As Integer = CInt(cmdQuery.ExecuteScalar())

'Retrieve just line numbers without ranges
'
Dim strQuery As String = "SELECT `Line Number` FROM `" + cboJob.Text + _ 
"` WHERE LOCATE('-', line) = 0 AND `Orig Document Begin ID`='" + mData.Rows(z).Item(0).ToString.Trim + _
" ORDER BY `Line Number`"
Dim sqlline As DataTable = MyDB.ExecCommand(strQuery, "wellsfargo").Tables(0)

'Do your For-Next loop here and populate your first part of your string strResult 
'knowing that if intHasRanges > 0 then we have ranges and we need to fill gaps between numbers
Dim strResult As String = ""
For ...
    ...
    strResult = ...
    ...
Next

'Retrieve ranges only if we have them
'
If intHasRanges > 0 Then
    Dim strQuery As String = "SELECT `Line Number` FROM `" + cboJob.Text + _ 
    "` WHERE LOCATE('-', line) > 0 AND `Orig Document Begin ID`='" + mData.Rows(z).Item(0).ToString.Trim + _
    " ORDER BY `Line Number`"
    Dim sqlline As DataTable = MyDB.ExecCommand(strQuery, "wellsfargo").Tables(0)

    'Do your For-Next loop to populate strRanges
    '
    Dim strRanges As String = ""
    For ...
        strRanges = ...
    Next

    If srtRange.Length > 0 Then
        strResult = strResult + strRanges
    End If
End If

'Do whatever you need to do with that string
于 2012-12-27T05:00:57.940 回答