Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.03.2013, 01:26   #1
hemn6vyr
Пользователь
 
Регистрация: 18.06.2012
Сообщений: 67
По умолчанию Закрывается консольное приложение после выполнения.

После выполнения вот этого кода приложение закрывается несмотря на readln'ы. Подскажите в чём причина?

Код:
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  Winapi.Windows,
  Winapi.Messages,
  System.SysUtils,
  System.Variants,
  System.Classes,
  Data.DB,
  Data.Win.ADODB,
  Vcl.ComCtrls;

var
  Connect : TADOConnection;
  Query : TADOQuery;
  a:integer;
  b:string;
  Count:integer;
  Q,A1,A2,A3,A4:string;
  Sourse: TStringList;
  
function ReadQA(Ln: Integer): Boolean;
Var
  QA, vr:integer;
  S: String;
begin
  S := Trim(Sourse[Ln]);
  if Pos('.', S) = 4 then QA := 1;
  if Pos(')', S) = 2 then QA := 2;
  if A4 <> '' then  QA := 3;
  Case QA Of
    1 : Begin
          Count := StrToInt(S[1] + S[2] + S[3]);
          Delete(S, 1, Pos('.', S));
          Q := Trim(S);
          Write(Count);
          Writeln(Q);
        End;
    2 : Begin
          vr := StrToInt(S[1]);
          Case vr of
            1 : Begin
                  Delete(S, 1, Pos(')', S));
                  A1 := Trim(S);
                  Write('..');
                End;
            2 : Begin
                  Delete(S, 1, Pos(')', S));
                  A2 := Trim(S);
                  Write('..');
                End;
            3 : Begin
                  Delete(S, 1, Pos(')', S));
                  A3 := Trim(S);
                  Write('..');
                End;
            4 : Begin
                  Delete(S, 1, Pos(')', S));
                  A4 := Trim(S);
                  Write('..');
                End;
           End;
        End;
    3 : Begin
          Try
            Query.Close;
            Query.SQL.Clear;
            Query.SQL.Add('SELECT * FROM poks');
            Query.Open;
            Query.Append;
            Query.FieldByName('count').AsInteger := Count;
            Query.FieldByName('q').AsString := q;
            Query.FieldByName('a1').AsString := a1;
            Query.FieldByName('a2').AsString := a2;
            Query.FieldByName('a3').AsString := a3;
            Query.FieldByName('a4').AsString := a4;
            Query.Active:=True;
            Query.Post;
            Query.Close;
            WriteLn('OK');
            Result := True;
            A4 := '';
          Except
            on E: Exception do
            Writeln(E.ClassName, ': ', E.Message);
          End;
        End;
    End;
End;

Function Make(fs:string):boolean;
Var
I: Integer;
Begin
  Sourse:=TStringList.Create;
  if FileExists(fs) then Sourse.LoadFromFile(fs);
  for I := 0 to Sourse.Count+1 do
  Begin
  ReadQA(I);
  End;
End;

begin
  try
    { TODO -oUser -cConsole Main : Insert code here }
    Connect := TADOConnection.Create(nil);
    Query := TADOQuery.Create(nil);
    Connect.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' +
                               GetCurrentDir + '\bd.mdb' +
                               ';Persist Security Info=False';
    Query.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' +
                                  GetCurrentDir + '\bd.mdb' +
                                  ';Persist Security Info=False';
    Query.Connection := Connect;
    Make('C:\1.txt');
    readln(a);
    readln(a);
    readln(a);



  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.
hemn6vyr вне форума Ответить с цитированием
Старый 08.03.2013, 01:29   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

срабатывает исключение. Перед последним end. поставь ReadLn;, его же поставь в Except блоке.
Человек_Борща вне форума Ответить с цитированием
Старый 08.03.2013, 01:32   #3
hemn6vyr
Пользователь
 
Регистрация: 18.06.2012
Сообщений: 67
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
срабатывает исключение. Перед последним end. поставь ReadLn;, его же поставь в Except блоке.
Спасибо :-)
Странно, в обыкновенном приложении его не было :-)
hemn6vyr вне форума Ответить с цитированием
Старый 08.03.2013, 01:37   #4
hemn6vyr
Пользователь
 
Регистрация: 18.06.2012
Сообщений: 67
По умолчанию

Теперь ещё вопрос.
Суть программы в записи вопросов из текста в бд аксеса.
Почему последний вопрос считывается, а ответы нет?
hemn6vyr вне форума Ответить с цитированием
Старый 08.03.2013, 03:27   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

не знаю, но тут ошибка:
Код:
  for I := 0 to Sourse.Count+1 do
замените на:
Код:
  for I := 0 to Sourse.Count - 1 do
мб из-за неё.
Человек_Борща вне форума Ответить с цитированием
Старый 08.03.2013, 19:51   #6
hemn6vyr
Пользователь
 
Регистрация: 18.06.2012
Сообщений: 67
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
не знаю, но тут ошибка:
Код:
  for I := 0 to Sourse.Count+1 do
замените на:
Код:
  for I := 0 to Sourse.Count - 1 do
мб из-за неё.
Правильно :-) Промахнулся маленько когда печатал и всё :-) Вчера ещё нашёл, но всёравно спасибо :-)
hemn6vyr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не закрывается приложение. the_deer_one C# (си шарп) 5 08.06.2011 14:37
ShellExecute - запускаемое приложение закрывается ( fezilk25 Общие вопросы Delphi 9 18.04.2011 12:02
Самопроизвольно закрывается форма после выполнения процедуры nitroG Помощь студентам 5 04.05.2010 08:20
И опять проблема с хуками. Приложение само закрывается Altera Win Api 10 16.03.2010 19:39
консоль закрывается сразу после выполнения последнего действия F4RR3LL Общие вопросы C/C++ 2 14.09.2008 20:43