powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Объясните ситуацию
21 сообщений из 21, страница 1 из 1
Объясните ситуацию
    #32134081
Здравствуйте все,
объясните мне пожалуйста простую истину:

Как сгенерировать SQL запрос, чтоб м нем использовались значения, которые вводятся в Edit1.Text

Типа:
Допустим я в Edit1.Text ввёл Петя. И мне нужно что-то наподобие
insert into people(name) values(Edit1.Text);

Объясните пожалуйста суть или дайте ссылочку, где это прочитать.
Заранее благодарен.
...
Рейтинг: 0 / 0
Объясните ситуацию
    #32134082
Фотография maloi_alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
'insert into people(name) values('+chr(39)+Edit1.Text+chr(39)+');'
...
Рейтинг: 0 / 0
Объясните ситуацию
    #32134083
Фотография maloi_alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще для этих целей существую параметры.
...
Рейтинг: 0 / 0
Объясните ситуацию
    #32134084
Благодарю, а для чего chr(39)? Это код символа ' ?
А нет ли какого-нибудь другого способа?
Если у меня много параметров необходимо добавлять?
...
Рейтинг: 0 / 0
Объясните ситуацию
    #32134085
А как это сделать с помошью параметра?
...
Рейтинг: 0 / 0
Объясните ситуацию
    #32134086
Фотография maloi_alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Благодарю, а для чего chr(39)? Это код символа ' ?
chr(39)-это кaвычки.

На счет параметров, пока почитай пожалуйста в справке. Извини, сейчас просто очень занят.
...
Рейтинг: 0 / 0
Объясните ситуацию
    #32134095
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо это дело в FAQ по Дельфи запулит.

При сборке строки запроса, при передачи текстового параметра в строку всегда используйте функции

QuotedSt
AnsiQuotedSt

ADOCommand1.commandText:='insert into people(name) values('+QuotedSt(Edit1.Text)+');'
ADOCommand1.commandText:=insert into people(name) values('+AnsiQuotedSt(Edit1.Text,'''')+');'

Если использовать параметры, то сия штуковина будет выглядеть так

ADOCommand1.commandText:='insert into people(name) values(:EDIT1);'
ADOCommand1.Parameters.ParamValues['EDIT1']:=Edit1.Text;
Возможно я ошибся в предыдущей строке :), так я не стороник подхода с использованием параметров и никогда его не применяю. И связано это с тем, что я работаю со SQL-сервером, поддерживающим хранимые процедуры. Если ХП нет, то использование параметров может дать некоторое преимущество, если сервер базы поддержиает PREPARE, т.е. запрос компилится при загрузке приложения, а потом выполняется без разборки с разными параметрами. Честно говоря, я не знаю баз ISAM, которые бы это делали. Вроде бы Paradox имеет какие-то функции оптимизации, но кроме общих фраз в документации об этом не сказано. Да и то, это должно работать только при работе через BDE. ODBC для парадокса поддерживает только версию Paradox 5, в то время как Дельфя работает с форматом Paradox 7.

В моей программе это бы выглядело так

ADOCommand1.commandText:='Execute insertPeople ' +QuotedSt(Edit1.Text)
...
Рейтинг: 0 / 0
Объясните ситуацию
    #32134098
Фотография ScableR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, по моему это извращение, при генерации запроса использовать chr(39), ведь если почитать хелп по дельфи, то можно вот такое найти:
Код: plaintext
''''                { ' }

Проще говоря, если поставить два раза по кавычке '', то получится одна единственная в поле вывода :)... Пример:
Код: plaintext
edit1.text := 'I don''t ...'; // выведет: I don't ...

Вот так-то...
2Cat2
Интересно, надо будет и твой способ юзануть :)
...
Рейтинг: 0 / 0
Объясните ситуацию
    #32134104
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну ну а кто то это отменял ?

edit1.text := ''I don''t ...''; // выведет: 'I don't ...' :o)
точно непомню или три ''' ли две !
...
Рейтинг: 0 / 0
Объясните ситуацию
    #32134107
Фотография ScableR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А у тебя какая дельфя???
Просто по твоему примеру она х*й что выведет!
...
Рейтинг: 0 / 0
Объясните ситуацию
    #32134190
Фотография maloi_alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На вкус и цвет товарищей нет !
с/у Малой
...
Рейтинг: 0 / 0
Объясните ситуацию
    #32134191
Фотография ScableR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2maloi_alex
Ты это к чему???
...
Рейтинг: 0 / 0
Объясните ситуацию
    #32134193
Фотография maloi_alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да к вот этому :)
Господа, по моему это извращение, при генерации запроса использовать chr(39), ведь если почитать хелп по дельфи, то можно вот такое найти:
...
Рейтинг: 0 / 0
Объясните ситуацию
    #32134195
Фотография ScableR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ааа... Ну, просто по этому способу надо меньше вводить :), а результат получается такой-же.
...
Рейтинг: 0 / 0
Объясните ситуацию
    #32134204
SQL строка такая:
select * from Employees where LastName=:mylastname

:mylastname - это твоя переменная, которую будешь передавать
через строчку Parameters[0].Value := Edit.text;


а так пишешь внутри процедуры, завязываешь старт этого куска на кнопку


with qEmployees do
begin
DisableControls;
Close;
Parameters[0].Value := Edit.text;
Prepared := True;
Open;
EnableControls;
end;
...
Рейтинг: 0 / 0
Объясните ситуацию
    #32134205
точнее
Parameters[0].Value := QuotedStr(Edit.text);
...
Рейтинг: 0 / 0
Объясните ситуацию
    #32134206
Фотография ScableR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще куда-то в сторону ушли... К Selectaм всяким :( А вот такой кусок кода не лучше?

Код: plaintext
1.
2.
3.
4.
5.
6.
WITH Main.ADOQuery1 DO BEGIN
   WITH SQL DO BEGIN
      Clear;
      Add('INSERT INTO people(name) VALUES (''' + Edit1.Text + ''')');
   END;
END;
Main.ADOQuery1.ExecSQL;
...
Рейтинг: 0 / 0
Объясните ситуацию
    #32134226
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScableR
Не лучше, а точно такой же ошибочный.
Подумайте, Что будет, если в Edit1.Text ввести строку c одиночной кавычкой?
...
Рейтинг: 0 / 0
Объясните ситуацию
    #32134233
Фотография ScableR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НУ.... А не лучше-ли тогда сделать проверку на то, что ввели в поле? А если ввели одинарную кавычку, то добавить к ней еще одну и так далее :)......
...
Рейтинг: 0 / 0
Объясните ситуацию
    #32278962
Alexey S. Petrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть способ проще.

Edit1.text - наше поле для ввода.

Строка запроса выглядит так.

Query1.sql.add('Insert into table_name (Name)
values (' + quotedStr(Edit1.text)+ ')');

Мы добавляем в базу строку с текстом из edit1

Нетрудно догатдаться как добавить туда несколько параметров за один заапрос. - делаем переменную и пишем в нее конкатинацией строку запроса - потом подставляем переменную вместо edit1.text. Там будет гкморой с синтаксисам - но все раставляется по логике вещей...
...
Рейтинг: 0 / 0
Объясните ситуацию
    #32279197
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2
будет точно тоже самое что и в твоем случае. Если введут кавычку в поле редактирования.
хотя в данном случае лучше юзать параметры
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Объясните ситуацию
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]