Какие строки были удалены? [Дубликат]

Я подозреваю, что причина , что переходы отключены, если «отображение» изменено, связано с тем, что на самом деле делает дисплей. Он не не изменяет ничего, что могло бы быть плавно анимировано.

«display: none» и «visibility: hidden;» - это два полностью разные вещи. Оба имеют эффект, делающий элемент невидимым, но с «видимостью: скрытым», он по-прежнему отображается в макете, но только не заметно . Скрытый элемент по-прежнему занимает пробел и по-прежнему отображается как встроенный или как блок или блок-строка или таблица, или что-либо, что элемент «display» сообщает ему, чтобы отображать как, и соответственно занимает место. Другие элементы not автоматически переместятся, чтобы занять это пространство. Скрытый элемент просто не отображает фактические пиксели на выходе.

«display: none», с другой стороны, фактически полностью предотвращает элемент от рендеринга . Это не занимает любое пространство макета . Другие элементы, которые заняли бы некоторое или все пространство, занимаемое этим элементом, теперь будут зависеть от этого пространства, как будто элемент просто вообще не существовал .

«Display» - это не просто еще один визуальный атрибут. Он устанавливает весь режим рендеринга элемента, например, будь то блок, встроенный, встроенный блок, таблица, таблица-строка, таблица-ячейка, список-элемент или что-то еще! У каждого из них очень разные разметки разметки, и не было бы разумного способа оживить или плавно перевести их (попробуйте представить плавный переход от «блока» к «встроенному» или наоборот, например!).

Вот почему переходы отключены, если отображение изменяется (даже если изменение имеет значение «none» или «нет» - «none» - это не просто invisiblity, это его собственный режим рендеринга элементов, что означает отсутствие рендеринга вообще!),

3
задан Sjon 10 October 2015 в 14:09
поделиться

3 ответа

SQLite не поддерживает это расширение для стандартного SQL - вам нужно использовать оба оператора, сначала SELECT, DELETE next. Конечно, вы можете обернуть их в транзакции (инструкции BEGIN и COMMIT до и после этого гарантируют), чтобы гарантировать атомарность и согласованность.

10
ответ дан Alex Martelli 25 August 2018 в 07:48
поделиться

Вы можете сделать это, разделив два оператора точкой с запятой, например. (с использованием .NET-сервера SQLite):

using (SQLiteConnection conn = new SQLiteConnection("Data Source=fie.db3"))
{
  conn.Open();

  using (var cmd = conn.CreateCommand())
  {
    cmd.CommandText = "SELECT id FROM fies; DELETE FROM fies WHERE id = 5;";
    using (var reader = cmd.ExecuteReader())
    {
      while (reader.Read())
      {
        Console.WriteLine(reader[0]);
      }
    }
  }
}
-2
ответ дан itowlson 25 August 2018 в 07:48
поделиться

Предполагая, что ваш вызывающий поток / процесс имеет уникальный идентификатор (например, thread_id), я думаю, что жизнеспособным подходом было бы добавить в вашу таблицу флаг (скажем, «handlerid»), который имеет значение null для вставки и то выполните:

update db set handlerid = <my_thread_id> where handlerid is null;
select * from db where handlerid is not null and handlerid = <my_thread_id>;
delete from db where handlerid is not null and handlerid = <my_thread_id>;

Не знаете, как это будет выполняться по сравнению с транзакцией, но не может думать о какой-либо причине, что было бы намного хуже (может быть, даже лучше), и используя этот подход, код кажется так же просто, как вы можете получить. в отличие от транзакции, вам не понадобится цикл в случае сбоя транзакции, чтобы быть уверенным, что все незавершенные элементы, которые были в таблице во время последнего SELECT, были обработаны.

0
ответ дан mwag 25 August 2018 в 07:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: