Добрый день!
Вопрос. База MySQL.
Запрос:
SELECT * FROM recipes WHERE ID = 'test'
В базе выполняется. Результат то что нужно. При переносе в скаду возникает затык с кавычками. Т.е.:
var
aQuery: string;
begin
{ Формируем запрос к БД }
aQuery := 'SELECT * FROM recipes WHERE ID = 'test';'
{ Отправляем запрос на выполнение c тегом = 1}
RunSQL(aQuery, nil, 1);
end.
В примерах используется переменная типа string. Но это если надо подставить, а нужно подставить текст в кавычки внутрь запроса, который сам в кавычках.
Подскажите куда смотреть.
Товарищи!
Терпение и труд все перетрут.
Решение после ряда экспериментов нашел следующее (может кому и пригодиться) :
var
aQuery: string;
var:string;
begin
var:='test';
{ Формируем запрос к БД }
aQuery := 'SELECT * FROM recipes WHERE ID = ' + Chr(39) + var + Chr(39) +';';
{ Отправляем запрос на выполнение c тегом = 1}
RunSQL(aQuery, nil, 1);
end.
В предыдущей записи в конце забыл поставить ;.
Если вместо var использовать внешнею переменную можно разработать интересные скрипты с заменой.
Тема закрыта.
Здравствуйте.
Лучше всего использовать специальную функцию, которая заключает текст в одинарные кавычки: QuotedStr. Или второй вариант, вместо одной одинарной кавычки ставить две одинарных кавычки подряд. Например:
var
S: string;
begin
// записываем в S строку: WHERE ID='var'
S := 'WHERE ID=' + QuotedStr('var');
// второй вариант делает то же самое
S := 'WHERE ID=''var''';
end.
Еще раз добрый день!
Столкнулся с непонятной ситуацией.
В универсальном скрипте по нажатию кнопки сначала идет проверка на пустую ячейку, потом апдейт данных в базе данных все как в примере на обновление записи рецепта.
- Выделяем строку в таблице которую хотим изменить.
- Отображаем в соответствующих полях
- ! Ни чего не меняем.
Жмем кнопку на выполнение скрипта апдейта и у нас ошибка:
"#23000Cannot add or update a child row: a foreign key constraint fails (....... CONSTRAINT ........ FOREIGN KEY .......... REFERENCES .........ON UPDATE CASCADE)"
Берем скрипт из скады вставляем его в SQL, дополняем чем нужно для теста и выполняем. Ошибок нет.
Скрипт из скады:
aQuery := 'UPDATE `vehicles` SET ' +
'`type_vehicles`=' + QuotedStr(edVehiclesType.AsStr) + ', ' +
'`type_chassis`=' + QuotedStr(edVehiclesTypeChassis.AsStr) + ', ' +
'`type_traffic`=' + QuotedStr(edTypeTraffic.AsStr) + ', ' +
'`type_support_wheel`=' + QuotedStr(edNumberInDepo.AsStr) + ', ' +
'`type_side_wheel`=' + QuotedStr(edNumberOnWay.AsStr) +
' WHERE `id_vehicles`=' + QuotedStr(edIDVehicles.AsStr);
{ Отправляем запрос на выполнение }
RunSQL(aQuery, nil, 19);
В скрипте типа "Выполнен SQL запрос":
case DataSet.Tag of
...
19 :tblVehicles.RunSQL('SELECT * FROM `vehicles`', tsSaveFixRow);
end;
и скрипт в MySQL(значения взяты из самой таблицы без изменений):
UPDATE vehicles SET type_vehicles = 'bottom',
type_chassis = 'mono rail',
type_traffic = 'cargo',
type_support_wheel = 'direct',
type_side_wheel = 'mixed'
WHERE id_vehicles = 'U4131';
При этом в таблицах в базе данных на всех Foreign Key стоит в Foreign Key Options -> On Update: -> CASCADE
Можете у себя проверить как то или посоветовать чего.
Жду вопросов и ответов.