|
|
|
| Всем доброго времени !
Никак не удается получить ID новой добавленной записи в таблицу аксеса.
ID - AutoNumder поле в этой таблице.
Никто кусочком кода не поделиться ? | |
|
| |
|
|
|
| rst.Bookmark = rst.LastModified - для VB - переход на последнюю добавленную/измененную запись в рекордсете, а как .Net - ХЗ | |
|
| |
|
|
|
| Dim conn1 As New SqlConnectionStringBuilder()
conn1.DataSource = serv ' имя сервера
conn1.InitialCatalog = bas 'имя базы
conn1.IntegratedSecurity = True
Dim cn1 As New SqlConnection(conn1.ConnectionString)
'Using cn1 As New SqlConnection(conn1.ConnectionString)
cn1.Open()
strSQL1 = " текст запроса"
Dim cmd1 As New SqlCommand(strSQL1, cn1)
Dim rdr1 As SqlDataReader = cmd1.ExecuteReader()
Do While rdr1.Read
Me.ИмяПоля.Text = (rdr1("AutoNumder"))
Loop
rdr1.Close()
cn1.Close()
Тут пример как подсоединиться к SQL-SERVER - у. Для соединения с аксесом нужно использовать ОЛЕДБ конекшин.
А так принцип тот же - данные загоняются в датаридер, и потом из него считываются. В данном случае в поле будет переданы по очереди все записи из датаридера, но останется последняя запись датаридера.
Если вопрос о том какой синтаксис у ОЛЕДБ - могу поискать. Где-то я его использовал, правда не помню где. | |
|
| |
|
|
|
| Спасибо,
искать не нужно, я с OLEDB уже работаю
просто команда
cmd1.ExecuteReader()
заполнит ридер
но если в запросе
strSQL1 = " текст запроса"
данные отсортированы по дате да еще в обратном порядке, то вернет не последнюю добавленную запись, а первую, которая была добавлена давно
ПС
как просто было работать с редордсетами в ADODB... | |
|
| |
|
|
|
|
ПС
как просто было работать с редордсетами в ADODB...
|
По началу тоже так думал. Сейчас поменял мнение полностью на противоположное.
Тут есть два варианта - либо менять источник для датаридера, изменив сортировку, либо ввести критерий отбора в источник для датаридера так, чтобы запрос возвращал всего одну запись. | |
|
| |
|
|
|
| вполне вероятно, я только месяц начал ковырять сие творение... | |
|
| |
|
|
|
|
int maxID=0;
String SQLString = "SELECT max(ID) FROM <tablename>";
OleDbCommand cmd = new OleDbCommand(SQLString, cnn);
OleDbDataReader drd = cmd.ExecuteReader();
if (drd.HasRows)
{
if(drd.Read()) maxID=drd.GetInt32(0);
}
|
Хотя лучше возвращать ID по условию, которое формировать из значений вставляемой строки
insert into sometable(f1,f2,f3) values('1',2,'3')
select max(ID) from sometable where f1='1' and f2=2 and f3='3' | |
|
| |