安排计划程序

时间:2014-07-07 19:27:44

标签: sqlite vba xojo

我的家族拥有一家中型运输公司,当我3年前进入这家公司时,我们没有软件可以管理我们必须做的所有运输工具。有20个司机这是一个问题,所以我坐下来,学习了VBA的基础知识,并通过电子邮件向我们的不同司机管理/发送不同的旅行。它"工作"目前我们正在计划未来的扩展,所以我开始学习Xojo(即时通讯,最接近VBA)

我们收到一份Excel文件,告诉我们提前一天要去哪些旅行(我们运送人员)。基本上,它是一张包含所有不同客户的表格。我在一个"周文件"中导入了这张表。之后通过不同的宏使用数据。这张表中有很多不相关的信息,但我们感兴趣的专栏也是Type,Number和Hour。

所以基本上,我必须把我所有的行(100+),按类型和数字分组,然后按小时排序。

下面是一个快速示例,说明我的工作表在排序时的样子(不同的颜色是不同的驱动程序):
sorted sheet

我认为我得到这个结果的程序并不是那么好。我循环使用数据表(隐藏)中的所有行,使用If语句检查其是否为新类型或行程编号,将时间和行引用(第一行,最后一行)保存在数组中,然后循环用于导出显示工作表上的范围的数组。请记住,我在得知VBA存在后3周写了这篇文章。它"工作"但我想拥有一个更好的过程。

我将使用SQLite将所有信息存储在我开始编写的应用程序中。我想建议如何使用SQL更快地对我的所有数据进行排序。我正在寻找一个程序,我可以找到一种方法来编码。

下面是我所制作代码的示例。

    For RowSearch = 2 To RowCount
        If Sheets(DataSheetName).Cells(RowSearch, 2).Value <> Sheets(DataSheetName).Cells(RowSearch - 1, 2).Value _
        Or Sheets(DataSheetName).Cells(RowSearch, 3).Value <> Sheets(DataSheetName).Cells(RowSearch - 1, 3).Value Then
            Blocks(TripCount, 1) = Position
            Blocks(TripCount, 2) = RowSearch - 1
            Blocks(TripCount, 3) = Format(Sheets(DataSheetName).Cells(Position, 4).Value, "hh:mm")
            TripCount = TripCount + 1
            Position = RowSearch
        End If
    Next RowSearch

    Blocks(TripCount, 1) = Position
    Blocks(TripCount, 2) = RowSearch - 1
    Blocks(TripCount, 3) = Format(Sheets(DataSheetName).Cells(Position, 4).Value, "hh:mm")

'Sorts the blocks by time, loops trought the trips row range to sort the trips by time and type and writes the blocks
    RowSelect = 1

    For BlockSearch = 1 To TripCount
        TempHour = "99:99"

        For RowOrder = 1 To TripCount
            If Blocks(RowOrder, 3) <= TempHour Then
                TempHour = Blocks(RowOrder, 3)
                Trips(BlockSearch, 1) = Blocks(RowOrder, 1)
                Trips(BlockSearch, 2) = Blocks(RowOrder, 2)
                RowChange = RowOrder
            End If
        Next RowOrder

        RowRange = Trips(BlockSearch, 2) - Trips(BlockSearch, 1) + 1
        FieldValue = Sheets(DataSheetName).Range("A" & Trips(BlockSearch, 1) & ":" & "R" & Trips(BlockSearch, 2))
        Sheets(SheetName).Range("A" & RowSelect & ":" & "R" & RowSelect + RowRange - 1) = FieldValue
        Sheets(SheetName).Rows(RowSelect + RowRange).Insert Shift = xlDown
        RowSelect = RowSelect + RowRange + 1
        Blocks(RowChange, 3) = "99:99"
    Next BlockSearch

1 个答案:

答案 0 :(得分:2)

在SQL中,&#34;分组&#34;是一种操作,不仅将行分成组,还聚合所有组的行,为每个组创建单个输出行。

在您的示例中,行只是按类型,数字和小时排序,这需要这样的查询:

SELECT *
FROM MyTable
ORDER BY Type, Number, Hour