2014-11-12 5 views
1

Как видно из названия, у меня есть Access 97 db и хотелось бы узнать, можно ли заблокировать таблицу после вставки, а затем разблокировать ее немедленно?Можно ли заблокировать таблицу доступа?

Мне нужно добавить запись и сразу получить AutoNumber добавленной записи (путем упорядочивания по описанию). Проблема заключается в том, что я вставляю и извлекаю, может быть другое добавление из чего-то извне (что получило бы неправильный AutoNumber).

К сожалению, я не могу использовать SELECT @@IDENTITY, так как он не поддерживается для файла базы данных Access 97 (уже проверено и проверено, ref: here).

+0

Обратитесь к [this] (http://office.microsoft.com/en-us/access-help/set-options-for-a-shared-access-database-mdb-HP005188297.aspx) и [это] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Это определенно проблема XY. Можете ли вы объяснить, какую проблему вы пытаетесь решить вместо этого? –

+0

Мне нужно добавить запись и как только добавить запись, получить автономер добавленной записи (путем упорядочивания по описанию). Проблема заключается в том, что я вставляю и извлекаю, может быть другое добавление из чего-то извне (что получилось бы неправильно autonumber) – user1559524

+0

[Это] (http://www.mikesdotnetting.com/Article/54/getting-the-identity-of-the-most-recently-added-record) может помочь. Не уверен, что он решает указанную вами проблему. Это вряд ли решит. Но вы можете, по крайней мере, избежать упорядоченного запроса. –

ответ

2

У меня есть Access 97 db и хотелось бы узнать, можно ли заблокировать таблицу после вставки, а затем разблокировать ее немедленно?

Не совсем. Однако, хотя вы не можете использовать SELECT @@IDENTITY с файлом базы данных Access 97 вы можете использовать DAO.Recordset, чтобы добавить запись:

// This code requires the following COM reference in your project: 
// 
//  Microsoft Office 14.0 Access Database Engine Object Library 
// 
// and the declaration 
// 
//  using Microsoft.Office.Interop.Access.Dao; 
// 
// at the top of the class file    

var dbe = new DBEngine(); 
Database db = dbe.OpenDatabase(@"C:\Users\Public\test\a97_files\a97table1 - Copy.mdb"); 
Recordset rst = db.OpenRecordset("SELECT * FROM table1", RecordsetTypeEnum.dbOpenDynaset); 
rst.AddNew(); 
// new AutoNumber is created as soon as AddNew() is called 
int newID = rst.Fields["ID"].Value; 
rst.Fields["textCol"].Value = "Record added via DAO Recordset."; 
rst.Update(); 
Console.WriteLine("Row added with ID = {0}", newID); 
rst.Close(); 
db.Close(); 
0

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

+0

Подумайте внимательно перед выполнением этого. Вы, вероятно, завершите сканирование таблицы после каждой вставки. Даже если все ваши поля «details» индексируются, вам придется ударить по каждому из этих индексов. В любом случае вы увеличите конфликт в файле базы данных, и широко признается, что Access не очень хорошо масштабируется. На самом деле, вы действительно не должны использовать базу данных Access с ASP.NET * вообще * (ref: [здесь] (http://msdn.microsoft.com/en-us/library/jj653753.aspx#access_database)). –

Смежные вопросы