Изменение идентификаторов базы данных от консоли направляющих?

Проблема в том, что вы вызываете GetGridData из фонового потока. Этот метод обращается к нескольким элементам управления WPF, которые привязаны к основному потоку. Любая попытка доступа к ним из фонового потока приведет к этой ошибке.

Чтобы вернуться к правильной теме, вы должны использовать SynchronizationContext.Current.Post. Однако в этом конкретном случае, похоже, большая часть работы, которую вы выполняете, основана на пользовательском интерфейсе. Следовательно, вы создадите фоновый поток, чтобы сразу вернуться к потоку пользовательского интерфейса и выполнить некоторую работу. Вам нужно немного реорганизовать свой код, чтобы он мог выполнять дорогостоящую работу в фоновом потоке, а затем публиковать новые данные в потоке пользовательского интерфейса после

16
задан nmiller 13 January 2009 в 02:10
поделиться

3 ответа

я должен был бы возможно сделать это через прямой SQL в sqlite?

Да.

смысл ActiveRecord, это - функции DB кратких обзоров и просто возвращает наборы данных. Вы не должны волноваться об идентификаторе записи, которая является чем-то характерным для DB. Первое, что пришло на ум я не могу думать ни о каких причинах сослаться на идентификатор модели.

, Если Ваше приложение зависит от наличия упорядоченного числа тогда, необходимо добавить другое поле к модели, которая имеет это. Например, если у меня есть хранилище с продуктами (Модель продукта), и я даю Идентификационный номер, который DB предоставляет другим поставщикам. Две недели спустя мой босс просит, чтобы у меня был уникальный, но подобный идентификатор для двух изменений продуктов: "45a" и "45b". Гайки. Поле ID должно только привыкнуть к [1 113] база данных и ActiveRecord, не Вы или Ваши пользователи, для идентификации записи.

существует маленький шанс, который там мог бы быть неясным методом, которые вызывают, устанавливает идентификатор, если DB позволяет его, но это неясно по причине. Не пытайтесь найти его:)

Все, с чем быть сказанным, тип ruby script/dbconsole, чтобы быстро потянуть sqlite соединяет интерфейсом, не имея необходимость вводить Ваш пароль.

кроме того, если Вы удаляете sqlite базу данных, которая сбросит счетчик и запустится в 0. С великой державой прибывает большая ответственность.

РЕДАКТИРОВАНИЕ

, Если я помню правильно, Dave Thomas записал об этом где-нибудь. Возможно здесь ?

4
ответ дан 30 November 2019 в 15:13
поделиться

На самом деле можно установить идентификатор вручную для новых объектов:

record = Record.new
record.id = 1234
record.save

Однако то, что Вы пытаетесь сделать, обновить идентификатор существующего объекта. То, когда Вы устанавливаете record.id = 43 и затем называете save, что происходит, - то, что ActiveRecord попытается генерировать SQL как это:

update records set id = 43 where id = 43

Уведомление, которое идентификатор это ищет для обновления , совпадает с тем, который Вы пытаетесь изменить . Вот почему это не работает.

Так да, необходимо было бы использовать SQL для изменения этого. Является ли это хорошей идеей, другая проблема, но иногда она должна быть сделана.

23
ответ дан 30 November 2019 в 15:13
поделиться

Лучший способ сделать это - выполнить SQL напрямую и устранить этот временной сбой в последовательности.

Попробуйте получить доступ к консоли (скрипт / консоль ruby) и введите:

>> sql = "update records set id=43 where id=44"
>> ActiveRecord::Base.connection.execute(sql)

Где 44 - это идентификатор вновь созданного объекта, а 43 - это тот, который вам не хватало в таблице

Удачи!

39
ответ дан 30 November 2019 в 15:13
поделиться
Другие вопросы по тегам:

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