Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обращение к базе данных. Результат с ошибкой. 
:(
    Опции темы
korob2001
Дата 2.11.2004, 02:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: нет
Всего: 61



Привет!
Это опять я. ;)
У меня возникла такая проблема:

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. Для всей этой бадяги пишу такой код:
Код

Option Explicit
Private checkSelected


Private Sub cmdDel_Click()
       Dim queryString$
       If IsNumeric( checkSelected ) And checkSelected > 0 Then
          queryString = "DELETE FROM address WHERE id=" & checkSelected
          adoBase.RecordSource = queryString
          adoBase.Refresh
       Else
          MsgBox "You must selected id for delete row", vbOKOnly, "Error"
       End If
End Sub

Private Sub cmdExit_Click()
       Unload Me
       End
End Sub

Private Sub grdTable_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
       checkSelected = grdTable.Text
End Sub


Проблема, собственно, в процедуре обработки события cmdDel_Click. В общем, пользователь должен сначала выделить id той строки, которую необходимо удалить. Всё вроде работает, строка, действительно, удаляется, но после каждой удалённой строки я получаю такое сообщение об ошибке:

Операция не допускается, если объект закрыт

После чего VB указывает на эту строку кода: adoBase.Refresh

Подскажите, пожалуйста, как это лечится?!!! Я уже несколько раз перечитал раздел в книге по данной теме, но ничего так и не понял. Несколько раз пробовал создавать аналогичное подключение. Результат тот же.

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

Заранее спасибо,
Денис

Это сообщение отредактировал(а) korob2001 - 2.11.2004, 02:33


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
-Mikle-
Дата 2.11.2004, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 8
Всего: 59



Я не работаю с контролами типа ADODC, но предполагаю что проблема в том, что инструкция DELETE не возращает записи. Любопытно то, что у контрола нет метода Execute, который как раз таки и используется для выполнения SQL-инструкций, не возвращающих ни одной записи. Попробуй сделать так, как я предлагаю, может получится.
Код

Option Explicit
Private checkSelected


Private Sub cmdDel_Click()
  Dim queryString$
  If IsNumeric( checkSelected ) And checkSelected > 0 Then
    adoBase.RecordSource = "DELETE FROM address WHERE id=" & checkSelected
    adoBase.RecordSource = "SELECT * FROM address"
    adoBase.Refresh
  Else
    MsgBox "You must selected id for delete row", vbOKOnly, "Error"
  End If
End Sub

Private Sub cmdExit_Click()
  Unload Me
End Sub

Private Sub grdTable_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
  checkSelected = grdTable.Text
End Sub


может быть это "криво", но только потому, что я никогда не использую контролы дла работы с базами. Лучше всего использовать ADO подключенную через References, дабы не было вот таких вот "тупиков".


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
boevik
Дата 2.11.2004, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 12
Всего: 35



-Mikle-, выполнится только select.


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
-Mikle-
Дата 2.11.2004, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 8
Всего: 59



Цитата(boevik @ 2.11.2004, 21:00)

-Mikle-, выполнится только select.

блин, то есть при рефреше происходит выполнение запроса... логично конечно... но как человеку помочь? Может On Error Resume Next поставить? :D


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
REVOLT
Дата 2.11.2004, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 5.4.2004
Где: г. Бузулук

Репутация: нет
Всего: нет



-Mikle-, это точно!

З.Ы свяжись со мной 256-824-960
PM MAIL WWW ICQ   Вверх
cardinal
Дата 2.11.2004, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99





--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
-Mikle-
Дата 3.11.2004, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 8
Всего: 59



cardinal, он же не с объектами ADO работает, а с ADODC (контрол)
хотя ссылка очень полезная, лучше ему писать проги используя ADO


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
korob2001
Дата 3.11.2004, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: нет
Всего: 61



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


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
korob2001
Дата 10.11.2004, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: нет
Всего: 61



Решил проблему таким способом:
Код

Option Explicit
Private checkSelected As Variant

Private Sub cmdClose_Click()
       Unload Me
       End
End Sub

Private Sub cmdDelete_Click()
       Dim queryString$
       Dim cn As ADODB.Connection
       Set cn = New ADODB.Connection
       cn.Open "DSN=aaa"

       
       If IsNumeric(checkSelected) And checkSelected > 0 Then
          queryString = "DELETE FROM myFirst WHERE id=" & checkSelected
          cn.Execute queryString
          cn.Close
          adoBase.Refresh
       Else
          MsgBox "You must selected id for delete row", vbOKOnly, "Error"
       End If
   
       Set cn = Nothing
End Sub

Private Sub Form_Load()
       Call tmrTime_Timer
End Sub

Private Sub grdData_RowColChange(LastRow As Variant, ByVal LastCol As
Integer)
       checkSelected = grdData.Text
       adoBase.Caption = grdData.Text
End Sub

Теперь всё работает.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0584 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.