2010-03-25 7 views
0

Я получаю синтаксическую ошибку при обработке следующих строк кода. Особенно на AQ_Query.Open;Ошибка синтаксиса ADO SQL Delphi

procedure THauptfenster.Button1Click(Sender: TObject); 
var 
    option: TZahlerArray; 
begin 
    option := werZahlte; 
    AQ_Query.Close; 
    AQ_Query.SQL.Clear; 
    AQ_Query.SQL.Add('USE wgwgwg;'); 
    AQ_Query.SQL.Add('INSERT INTO abrechnung '); 
    AQ_Query.SQL.Add('(`datum`, `titel`, `betrag`, `waldemar`, `jonas`, `ali`, `ben`)'); 
    AQ_Query.SQL.Add(' VALUES '); 
    AQ_Query.SQL.Add('(:datum, :essen, :betrag, :waldemar, :jonas, :ali, :ben);'); 
    AQ_Query.Parameters.ParamByName('datum').Value := DateToStr(mcDatum.Date); 
    AQ_Query.Parameters.ParamByName('essen').Value := ledTitel.Text; 
    AQ_Query.Parameters.ParamByName('betrag').Value := ledPreis.Text; 
    AQ_Query.Parameters.ParamByName('waldemar').Value := option[0]; 
    AQ_Query.Parameters.ParamByName('jonas').Value := option[1]; 
    AQ_Query.Parameters.ParamByName('ali').Value := option[2]; 
    AQ_Query.Parameters.ParamByName('ben').Value := option[3]; 
    AQ_Query.Open; 
end; 

Ошибка:

SQL Error

Я использую MySQL Delphi 2010.

ответ

5
  1. USE и INSERT - это две разные команды SQL .
  2. MySQL не поддерживает так называется «Партии».

=> вы должны вызвать эти команды один за одним

+0

Итак, у меня есть два разных заявления. для вызова AQ_Query.ExecSql для вставки. Open не работает, потому что он говорит: «AQ_Query не возвращает никаких данных». Тем не менее, он не обновляется в DBGrid. Как его обновить? – Acron

+0

Да, вы используете Open для запросов, возвращающих результаты, в противном случае используется ExecSQL. Где какая-либо функция DBGrid в исходном вопросе?!?! – Deltics

+0

;) Nvm. Используется близко и открыто в наборе данных. спасибо @ dmitry – Acron

1

кажется мне, как вы используете кавычку на третьем AQ_Query.SQL.Add линии, когда вам нужно использовать нормальные одинарные кавычки.

+0

Да, это линии точек сообщения об ошибке, и я не вижу ничего, там ... –

+0

На самом деле, поскольку элементы в backticks являются, по-видимому, именами столбцов, не должно быть необходимости в каких-либо пунктуациях вообще. –

+0

Вы можете окружать имена столбцов квадратными скобками. '([datum], [titel], [betrag] ... хотя его не требуется – skamradt

0

Использование базы данных в сценарии SQL.

AQ_Query.SQL.Add('INSERT INTO wgwgwg.dbo.abrechnung '); 
    AQ_Query.SQL.Add('(`wgwgwg.dbo.abrechnung.datum`, `wgwgwg.dbo.abrechnungtitel`, `wgwgwg.dbo.abrechnungbetrag`, `wgwgwg.dbo.abrechnungwaldemar`, `wgwgwg.dbo.abrechnungjonas`, `wgwgwg.dbo.abrechnungali`, `wgwgwg.dbo.abrechnungben`)'); 

    AQ_Query.SQL.Add(' VALUES '); 

    AQ_Query.SQL.Add('(:datum, :essen, :betrag, :waldemar, :jonas, :ali, :ben);'); 
    AQ_Query.Parameters.ParamByName('datum').Value := DateToStr(mcDatum.Date); 
    AQ_Query.Parameters.ParamByName('essen').Value := ledTitel.Text; 
    AQ_Query.Parameters.ParamByName('betrag').Value := ledPreis.Text; 
    AQ_Query.Parameters.ParamByName('waldemar').Value := option[0]; 
    AQ_Query.Parameters.ParamByName('jonas').Value := option[1]; 
    AQ_Query.Parameters.ParamByName('ali').Value := option[2]; 
    AQ_Query.Parameters.ParamByName('ben').Value := option[3]; 

Вы также можете сделать новое подключение к wgwgwg и обратитесь вашим AQ_Query к новому соединению

+0

Спасибо RRUZ, я забыл очки – Ravaut123

+0

где приходит, что dbo в wgwgwg.dbo.abrechnung.datum от? – Acron

+1

Владелец базы данных (dbo) Dbo - это пользователь, у которого подразумеваются разрешения для выполнения всех действий в базе данных. Любой член фиксированной роли сервера sysadmin, который использует базу данных, сопоставляется с особым пользователем внутри каждой базы данных, называемой dbo. Кроме того, любой объект, созданный любым членом фиксированной роли сервера sysadmin, автоматически принадлежит dbo. см. Http://msdn.microsoft.com/en-us/library/aa905208%28SQL.80%29.aspx – Ravaut123

Смежные вопросы