Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Запрос на удаление


Автор: Catisha 12.10.2006, 11:40
Код

DoCmd.RunSQL "DELETE * FROM Users WHERE [ION]=" + "'" + ION Not In (SELECT User FROM Equipment);" + "'"


Компилятор выдаёт ошибку, не знаю как исправить.
Нужно следующее: чтобы удалялась запись, которой нет в другой таблице.

Автор: boevik 12.10.2006, 11:47
Запиши проще
Код

DoCmd.RunSQL "DELETE * FROM Users WHERE [ION] Not In (SELECT User FROM Equipment);"

Автор: Catisha 12.10.2006, 11:52
Не получается, удаляет все записи, которых нет во второй таблице

Автор: boevik 12.10.2006, 11:54
Цитата(Catisha @  12.10.2006,  11:40 Найти цитируемый пост)
Нужно следующее: чтобы удалялась запись, которой нет в другой таблице. 

Цитата(Catisha @  12.10.2006,  11:52 Найти цитируемый пост)
Не получается, удаляет все записи, которых нет во второй таблице 

Это не то что надо было получить?
Какая иммено запись должна удаляться?


Автор: Catisha 12.10.2006, 11:57
Есть форма с пользователями, на ней кнопка Удалить. Так вот если на этом пользователе записано оборудование, то нельзя выполнять команду на удаление.

Добавлено @ 11:59 
Может так понятней будет:
Код

Sub DisposeUser(pk As String)
On Error GoTo err_dispose
DoCmd.SetWarnings False

DoCmd.RunSQL "DELETE * FROM Users WHERE [ION]=" + "'" + pk Not In (SELECT User FROM Equipment);" + "'"

End If

Exit Sub
err_dispose:
MsgBox Err.Description
Exit Sub
End Sub

Автор: boevik 12.10.2006, 12:01
Возможно имелось ввиду следующее:
Код

DoCmd.RunSQL "DELETE * FROM Users WHERE [ION] Not In (SELECT User FROM Equipment) and ION = " & userID 

где userID содержит номер текущего пользовтеля.

Автор: Catisha 12.10.2006, 12:12
Работает, но как-то криво: Каждый раз выскакивает сообщение: Введите значение параметра.

Автор: boevik 12.10.2006, 12:15
UserID замени на свою переменную, возможно это pk у тебя.

Автор: Catisha 12.10.2006, 12:18
Я заменила, не помогает.
А может сделать сначала проверку есть ли пользователь в другой таблицы, а потом если нет, то удалять его? Не знаешь как это можно реализовать, а то у меня большие проблемы с синтаксисом языка.

Автор: boevik 12.10.2006, 12:23
Catisha, у тебя выскакивет сообщение Введите значение параметра. и с этим в первую очередь надо разобраться.
Потому что даже если просто запрашивать есть юзер во второй таблице надо передавать параметр.
Разберись, где иммено сидит значение удаляемого юзера.

Автор: Catisha 12.10.2006, 12:37
Если написать так:
Код

DoCmd.RunSQL "DELETE * FROM Users WHERE [ION] Not In (SELECT User FROM Equipment) and [ION] = '" + Nz(pk, "") + "'"

то работает, как надо только почему-то жутко томозит где-то секунд 20?

Добавлено @ 12:39 
Так ладно это у меня комп что-то тормозит))))
А не знаешь как убрать сообщение о том, сколько записей будет удалено?

Автор: boevik 12.10.2006, 12:39
Посмотри какой sql запускается.    
Код

MsgBox "DELETE * FROM Users WHERE [ION] Not In (SELECT User FROM Equipment) and [ION] = '" + Nz(pk, "") + "'"

Автор: Catisha 12.10.2006, 12:54
Так проблему с подтверждением решила!
Последний вопрос: как если удаление не произошло выдавть сообщение типа : "Нельзя удалить юзера!"

Автор: boevik 12.10.2006, 12:59
Если выполнить таким образом:
Код

Dim dbs As DAO.Database, sql as String, iCount as Integer
  Set dbs = CurrentDb
  sql = "DELETE * FROM stores WHERE state='WY'"
  '(not that there's anything wrong with Wyoming!)
  dbs.Execute sql, dbFailOnError
  iCount = dbs.RecordsAffected 

то в iCount содержится кол-во удаленных записей.

Автор: Catisha 12.10.2006, 13:25
А попроще никак  нельзя? smile  smile 

Автор: boevik 12.10.2006, 13:27
IMHO и мой способ не сложен.
Перед delete сделать select и посмотреть есть ли возвращеные записи. Это проще?

Автор: Flotskiy 14.10.2006, 09:23
Привет всем!
У меня есть аналогичная задача. Если у читателя имеется задолженность по ннигам, то...
-----------------------------------------------   
Case cmdDelete       '-- delete the current record
     
   Dim reply As Integer
  
       Dim iResponse As Integer
    Dim sAskUser As String
    If Text4.Text > 0 Or Text6.Text > 0 Or Text7.Text > 0 Then
         reply = MsgBox("Удалить нельзя - имеется задолженность: " & _
                         "абонем.= " & Text4.Text & _
                         ", читзал=" & Text6.Text & _
                         ", подп. изд=" & Text7.Text, vbCritical, "Контроль!")
     Else
    sAskUser = "Желаете удалить запись?"
    iResponse = MsgBox(sAskUser, vbQuestion + vbYesNo + _
              vbDefaultButton2, "Контроль!")
End Sub
--------------------------------------------
Может подойдет такая идея?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)