Библиотека для парсинга SQL-операторов

Это управляло мной безумный в течение прошлых нескольких дней и не могло обойти его, но наконец поняло его:

В моем machine.config файле у меня была запись под <system.web>:

<deployment retail="true" />

Это, кажется, переопределяет любые другие customError настройки, которые Вы определили в web.config файле, таким образом установив вышеупомянутую запись в:

<deployment retail="false" />

теперь средства, что я могу еще раз видеть подробные сообщения об ошибках, что я должен.

Эти machine.config расположен в [1 110]

32-разрядный

%windir%\Microsoft.NET\Framework\[version]\config\machine.config

64-разрядный

%windir%\Microsoft.NET\Framework64\[version]\config\machine.config 

Hope, которая помогает кому-то там и сохраняет несколько часов получения по запросу волос.

6
задан Larry Lustig 4 December 2009 в 15:44
поделиться

3 ответа

Взгляните на Gold Parser. Доступна версия Delphi и грамматика SQL на странице загрузки.

6
ответ дан 17 December 2019 в 02:30
поделиться

Парсеры SQL сложны.

Вы думали о таком подходе:

  1. Начать транзакцию.
  2. Отправить команду CREATE VIEW на сервер.
  3. поймать ошибку ( любой достойный драйвер базы данных должен уметь это делать).
  4. если произошла ошибка, проанализируйте сообщение об ошибке и покажите клиенту недостающие таблицы.
  5. откат

см. этот пример (PostgreSQL):

=> begin;
BEGIN
=> create view testview as select foo,bar from a join b on a.x=b.y;
ERROR:  relation "a" does not exist
LINE 1: create view testview as select foo,bar from a join b on a.x=...
                                                    ^
=> rollback;
ROLLBACK

или этот (Oracle):

SQL> create view testview as select foo,bar from a join b on a.x=b.y;
create view testview as select foo,bar from a join b on a.x=b.y
                                                   *
ERROR at line 1:
ORA-00942: table or view does not exist

SQL> rollback;

Rollback complete.
0
ответ дан 17 December 2019 в 02:30
поделиться

Вы можете использовать Delphi с ADODB.

Используйте TADOQuery, чтобы проверить правильность вашего запроса или нет, не открывая набор записей. Вы также можете получить имена полей запроса.

Перетащите TADOConnection в форму. Отбросьте TMemo и TButton и попробуйте этот код:

procedure TForm1.Button1Click(Sender: TObject);
var
  lADOQuery : TADOQuery;
  lFieldNames : TStrings;
begin
  lADOQuery := TADOQuery.Create(nil);
  try
    lADOQuery.Connection := ADOConnection1;
    lADOQuery.SQL.Text := Memo1.Text;
    lFieldNames := TStringList.create;
    try
      lADOQuery.GetFieldNames(lFieldNames);

      showmessage(lFieldNames.Text); // Show fieldNames of the query

      // To show that the dataset is not actually opened try this :
      // Throws an exception ( Dataset closed )
      //showmessage(inttostr(  lADOQuery.RecordCount ));
    except
      On e: Exception do
        ShowMessage('Invalid query');
    end;
    lFieldNames.free;
  finally
    lADOQuery.free;
  End;
end;
0
ответ дан 17 December 2019 в 02:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: