Страница 1 из 1
Как сделать запрос с динамическими переменными?
Добавлено: Сб 13 июн 2015 14:34
bex007
Помогите пожалуйсто! Я хочу обновить статус одновременно на нескольких записей где после where будет массив или строки из memo. Может это делается в цикле? но главная чтоб имена одновременно обновился все.
Код: Выделить всё
myquery1.SQL.Text:='UPDATE tickets SET status:=1 WHERE seat IN (array);
Re: Как сделать запрос с динамическими переменными?
Добавлено: Пн 15 июн 2015 10:12
ViktorV
Для решения задачи вы можете использовать макросы. Например:
Код: Выделить всё
var
ArrayStr: string;
i: integer;
begin
MyQuery1.SQL.Text := MyQuery1.SQL.Text := 'UPDATE tickets SET status = 1 WHERE seat IN (&ARRAY)';
ArrayStr := '';
for i := 0 to Memo.Lines.Count - 1 do begin
if ArrayStr <> '' then
ArrayStr := ArrayStr + ',';
ArrayStr := ArrayStr + QuotedStr(Memo.Lines[i]);
end;
MyQuery1.MacroByName('ARRAY').Value := ArrayStr;
MyQuery1.Execute;
end;
Более подробную информацию об использовании макросов вы можете получить по ссылке:
http://www.devart.com/mydac/docs/#work_macros.htm
Re: Как сделать запрос с динамическими переменными?
Добавлено: Вт 16 июн 2015 10:51
bex007
спасибо за ответ, но к сожалению этот код выдает ошибки:
[dcc32 Error] Unit2.pas(1883): E2010 Incompatible types: 'string' and 'procedure, untyped pointer or untyped parameter'
[dcc32 Warning] Unit2.pas(1952): W1057 Implicit string cast from 'AnsiString' to 'string'
[dcc32 Warning] Unit2.pas(2072): W1019 For loop control variable must be simple local variable
[dcc32 Warning] Unit2.pas(2971): W1058 Implicit string cast with potential data loss from 'string' to 'AnsiString'
Re: Как сделать запрос с динамическими переменными?
Добавлено: Вт 16 июн 2015 12:07
ViktorV
Прошу прощение за неточность в примере приведенном в предыдущем посте. Для корректной работы примера, пожалуйста, замените строку
Код: Выделить всё
MyQuery1.SQL.Text := MyQuery1.SQL.Text := 'UPDATE tickets SET status = 1 WHERE seat IN (&ARRAY)';
на следующую
Код: Выделить всё
MyQuery1.SQL.Text := 'UPDATE tickets SET status = 1 WHERE seat IN (&ARRAY)';
Re: Как сделать запрос с динамическими переменными?
Добавлено: Вт 16 июн 2015 15:34
bex007
Так все отлично работает, Огромное вам спасибо
Re: Как сделать запрос с динамическими переменными?
Добавлено: Ср 17 июн 2015 09:58
ViktorV
Обращайтесь к нам, если у Вас возникнут вопросы по MyDAC.
Re: Как сделать запрос с динамическими переменными?
Добавлено: Пн 22 июн 2015 22:02
bex007
у меня еще один вопрос , у меня есть такой код
Код: Выделить всё
try
MyQuery1.close;
MyQuery1.SQL.Clear;
MyQuery1.SQL.Text:='INSERT INTO tickets (`id`, `seat`, `sector`) VALUES (NULL, :seat, NULL)';
MyQuery1.Prepare;
if not MyConnection1.InTransaction then
MyConnection1.StartTransaction;
try
for i := 1 to 795 do begin
MyQuery1.ParamByName('seat').AsString := IntToStr(i);
MyQuery1.Execute;
end;
MyConnection1.Commit;
except
MyConnection1.Rollback;
raise;
end;
except
on E: exception do
showmessage(E.Message);
end;
и я хочу чтоб в sector в цикле заходил данные вот так:
если seat больше 20 тогда в сектор записался B
если seat меньше 20 тогда в сектор записался A
Re: Как сделать запрос с динамическими переменными?
Добавлено: Вт 23 июн 2015 09:29
ViktorV
Данный вопрос относится построению архитектуры вашего приложения, а не к MyDAC функциональности. Для его решения, пожалуйста, задайте соответствующий вопрос на профильных форумах.
Re: Как сделать запрос с динамическими переменными?
Добавлено: Вт 23 июн 2015 17:10
bex007
С этим я уже разобрался! мне интересно как распечатать в цикле содержимое myquery1
Код: Выделить всё
try
myquery1.close;
myquery1.SQL.Clear;
myquery1.SQL.Text:='SELECT `id`, `date`, `time`, FROM tickets WHERE seat IN (&ARRAY)';
ArrayStr := '';
for i:= 0 to Memo1.Lines.Count - 1 do begin
if ArrayStr <> '' then
ArrayStr := ArrayStr + ',';
ArrayStr := ArrayStr + QuotedStr(Memo1.Lines[i]);
end;
MyQuery1.MacroByName('ARRAY').Value := ArrayStr;
myquery1.open;
frxreport1.PrepareReport;
FrxReport1.PrintOptions.ShowDialog:=false;
frxreport1.Print;
except
on E: exception do
showmessage(E.Message);
end;
так печатает только первое значение
Re: Как сделать запрос с динамическими переменными?
Добавлено: Чт 25 июн 2015 10:47
ViktorV
Данный вопрос относится к функциональности FastReport, а не к MyDAC. Для его решения, пожалуйста, обратитесь к документации FastReport.