Страница: 1 | 2 |
Вопрос: Запрос SQL не работает
Добавлено: 18.08.04 20:27
Автор вопроса: Andrey999 | Web-сайт:
Почему не работает этот запрос если в базе уже есть такой человек?
Dim SQL As String
SQL = "SELECT * From client WHERE client.idfam = " & "'" & Fam.Text & "'"
Data1.RecordSource = SQL
Data1.Refresh
If SQL = Fam.Text Then
MsgBox "такой есть"
Exit Sub
End If
Ответы
Всего ответов: 16
Номер ответа: 1
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #1
Добавлено: 19.08.04 02:19
Интересно, и как тебе пришло в голову такое написать??
SQL = Fam.Text
Что это??? Ты пытаешься сравнить SQL-запрос с фамилией? Так это никогда работать НЕ БУДЕТ!!!
А знаешь почему?? Потому,что:
"SELECT * From client WHERE client.idfam ='ИВАНОВ'" никогда не будет равен "ИВАНОВ"!
Идем дальше.. Зачем ты в запросе первую одиночную кавычку вынес за строку? Работы решил себе прибавить? На здоровье! Это дело вкуса. Но проще, и правильнее было бы написать так:
SQL = "SELECT * From client WHERE client.idfam = '" & Fam.Text & "'"
И самое главное, так как в результирующем наборе записей у тебя окажутся записи удовлетворяющие заданному условию client.idfam = Fam.Text То чтобы проверить наличие человека с указанной фамилией достаточно проверить свойство RecordCount объекта Recordset. Например так:
With Data1.Recordset
If .RecordCount >0 Then
.MoveLast
.MoveFirst
MsgBox "Найдено " & .RecordCount & " совпадения"
End If
End With
Вот, собственно и все..
Номер ответа: 2
Автор ответа:
Andrey999
ICQ: 30852361
Вопросов: 73
Ответов: 168
Web-сайт:
Профиль | | #2
Добавлено: 19.08.04 09:25
А что перед этим пишется я не пойму, мне же надо с конкретным текстом сравнить
With Data1.Recordset
If .RecordCount >0 Then
.MoveLast
.MoveFirst
MsgBox "Найдено " & .RecordCount & " совпадения"
End If
End With
Номер ответа: 3
Автор ответа:
Andrey999
ICQ: 30852361
Вопросов: 73
Ответов: 168
Web-сайт:
Профиль | | #3
Добавлено: 19.08.04 09:35
И дело в том, что когда заполненны все данные на человека пользователь переходит на следующею вкладку SSTab и в момент перехода нужно чтобы программа просмотрела, есть ли в базе такой человек и если есть выкинула сообщение. Вот.
Номер ответа: 4
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #4
Добавлено: 19.08.04 09:38
Результат выполнения запроса и есть набор всех записей с фамилией "Иванов". Если этот список пуст - Data1.RecordCount < 1, тогда нет тут "Ивановых", а если .RecordCount >0, то "Ивановы" есть, причем, быть может их там завались сколько!
Data1.MoveFirst - берешь первого конкретного "Иванова". Data1.MoveNext - следующего... Data1.MoveLast - последнего
If Data1.RecordCount > 0
Data1.MoveFirst
Do While Not Data1.EOF
MsgBox Data1.Fields("Name".Value
 ata1.MoveNext
Loop
End If
-выведет тебе всех Ивановых поименно...
Номер ответа: 5
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #5
Добавлено: 19.08.04 09:41
Судя по твоему случаю, тебе надо только .MoveFirs, т.к. тебе по-моему не важно, что Ивановых м.б. 200 человек, а не один. Может быть маленький список, где и имен-то нет.
Номер ответа: 6
Автор ответа:
Andrey999
ICQ: 30852361
Вопросов: 73
Ответов: 168
Web-сайт:
Профиль | | #6
Добавлено: 19.08.04 09:47
Нет мне все равно сколько Ивановых
Номер ответа: 7
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #7
Добавлено: 19.08.04 10:00
Лучше такой запрос сделать:
SQL = "SELECT Count(id) From client WHERE client.idfam = " & "'" & Fam.Text & "'"
Data1.RecordSource = SQL
Data1.Refresh
If Data1.RecordSet.Item(0)<>0 Then
MsgBox "такой есть"
Exit Sub
End If
Номер ответа: 8
Автор ответа:
Andrey999
ICQ: 30852361
Вопросов: 73
Ответов: 168
Web-сайт:
Профиль | | #8
Добавлено: 19.08.04 10:23
Все равно я не пойму как
Номер ответа: 9
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #9
Добавлено: 19.08.04 10:29
А вообще, лучше не с Data работать а с ADODB.Recordset ADO по умолчанию подключена к каждой базе в Access
Dim rs As New ADODB.Recordset
rs.Open "SELECT Count(id) From client WHERE client.idfam='" & Fam.Text & "'", CurrentDB.Connection, adOpenKeySet
If rs.Item(0) <> 0 Then
MsgBox "Имеется такой"
End If
Номер ответа: 10
Автор ответа:
Andrey999
ICQ: 30852361
Вопросов: 73
Ответов: 168
Web-сайт:
Профиль | | #10
Добавлено: 19.08.04 10:38
Это не подходит программа уже готова.
Номер ответа: 11
Автор ответа:
Andrey999
ICQ: 30852361
Вопросов: 73
Ответов: 168
Web-сайт:
Профиль | | #11
Добавлено: 19.08.04 12:10
Я имею ввиду переписывать под ADO
Номер ответа: 12
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #12
Добавлено: 19.08.04 13:11
А что тут понимать, если уже готовый код написали?
Номер ответа: 13
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #13
Добавлено: 20.08.04 03:09
Паша, а разве в стандартном Data.Recordset есть свойство Item?
If Data1.RecordSet.Item(0)<>0 Then
MsgBox "такой есть"
Exit Sub
тут у него наверняка ошибка будет..
Номер ответа: 14
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #14
Добавлено: 20.08.04 03:30
Andrey999, ну ты даешь... Ну нельзя же так..
А что перед этим пишется я не пойму, мне же надо с конкретным текстом сравнить
Объясняю еще раз.. Вот твой SQL-запрос..
SQL = "SELECT * From client WHERE client.idfam = '" & Fam.Text & "'"
Именно в НЁМ ты сравниваешь поле базы данных client.idfam с конкретным текстом Fam.Text !!
ВНИМАНИЕ! СОСРЕДОТОЧЬСЯ!!!
Строчка client.idfam = '" & Fam.Text & "'" на момент выполнения запроса будет выглядеть примерно так:
client.idfam ='ИВАНОВ'
В результате чего, после строки Data1.Refresh в наборе записей у тебя окажутся только те строки которые в поле client.idfam содержат Fam.Text( например ИВАНОВ). А свойство RecordCount покажет тебе сколько у тебя их конкретно! Их может быть как 0(RecordCount=0 в этом случае у тебя ни одного Иванова нет) так и очень много(RecordCount=1,2,3,4,5,...100, и до бесконечности) Таким образом если RecordCount<>0 значит ИВАНОВ(ы) (как минимум 1) у тебя 100% есть!! Надеюсь теперь все понятно??
Итак,подведем итог..Конечный код который ты должен вставить в свою прогу будет выглядеть так:
SQL = "SELECT * From client WHERE client.idfam ='" & Fam.Text & "'"
Data1.RecordSource = SQL
Data1.Refresh
If Data1.RecordSet.Recordcount<>0 Then
MsgBox "Бля буду, такой человек есть!!!"
Exit Sub
Вот теперь только попробуй сказать,что это не работает, или ты чего-то не понял..))
Номер ответа: 15
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #15
Добавлено: 20.08.04 03:37
И еще одно! SQL критичен к расладке! Например, если ты в фамилии ИВАНОВ букву А напишешь английскую, то она не будет равна ИВАНОВ,где все буквы написаны русскими..