3

私は 1 日に複数の区間を飛行するパイロットです。フライトを記録するために使用するソフトウェアは、csv ファイルを吐き出し、すべての区間を個別にリストします。ms アクセスで csv ファイルをテーブル 1 にインポートします。同じ日のすべてのフライトを新しいテーブルの 1 つのレコードにマージしたいと考えています。私の問題は、ルートを組み合わせて時間を追加することです。

表1

   Date       Plane     From     To     Time
2009-10-13    111WS     CHO      LGA    120
2009-10-13    111WS     LGA      ITH    100
2009-10-13    111WS     ITH      LGA     90
2009-10-13    111WS     LGA      BOS    110

表 2

   Date       Plane          Route            Time
2009-10-13    111WS    CHO-LGA-ITH-LGA-BOS     420

これを行うために VBA コードを使用したいと考えていますが、12 年間プログラミングを行っていないため、残念ながら再学習する時間がありません。コードが複雑すぎる必要はないと思います。かなり簡単に思えます。私はそれを行う方法がわかりません。誰かが私を助けてくれることを願っています。前もって感謝します。

注: MS Access 97 を使用しています (問題がないことを願っています)/ 日付フィールドは文字列であり、日付ではありません/ 時間は分単位であり、そのままでかまいません/ 通常、テーブルには 80 を超えるレコードはありません1/ 1 日に 1 ~ 8 便のフライトがあります/

4

4 に答える 4

3

集計クエリを作成し、テーブルを取り込み、DateおよびTimeを列として含めます。合計行で日付列を に設定しGroup By、時刻を に設定する必要がありますSum。ルートの最終エントリを取得するために別の列も必要になるため、そのTo列もグリッドに配置し、その列の [合計] 行を に設定しますLast

ルートの残りを取得するには、次のような結合関数を使用する必要があります。

サブレコード値の連結リストを返します
http://www.mvps.org/access/modules/mdl0004.htm

これにより、FROM 列が 1 つの値に結合され、出力に別の列として含めることができます。この列の合計行を に設定しますExpression

完全なルートを取得するには、連結された FROM 列を LAST TO 列と結合します。

クエリ全体を一度に作成する必要はないことに注意してください。3 つの部分 (合計時間、連結ルート、最終目的地) をそれぞれ個別に (独自のクエリで) 構築し、各部分が個別に機能することを確認してから、それらを 1 つのクエリに結合します。

于 2009-10-19T21:01:47.343 に答える
0

ご回答ありがとうございます。「THEn's」の答えを使用しましたが、いくつか変更する必要がありました(問題がないことを願っています)。日付でグループ化されたフライトだけが必要だったので、飛行機でグループ化を解除し、その日の最初の区間で最初の飛行機を記録しました。また、ソフトウェアがcsvファイルを逆の順序でエクスポートすることがわかったので、これを考慮してモジュールを少し変更しました。したがって、インポートされたデータは次のようになります(CHOで開始および終了します)。

  Date       Plane     From     To     Time
2009-10-14    111WS     LGA      CHO    120
2009-10-14    111WS     BOS      LGA    110
2009-10-13    111WS     LGA      BOS    110
2009-10-13    111WS     ITH      LGA     90
2009-10-13    111WS     LGA      ITH    100
2009-10-13    111WS     CHO      LGA    120

これはモジュールです:

Public Function ConcatField(FieldName As String, TableName As String, Where As String, Optional Delimeter = "-") As String

Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("SELECT " & FieldName & " FROM " & TableName & " WHERE " & Where)
rs.MoveLast
While Not rs.BOF
    ConcatField = ConcatField + IIf(ConcatField = "", "", Delimeter) + rs.Fields(0)
    rs.MovePrevious
Wend
ConcatField = ConcatField + "-" + DLookup("To", "rte", Where)
rs.Close
Set rs = Nothing
End Function

これはクエリです:

SELECT rte.Date, First(rte,plane), ConcatField("From","rte","Date='" & [Date] & "'") AS Expr1, Sum(rte.time) AS [Total Time]
FROM rte
GROUP BY rte.Date;

openrecordset行で「From」というフィールドを使用しているため、これにより問題が発生します。フィールドの名前を別の名前に変更しようとしましたが、完全に機能しました。ただし、フィールド名をそのままにしておくことを望んでいました。openrecordset行でフィールド名「To」を使用しているときに機能しましたが、データの順序が逆であるという問題が発生していました。そこで提案を探していましたが、フィールド名は同じにしておきたいので、できれば表の順番を逆にしておきたいと思います。みんなありがとう。

于 2009-10-21T21:01:45.913 に答える
0

モジュールを追加

Public Function ConcatField(FieldName As String, TableName As String, Where As String, Optional Delimeter = "-", Optional OrderBy = "") As String
    Dim rs As DAO.Recordset
    Set rs = CurrentDb.OpenRecordset("SELECT " & FieldName & " FROM " & TableName & " WHERE " & Where & IIf(OrderBy > "", " ORDER BY " & OrderBy, ""))
    ConcatField = DLookup("From", "RTE", Where)
    While Not rs.EOF
        ConcatField = ConcatField + IIf(ConcatField = "", "", Delimeter) + rs.Fields(0)
        rs.MoveNext
    Wend
    rs.Close
    Set rs = Nothing
End Function

クエリを実行します

私に取り組んだ

SELECT rte.Date, rte.Plane, ConcatField("to","rte","Date='" & [Date] & "' AND Plane='" & [Plane] & "'") AS Expr1, Sum(rte.Time) AS SumOfTime
FROM rte
GROUP BY rte.Date, rte.Plane, ConcatField("to","rte","Date='" & [Date] & "' AND Plane='" & [Plane] & "'");
enter code here
于 2009-10-19T22:50:54.777 に答える
0

ACE (Access 2007) とは異なり、Jet 3.51 エンジン (Access97) には複数値型がありません。SQL 言語 (Access データベース エンジン独自の独自の SQL を含む) には「連結」関数がありません。これは、スカラー型を必要とする第 1 正規形 (1NF) に違反するためです。したがって、これは SQL クエリ用のものではありません。私にはレポートの候補のように聞こえます。

1NF といえば、1 日に 2 回同じ目的地に飛ぶ可能性があることを考えると、テーブルにはリレーショナル キーがありません。DATETIME「テキスト」として入力された単一の「日付」列を、期間を表す値のペア、必要な「順序付けられた主キー」、たとえばCHECK期間の重複を防ぐための制約に置き換える必要があるようです。テンポラル データベースは決して自明ではありません。

于 2009-10-20T11:07:52.033 に答える