0

SQLite データベースにクエリを送信するときに問題に直面しました。

問題は、データベース (Excel シートに由来する) に空のセルがあり、同じ列に上のセルから与えられた値があるはずです。

つまり、値が変わらない場合、Excel シートの作成者は同じ列のセルを空白のままにしています。私は実際にそれらのセルに値が必要です!

シート/データベースのサイズが原因でこれを手動で行うことはできません。プログラムでこれを行う方法はありますか?

もしあれば、私は本当にSQLクエリの方法を好むでしょう!

よろしくお願いします、Tor

4

3 に答える 3

2

これはエクセルでできます。ここで同様の質問に答えました:

CSV からの Excel ファイルの空白値 (行だけではない)

これを完全に Excel で行うこともできます。

列 (または作業している任意の範囲) を選択し、[編集] > [移動] (Ctrl+G) に移動して、[特別] をクリックします。空白にチェックを入れ、OK をクリックします。これにより、リスト内の空のセルのみが選択されます。ここで = キーを入力し、次に上矢印と ctrl-enter を入力します。

これにより、すべての空白セルに式が配置され、その上のセルと等しくなります。その後、数式を削除するためだけに値をコピー ^ 貼り付けできます。

于 2012-03-12T19:37:44.727 に答える
0

@maneeshaによって提案された方法と同様の方法は、空白のセルでフィルタリングし、「上位のセルに等しい」数式を記述してから、フィルターをクリアすることです。

しかし、@maneeshasのソリューションの方がクールだと思います。

于 2013-02-07T09:37:05.233 に答える
0

データベース全体にクエリを実行し、元の並べ替え順序を維持してから、各行を反復処理します。何かが空の場合は、上記の値で更新します。

編集:ここでこれに似たものでそれを行うかもしれません:

SQLiteDatabase db = SQLiteDatabase.openDatabase("myDb.db", null, SQLiteDatabase.OPEN_READWRITE);
Cursor c = db.query("table", null, null, null, null, null, "the column that defines the sort order");
if (c != null) {
    int columnCount = c.getColumnCount();
    String[] lastValues = new String[columnCount];
    while (c.moveToNext()) {
        ContentValues cv = new ContentValues();
        for (int i = 0; i < columnCount; i++) {
            String value = c.getString(i);
            if (TextUtils.isEmpty(value)) {
                // if that happens on first column you are screwed anyways.
                cv.put(c.getColumnName(i), lastValues[i]);
            } else {
                lastValues[i] = value;
            }
            // we need to save some id here
        }
        if (cv.size() > 0) {
            // use the id here
            db.update("table", cv, "column=?", new String[] { "id" });
        }
    }
    c.close();
}

ただし、Excel を使用してデータベースを修正することをお勧めします。その方が簡単で、上記のコードを理解する必要はありません。

于 2012-03-12T19:11:33.787 に答える