| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > VB6 > Обращение к базе данных. Результат с ошибкой. |
| Автор: korob2001 2.11.2004, 02:27 | ||
| Привет! Это опять я. ;) У меня возникла такая проблема: 1. Создаю таблицу address в файле db1.mdb, такой структуры: id | name | family ---|---------|------------ 1 | Vasya | Pupkin Где id уникальный номер, который добавляется автоматически при добавлении новой записи в таблицу. 2. Создаю рядом файл db1.udl и связываю его с файлом db1.mdb который создал в первом пункте. 3. Затем в проект добавляю компоненты: a.) Microsoft ADO Data Control 6.0 b.) Microsoft DataGrid Control 6.0 4. Добавляю на форму: ADO Data Control - ( adoBase ), DataGrid Control ( grdTable ) и две кнопки Delete - (cmdDel), Exit - ( cmdExit ). 5. Компоненту adoBase назначаю следующие параметры: ConnectionString = путь к файлу .udl RecordSource = "SELECT * FROM address" 6. Компоненту grdTable назначаю следующие параметры: AllowUpdate = False DataSource = adoBase 7. Для всей этой бадяги пишу такой код:
Проблема, собственно, в процедуре обработки события cmdDel_Click. В общем, пользователь должен сначала выделить id той строки, которую необходимо удалить. Всё вроде работает, строка, действительно, удаляется, но после каждой удалённой строки я получаю такое сообщение об ошибке: Операция не допускается, если объект закрыт После чего VB указывает на эту строку кода: adoBase.Refresh Подскажите, пожалуйста, как это лечится?!!! Я уже несколько раз перечитал раздел в книге по данной теме, но ничего так и не понял. Несколько раз пробовал создавать аналогичное подключение. Результат тот же. Извините за такое длинное сообщение, просто хотелось изложить подробно, дабы не напрягать вас в таких мелочах, как какие компоненты я использовал и какие у них имена и т.п. Заранее спасибо, Денис |
| Автор: -Mikle- 2.11.2004, 16:58 | ||
Я не работаю с контролами типа ADODC, но предполагаю что проблема в том, что инструкция DELETE не возращает записи. Любопытно то, что у контрола нет метода Execute, который как раз таки и используется для выполнения SQL-инструкций, не возвращающих ни одной записи. Попробуй сделать так, как я предлагаю, может получится.
может быть это "криво", но только потому, что я никогда не использую контролы дла работы с базами. Лучше всего использовать ADO подключенную через References, дабы не было вот таких вот "тупиков". |
| Автор: boevik 2.11.2004, 17:00 |
| -Mikle-, выполнится только select. |
| Автор: -Mikle- 2.11.2004, 17:07 | ||
блин, то есть при рефреше происходит выполнение запроса... логично конечно... но как человеку помочь? Может On Error Resume Next поставить? |
| Автор: REVOLT 2.11.2004, 21:01 |
| -Mikle-, это точно! З.Ы свяжись со мной 256-824-960 |
| Автор: cardinal 2.11.2004, 21:42 |
| korob2001, тебе сюда: http://juicystudio.com/tutorial/vb/database.asp |
| Автор: -Mikle- 3.11.2004, 16:16 |
| cardinal, он же не с объектами ADO работает, а с ADODC (контрол) хотя ссылка очень полезная, лучше ему писать проги используя ADO |
| Автор: korob2001 3.11.2004, 21:14 |
| Спасибо. Я бегло просмотрел, похоже на то, что нужно. Сейчас внимательно почитаю. Если возникнут вопросы, буду писать их здесь. Ещё раз спасибо. |
| Автор: korob2001 10.11.2004, 23:41 | ||
Решил проблему таким способом:
Теперь всё работает. |