Страница 1 из 1

Запросы MySQL в лазарусе [Решено]

СообщениеДобавлено: 26.06.2011 15:04:57
sign
Подключил базу MySQL посредством библиотеки SQLDB.
Использую TMySQL50Connection, TSQLTransaction и TSQLQuery.
В приведённом запросе на втором ExecSQL - ошибка - исключение EDatabase Error
Затем идет сообщение, что "Cannot open a non-select statement"
Код: Выделить всё
procedure TDM.MakeMonthTable(_Date: TDate; _Level: Integer);
var Y, M: Integer;
    i: Integer;
begin
  Y := YearOf(_Date);
  M := MonthOf(_Date);
  qTmp.SQL.Clear;
  qTmp.SQL.Add('TRUNCATE months;');
  qTmp.ExecSQL;
  qTmp.SQL.Clear;
  qTmp.SQL.Add('INSERT INTO months(Yb, Mb) VALUES');
  for i := 1 to _Level-1 do begin
    qTmp.SQL.Add(Format('(%d, %d),', [Y, M]));
    _Date := SysUtils.IncMonth(_Date, -1);
    Y := YearOf(_Date);
    M := MonthOf(_Date);
  end;
  qTmp.SQL.Add(Format('(%d, %d);', [Y, M]));
  qTmp.ExecSQL;
  qTmp.Open;
end;

Содержание выполняемого SQL
Код: Выделить всё
INSERT INTO months(Yb, Mb) VALUES
(2011, 6);


Что не так я делаю?

Lazarus v0.9.31
FPC 2.4.4
SVN: 31267
i386-win32-win32/win64

Re: Запросы MySQL в лазарусе

СообщениеДобавлено: 26.06.2011 15:24:02
Vadim
sign
Уже раз пятьсот тут, наверное, писали, что Open - это для запросов типа SELECT, потому что только SELECT формирует набор данных, который открывает метод Open.
А у Вас там что за фигня в тексте запроса?

Re: Запросы MySQL в лазарусе

СообщениеДобавлено: 26.06.2011 15:28:25
WAYFARER
Код: Выделить всё
qTmp.ExecSQL;
qTmp.Open; //Зачем?

sign писал(а): "Cannot open a non-select statement"

У вас запрос не результирующий

Re: Запросы MySQL в лазарусе

СообщениеДобавлено: 26.06.2011 16:45:31
sign
Vadim писал(а):sign
Уже раз пятьсот тут, наверное, писали, что Open - это для запросов типа SELECT, потому что только SELECT формирует набор данных, который открывает метод Open.
А у Вас там что за фигня в тексте запроса?

Не, ну чё за фигня.
Программа стала кушать замечательно SQL запросы.
Естественно, open убрал.

Но вылетала-то на ExecSQL!
Я на данной строке ставил точку останова и F8 - был вылет.