Сохранение записей в БД

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Wowa
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 30.01.2005 (Вс) 23:41
Откуда: Украина, Хъюстон

Сохранение записей в БД

Сообщение Wowa » 30.01.2005 (Вс) 23:52

У меня такая проблема мне нужно добавить в БД 1000 новых записей с исходным значением каждой "0". Сначала
с помощью Data Form Wizard я создал форму, в кнопку AddNew(для создания новой записи) добавил код:

For i = 1 to 1000
datPrimaryRS.Recordset.AddNew
datPrimaryRS.Recordset.Fields("Q") = "0"
datPrimaryRS.Recordset.UpdateBatch adAffectAll
Next i

Создаёт нормально 1000 новых записей с значением "0", но когда изменить
значение любой из записей и Updateнуть(datPrimaryRS.Recordset.Update) её, то появляется
такая ошибка - "Недостаточные или неполные сведения о ключевом поле. Обновление влияет
на слишком большое количество строк". Что мне делать? Спасибо всем
(кто попытается помочь или кто хотя-бы выслушал это) :wink:

snov
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 176
Зарегистрирован: 28.11.2003 (Пт) 10:12
Откуда: Челябинск

Re: Сохранение записей в БД

Сообщение snov » 31.01.2005 (Пн) 8:41

Wowa писал(а):У меня такая проблема мне нужно добавить в БД 1000 новых записей с исходным значением каждой "0". Сначала
с помощью Data Form Wizard я создал форму, в кнопку AddNew(для создания новой записи) добавил код:

For i = 1 to 1000
datPrimaryRS.Recordset.AddNew
datPrimaryRS.Recordset.Fields("Q") = "0"
datPrimaryRS.Recordset.UpdateBatch adAffectAll
Next i

Создаёт нормально 1000 новых записей с значением "0", но когда изменить
значение любой из записей и Updateнуть(datPrimaryRS.Recordset.Update) её, то появляется
такая ошибка - "Недостаточные или неполные сведения о ключевом поле. Обновление влияет
на слишком большое количество строк". Что мне делать? Спасибо всем
(кто попытается помочь или кто хотя-бы выслушал это) :wink:
Попробуй
Код: Выделить всё
For i = 1 to 1000
datPrimaryRS.Recordset.AddNew
datPrimaryRS.Recordset.Fields("Q") = "0"
datPrimaryRS.Recordset.Update
Next i

Wowa
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 30.01.2005 (Вс) 23:41
Откуда: Украина, Хъюстон

Сообщение Wowa » 01.02.2005 (Вт) 23:22

Попробовал, результат тотже и когда я меняю значение одной записи, то значения всех остальных записей становятся такимиже

snov
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 176
Зарегистрирован: 28.11.2003 (Пт) 10:12
Откуда: Челябинск

Сообщение snov » 02.02.2005 (Ср) 10:34

А база в Access'е? какоготипа поле?

Sedge
Alternative Choice
Alternative Choice
Аватара пользователя
 
Сообщения: 1049
Зарегистрирован: 16.05.2002 (Чт) 18:23
Откуда: Somewhere-In-The-Net

Сообщение Sedge » 02.02.2005 (Ср) 10:41

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

Ключевое поле в таблице есть?
Код апдейта и структуру таблицы - в студию.

Wowa
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 30.01.2005 (Вс) 23:41
Откуда: Украина, Хъюстон

Сообщение Wowa » 03.02.2005 (Чт) 0:07

В Access'е. Поле типа Text. Ключевого поля нет.
Код апдейта:

Private Sub cmdUpdate_Click()
On Error GoTo UpdateErr

datPrimaryRS.Recordset.UpdateBatch adAffectAll
Exit Sub
UpdateErr:
MsgBox Err.Description
End Sub

Код Add New:
Private Sub cmdAdd_Click()
On Error GoTo AddErr
datPrimaryRS.Recordset.AddNew

Exit Sub
AddErr:
MsgBox Err.Description
End Sub

Структура:
Таблица - QP
Поле - Q
Тип - Text
Размер - 30
Нач.значение - 0

Я недавно начал работать с БД, может чё и неправильно понял, но я всёже думаю что проблема в строке
datPrimaryRS.Recordset.Fields("Q") = "0", может как-то по-другому можна создать 1000 записей с исходным з-ем "0". И ещё любые изменения любой записи действуют на остальные записи, если я удаляю одну запись - удаляются и все остальные, но только созданые таким способом:
For i = 1 to 1000
datPrimaryRS.Recordset.AddNew
datPrimaryRS.Recordset.Fields("Q") = "0"
datPrimaryRS.Recordset.UpdateBatch adAffectAll
Next i
,а те которые я создавал по одной "вручную":
Add New -> ввёл з-ние записи -> Update - остаются.

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 03.02.2005 (Чт) 0:24

Можно и по-другому создать, конечно. Если у тебя есть такая вещь, как Connection, то в твоем цикле:
Код: Выделить всё
Conn.Execute "insert into QP (Q) VALUES ('0')"

И все, никаких извратов с клиентско-серверными гибридами кода не нужно...

snov
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 176
Зарегистрирован: 28.11.2003 (Пт) 10:12
Откуда: Челябинск

Сообщение snov » 03.02.2005 (Чт) 10:01

Действительно попробуй добавлять запросом.
Код: Выделить всё
db.Execute "Insert Into QP (Q) Values('0')"

Если в Access пишешь, то db поменяй на CurrentDb

Sedge
Alternative Choice
Alternative Choice
Аватара пользователя
 
Сообщения: 1049
Зарегистрирован: 16.05.2002 (Чт) 18:23
Откуда: Somewhere-In-The-Net

Сообщение Sedge » 03.02.2005 (Чт) 10:52

Я бы посоветовал создать-таки в Access'овской таблице ключевое поле, на отсутствие которого явно ругается процедура апдейта.

И, кстати, какие именно компоненты используются для доступа к данным? В частности - с привязкой к DAO или к ADO?
Wowa писал(а):но я всёже думаю что проблема в строке
datPrimaryRS.Recordset.Fields("Q") = "0", может как-то по-другому можна создать 1000 записей с исходным з-ем "0".

Стоп. У тебя ошибка появляется при добавлении записей или при попытке изменения?

Костя
Обычный пользователь
Обычный пользователь
 
Сообщения: 93
Зарегистрирован: 14.02.2005 (Пн) 6:45
Откуда: Новосибирск

Сообщение Костя » 14.02.2005 (Пн) 7:20

А может быть убрать строку обновления из цикла, и по его завершении обновить всё сразу?
Всё бывает!

Костя
Обычный пользователь
Обычный пользователь
 
Сообщения: 93
Зарегистрирован: 14.02.2005 (Пн) 6:45
Откуда: Новосибирск

Сообщение Костя » 14.02.2005 (Пн) 7:33

А вообще я всегда использую ADO. Например

dim datPrimaryRS as new adodb.recordset
datPrimaryRS.open имя базы, провайдер (в данном случае access), источник и т.д.

Затем цикл, в котором
datPrimaryRS.addnew
datPrimaryRS.fields("q") = "0"

А потом, по завершении цикла, ввести строку datPrimaryRS.update. Тогда обновится вся таблица. В этом случае твоих проблем не возникало, проверенно. У меня в этом случае даже команда datPrimaryRS.update не нужна была - всё обновлялось автоматически. Я правда, с ораклом работал...

Юра П
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 23.12.2004 (Чт) 22:44

Re: Сохранение записей в БД

Сообщение Юра П » 14.02.2005 (Пн) 23:45

Wowa писал(а):У меня такая проблема мне нужно добавить в БД 1000 новых записей с исходным значением каждой "0".


А зачем ты присваиваешь значение записям в коде во время выполнения программы? При создании БД можно указать значение по умолчанию (defaul value), вот и укажи там свой нуль.


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

    TopList  
cron