Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Запрос SQL не работает Добавлено: 18.08.04 20:27  

Автор вопроса:  Andrey999 | Web-сайт: www.radio-device.narod.ru | ICQ: 30852361 
Почему не работает этот запрос если в базе уже есть такой человек?
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-сайт: www.radio-device.narod.ru
 Профиль | | #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-сайт: www.radio-device.narod.ru
 Профиль | | #3
Добавлено: 19.08.04 09:35
И дело в том, что когда заполненны все данные на человека пользователь переходит на следующею вкладку SSTab и в момент перехода нужно чтобы программа просмотрела, есть ли в базе такой человек и если есть выкинула сообщение. Вот.

Ответить

Номер ответа: 4
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #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
  ;Data1.MoveNext
Loop
End If

-выведет тебе всех Ивановых поименно...

Ответить

Номер ответа: 5
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #5
Добавлено: 19.08.04 09:41
Судя по твоему случаю, тебе надо только .MoveFirs, т.к. тебе по-моему не важно, что Ивановых м.б. 200 человек, а не один. Может быть маленький список, где и имен-то нет.

Ответить

Номер ответа: 6
Автор ответа:
 Andrey999



ICQ: 30852361 

Вопросов: 73
Ответов: 168
 Web-сайт: www.radio-device.narod.ru
 Профиль | | #6
Добавлено: 19.08.04 09:47
Нет мне все равно сколько Ивановых

Ответить

Номер ответа: 7
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #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-сайт: www.radio-device.narod.ru
 Профиль | | #8
Добавлено: 19.08.04 10:23
Все равно я не пойму как :(

Ответить

Номер ответа: 9
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #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-сайт: www.radio-device.narod.ru
 Профиль | | #10
Добавлено: 19.08.04 10:38
Это не подходит программа уже готова.

Ответить

Номер ответа: 11
Автор ответа:
 Andrey999



ICQ: 30852361 

Вопросов: 73
Ответов: 168
 Web-сайт: www.radio-device.narod.ru
 Профиль | | #11
Добавлено: 19.08.04 12:10
Я имею ввиду переписывать под ADO

Ответить

Номер ответа: 12
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #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 критичен к расладке! Например, если ты в фамилии ИВАНОВ букву А напишешь английскую, то она не будет равна ИВАНОВ,где все буквы написаны русскими..

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам