Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Работаем с VB+ADO+Access / 10 сообщений из 10, страница 1 из 1
30.08.2004, 10:37
    #32670634
DionX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работаем с VB+ADO+Access
Упрощённый смысл такой.
Есть таблица tadle1. Есть в ней поля:
field1 key (access'овский счетчик)
field2 text
Коннектимся к базе через ADO. Активное соединение устанавливаем CN.
Далее:
Код: plaintext
CN.Execute "insert into tadle1 (field2) values ('абра-катабра')"
Как узнать значение field1 для новой строки? Вообще интересует любой способ вставки строк в таблицу с отслеживанием значений ключевого поля.

И ещё. Как обнулить access'овский счётчик? Т.е.: было в таблице пять строк. Удалили их все. Добавляем новую строку, значение поля, с типом данных Счетчик становится равным 6, а нужно чтоб единице.
...
Рейтинг: 0 / 0
30.08.2004, 10:53
    #32670668
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работаем с VB+ADO+Access
по поводу обнуления - сервис - сжать/восстановить после этого записи физ удаляются из бд соответвенно сбрас и счетчик
по поводу значение ключа ( ИМХО) можно сделать запрос типа
select max(id)+1 from T1 где id - ключ поле.
...
Рейтинг: 0 / 0
30.08.2004, 10:56
    #32670673
marvan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работаем с VB+ADO+Access
Код: plaintext
Public tadle1 As ADODB.Recordset\'.....................................Set tadle1 = New ADODB.RecordsetWith tadle1    .ActiveConnection = CN    .Source = "tadle1"    .CursorType = adOpenKeyset    .LockType = adLockOptimistic    .CursorLocation = adUseServer    .Open , , , , adCmdTableDirectEnd With\'.....................................tadle1.AddNewtadle1field1 = tadle1!field1 \'тут узнали значение счётчикаtadle1.Update "field2", "абра - катабра" \'тут добавили
Как отформатирован этот код?
...
Рейтинг: 0 / 0
30.08.2004, 11:02
    #32670688
Hibernate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работаем с VB+ADO+Access
big-dukeпо поводу обнуления - сервис - сжать/восстановить после этого записи физ удаляются из бд соответвенно сбрас и счетчик
по поводу значение ключа ( ИМХО) можно сделать запрос типа
select max(id)+1 from T1 где id - ключ поле.сжать-восстановить - абсолютно согласен.
по поводу значения ключа - абсолютно НЕ согласен.
во-первых потому, что работать могут несколько пользователей - и между запросом на вставку и запросом на селект могут быть запросы на вставку от других пользователй, а во-вторых потому, что счетчик может иметь не последовательные значения, а например случайные.
на мой взгляд, единственный способ - это вторым запросом искать только что вставленную запись, используя условие Where по ключевым полям. Хуже, если счетчик и есть то самое ключевое поле... Тогда, на мой взгляд, единственный способ - это использовать для вставки объект Recordset.
...
Рейтинг: 0 / 0
30.08.2004, 11:07
    #32670702
DionX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работаем с VB+ADO+Access
большое спасибо всем желающим помочь. Спасибо за подсказку как обнулить счетчик. По поводу вставки данных, все идеи высказанные здесь уже сам ранее перебрал, но это всё ни то. Как заметил Hibernate, остаётся только последующий запрос... Жаль. :(
...
Рейтинг: 0 / 0
30.08.2004, 11:21
    #32670759
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работаем с VB+ADO+Access
по поводу счетчика если исползовать код репликации и генерить новый guid.
насчета аксесса не знаю но на скуле прокатывает на ура.
...
Рейтинг: 0 / 0
30.08.2004, 11:30
    #32670780
Hibernate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работаем с VB+ADO+Access
DionXбольшое спасибо всем желающим помочь. Спасибо за подсказку как обнулить счетчик. По поводу вставки данных, все идеи высказанные здесь уже сам ранее перебрал, но это всё ни то. Как заметил Hibernate, остаётся только последующий запрос... Жаль. :(
если не пользоваться объектом Recordset, то без второго запроса не обойтись никак. А вот сам второй запрос - есть еще вариант запускать оба запроса в транзакции, чтобы гарантировать что никто между ними не вклинился, тогда все можно упростить - если известно, что счетчик последовательный, то
Select max(счетчик) From tadle1
или если счетчик - случайное значение, то например можно выкрутится через поле типа Date, в которое вставлять по умолчанию Now() а потом что-то вроде
Select счетчик From tadle1 Where CreateDate = (Select max(CreateDate) From tadle1)

как-то так.
...
Рейтинг: 0 / 0
30.08.2004, 12:12
    #32670893
PA
PA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работаем с VB+ADO+Access
В jet 4.0 есть фишка - @@identity:

Код: plaintext
1.
CN.Execute "insert into tadle1 (field2) values ('абра-катабра')"
Debug.Print "Счётчик:";CN.Execute("select @@identity")( 0 )
...
Рейтинг: 0 / 0
30.08.2004, 12:42
    #32670974
Hibernate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работаем с VB+ADO+Access
PAВ jet 4.0 есть фишка - @@identity:

Код: plaintext
1.
CN.Execute "insert into tadle1 (field2) values ('абра-катабра')"
Debug.Print "Счётчик:";CN.Execute("select @@identity")( 0 )


и это работает! спасибо!
...
Рейтинг: 0 / 0
30.08.2004, 13:17
    #32671076
DionX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работаем с VB+ADO+Access
О! Ничтяг! Спасибо. РАВ jet 4.0 есть фишка - @@identity
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Работаем с VB+ADO+Access / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]