#vb6
#vb6
Вопрос:
Я использовал эту строку
.RecordSource = "select * from tblpersonal where empid like '" amp; Me.lblIDNumber.Caption amp; "*'"
… мой вопрос в том, что, если я использую переменную ( varIDNumber
) вместо object ( lblIDNumber
), каким будет синтаксис? Я использую VB6.0
Комментарии:
1. Меня смущает
lblIDNumber
vstxtIDNumber
. Вы используете метку или текстовое поле? Я предполагаю, что когда вы говорите,lblIDNumber.Caption
вы имеете в видуtxtIDNumber.Text
.2. Прошу прощения… Я имею в виду lblIDNumber
3. Тогда я немного сбит с толку — если вы извлекаете это из метки, то это не то, что пользователь может изменить. Это просто должно быть константой?
4. Потому что я ответил на вопрос, предполагая, что это текстовое поле и что вы хотели, чтобы переменная обновлялась всякий раз, когда пользователь изменяет текст. Метки используются только для отображения текста пользователю, а не для получения входных данных, так какова же цель считывания заголовка из метки?
5. Да, константа… Этот код предназначен для программы поиска .
Ответ №1:
Вы не упомянули txtIDNumber
в коде — вы упомянули lblIDNumber
. Я предполагаю, что вы имеете в виду, что эти два должны быть одинаковыми. Другими словами, код, который у вас есть в настоящее время, должен быть примерно таким:
.RecordSource = "select * from tblpersonal where empid like '" amp; Me.txtIDNumber.Text amp; "*'"
Итак, вы используете значение текстового поля в форме для заполнения SQL-запроса. Прав ли я пока?
И вы спрашиваете, что, если я сохраню идентификационный номер в переменной, а не в текстовом поле? Я согласен, это, вероятно, шаг в правильном направлении.
Таким образом, вы могли бы создать переменную в разделе «Общие объявления» формы, используя:
Dim idNumber As Integer
Идея состоит в том, чтобы обновлять значение этой переменной каждый раз, когда изменяется текстовое поле. Примечание: Я предполагаю, что «идентификационный номер» является целым числом — если нет, вам следует использовать вместо него строку.
Теперь вам нужно обновить эту переменную при изменении текстового поля. В txtIDNumber_Change
случае вам захочется добавить код для преобразования строки txtIDNumber.Text
в целое число и сохранить его в idNumber
. Я забыл точный синтаксис, но я предполагаю что-то вроде:
idNumber = Int(txtIDNumber.Text)
Наконец, теперь вы можете использовать idNumber
переменную в SQL-запросе вместо текстового поля:
.RecordSource = "select * from tblpersonal where empid like '" amp; idNumber amp; "*'"
Комментарии:
1. Примечание об уязвимостях SQL-инъекций: в вашем исходном коде есть проблема с безопасностью. Пользователь мог ввести в текстовое поле
4'; drop table tblpersonal; select * from tblpersonal where empid = '
— это фактически привело бы к выполнению их вредоносного кода для удаления таблиц, потому что вы не очистили строку. Преобразование его в целое число, как я предложил, решило бы эту проблему в данном конкретном случае, но если вы хотите разрешить полные строки в любом месте, исправить проблему будет намного сложнее.2. @mgiuca … итак, каков наилучший синтаксис для этого? Я использую этот код для программы поиска .
3. Если целью кода является возможность поиска сотрудника по идентификатору, который пользователь вводит в текстовое поле, тогда у вас должно быть текстовое поле, а не метка … как я сказал в ответ на вопрос, я в замешательстве по этому поводу. Если у вас действительно есть текстовое поле, то мой ответ дает весь необходимый вам синтаксис… определите переменную, преобразуйте строку в целое число и сохраните ее в переменной, а затем используйте переменную в запросе.
Ответ №2:
Замените меня.lblIDNumber.Заголовок с переменным номером
Комментарии:
1. Я спрашиваю о синтаксисе,
.RecordSource = "select * from tblpersonal where empid like '" varIDNumber "*'"
правильно ли это?2. Ну, вам все еще нужны амперсанды. Итак …
where empid like '" amp; varIDNumber amp; "*'"
. Но вам все еще нужен некоторый код для заполнения переменной.
Ответ №3:
Если у вас есть константа в метке и вы предпочли бы, чтобы константа вместо этого хранилась в переменной, создайте Const
в коде формы. Допустим, на этикетке есть текст «43».
В разделе общих объявлений формы добавьте код:
Const idNumber As Integer = 43
Затем, при построении запроса:
.RecordSource = "select * from tblpersonal where empid like '" amp; idNumber amp; "*'"
При этом запрос будет сконструирован с использованием константы 43. Я действительно не вижу в этом смысла — если вы хотите, чтобы номер сотрудника был чем-то, что пользователь может ввести, смотрите Мой другой ответ.
Комментарии:
1. …не могли бы вы спросить вас? какова цель asterisk?
'" amp; idNumber amp; "*'"
что, если я заменю его знаком процента? Каков был бы результат?2. Я не уверен, для чего нужен *. Я думаю, что% — это то, что вы обычно используете в качестве подстановочного знака в SQL. Это означает, что найдите любого сотрудника с идентификационным номером, который начинается с этих цифр.