Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Загрузка SQL-запроса из файла


Автор: koven 2.11.2006, 09:22
Здравствуйте!
Подскажите, как можно загрузить SQL-запрос из файла?
Используется ADOQuery. Проблема в том, что ADOQuery.SQL - типа TWideStrings (и delphi ругается на несоответствие типов, например, при загрузке из INI-файла (TIniFile))

Автор: Akella 2.11.2006, 09:25
Цитата(koven @  2.11.2006,  09:22 Найти цитируемый пост)
например, при загрузке из INI-файла (TIniFile)) 

а зачем тебе ini-файл?

код в студию и файл прикрепи к посту.

Автор: koven 2.11.2006, 09:32
Код

procedure TMForm.LoadSettings;
var S: TStringList;
begin
  ADOQuery.SQL.Clear;

  if FileExists (ExtractFilePath(Application.ExeName) + 'sql.txt') then
  begin
    S := TStringList.Create;
    S.LoadFromFile( ExtractFilePath(Application.ExeName) + 'sql.txt' );
    ADOQuery.SQL.AddStrings(S);
    S.Free;
  end else
  begin
    Application.MessageBox('Файл с SQL-запросом не найден!'+#13#10+
                  'Будет использован стандартный запрос',
                  'Ошибка',
                  MB_OK+MB_ICONERROR);
    ADOQuery.SQL.Add('SELECT SC31.DESCR, SC33.DESCR, SP6521, SP102, SP3755 - SP102'+#13#10+
                       'FROM RG99, SC33, SC31'+#13#10+
                       'WHERE'+#13#10+
                       'SP3603 = 0 AND'+ #13#10+
                       'SP102 < SP3755 AND'+#13#10+
                       'SP101 LIKE SC33.ID AND'+#13#10+
                       'SP100 LIKE SC31.ID');
    ShowMessage('Загружен стандартный SQL запрос');
  end;
end;


Но с этим кодом вылетает exeption - "Unknown field RG99" (хотя это поле 100% есть и если вписать этот же sql-запрос в ObjectInspector'e - то все работает)

Автор: Akella 2.11.2006, 09:44
Код

procedure TMForm.LoadSettings;
begin
  ADOQuery.SQL.Clear;
  if FileExists (IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0))) + 'sql.txt') then
    ADOQuery.SQL.LoadFromFile(IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0))) + 'sql.txt');
  else begin
    Application.MessageBox('Файл с SQL-запросом не найден!'+#13#10+
                  'Будет использован стандартный запрос',
                  'Ошибка',
                  MB_OK+MB_ICONERROR);
    ADOQuery.SQL.Add('SELECT SC31.DESCR, SC33.DESCR, SP6521, SP102, SP3755 - SP102'+#13#10+
                       'FROM RG99, SC33, SC31'+#13#10+
                       'WHERE'+#13#10+
                       'SP3603 = 0 AND'+ #13#10+
                       'SP102 < SP3755 AND'+#13#10+
                       'SP101 LIKE SC33.ID AND'+#13#10+
                       'SP100 LIKE SC31.ID');
    ShowMessage('Загружен стандартный SQL запрос');
  end;
end


и я бы на твоём месте на ставил бы столько сообщений. Может такое произойти что файл часто будет отсутствовать, тогда эти сообщения на третий уже раз начинают портить нервы. Но в любом случает - это всего лишь совет, тебе решать.

Автор: koven 2.11.2006, 10:16
Цитата

и я бы на твоём месте на ставил бы столько сообщений


да, Вы правы, это лишнее, забыл убрать smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)