Ruby win32ole MS Access: Как найти все записи, обновленные с момента последнего экспорта? - PullRequest
2 голосов
/ 09 февраля 2010

Я использую модуль / библиотеку win32ole для получения доступа к базе данных Access. Но я не могу найти, как могу в Rails, столбцы create_at или updated_at ни в одной из таблиц в базе данных. Мне было интересно, как можно найти строки, которые обновляются, тогда?

Итак, у меня есть

require 'win32ole'
connection = WIN32OLE.new('ADODB.Conneciton')
conneciton.Open('Provider = Microsoft.ACE.OlEDB.12.0; Data Source = c:\data.accdb')

recordset = WIN32OLE.new('ADODB.Recordset')
recordset.Open(some_sql, connection)

fields = []
recordset.Fields.each do |field|
 fields << field.name
end

data = recordset.GetRows.transpose

so data = [
['john', 'doe', 'author'],
['mick', 'jagger', 'singer'],
['woody', 'allen', 'direct'],
['pablo', 'picasso', 'painter'],
['homer', 'simpson', 'loser']
]

fields= ['first', 'last', 'occupation']

Но если кто-то сменил работу Гомера на «Победитель», какой тип SQL-запроса я использую, чтобы узнать об этом. Предположительно, есть последняя проверенная временная метка, чтобы понять это. Давайте просто скажем, что это предусмотрено, как же тогда поступить?

1 Ответ

0 голосов
/ 09 февраля 2010

Столбцы create_at и updated_at в модели Rails (фактически ActiveRecord) автоматически добавляются по умолчанию в сценарий миграции, сгенерированный из script/generate model. Кроме того, они автоматически поддерживаются ActiveRecord, когда он обнаруживает их присутствие. Даже в этом случае, если вы обойдете AR и перейдете прямо к базе данных, колонки, вероятно, не будут обслуживаться для вас.

Я не боюсь, что Access автоматически сделает это за вас. Хотя я уверен, что возможно до некоторой степени дублировать функциональность, это, вероятно, не тривиально. Как правило, вам необходимо обрабатывать изменения с помощью триггеров (которые не реализованы в Access) или в коде, который обновляет таблицу (что делает ActiveRecord).

...