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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.09.2014, 12:21   #1
tarakan1983
Форумчанин
 
Аватар для tarakan1983
 
Регистрация: 09.09.2008
Сообщений: 418
По умолчанию Кодировка при сохранении Exception в LOG

Здравствуйте, помогите пожалуйста с такой проблемой

Пишу такой код
Код:
function TFmMain.SaveLog(res: string): string;
  var
    F : TextFile;
    FileName : String;
begin
  FileName := ExtractFilePath(Application.ExeName) + 'Log.log';
  AssignFile(F, FileName);
  if FileExists(FileName) then
    Append(F)
  else
    Rewrite(F);
  res:=res;
  WriteLn(F, FormatDateTime('dd.mm.yyyy hh:nn:ss  : '+res, Now));
  CloseFile(F);
end;
Код:
try
            with Dm.FbSQL do
              begin
                SQL.Clear;
                SQL.Add('UPDATE T SET KOL = :KOL, PRICE = :PRICE, DOCID_ДЕЛАЮ_ОШИБКУ_ДЛЯ ПРОВЕРКИ = -8, D = :D WHERE ID = :ID');
                ParamByName('KOL').AsFloat := TEKOSTATOK+(Q.FieldValues['KOL']*OPER);
                ParamByName('ID').AsInteger :=Q.FieldValues['TID'];
                ParamByName('PRICE').AsFloat :=Q.FieldValues['PRICE'];
                ParamByName('D').AsDateTime := StrToDateTime(FmMain.DCheqLbl.Caption);
                ExecQuery;
              end;
          except
            on E : Exception do
              begin
                FmMain.Memo1.Clear;
                FmMain.Memo1.Text := E.ClassName+' поднята ошибка, с сообщением : '+E.Message;
                FmMain.Memo1.Visible := True;
                FmMain.SaveLog(FmMain.Memo1.Text);
                //FmMain.Memo1.Clear;
              end;

          end;
В memo1 вижу текст
Цитата:
EFIBInterBaseError поднята ошибка, с сообщением : Dm.FbSQL:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 1, column 48.
Д.
В файле log.log
Цитата:
08.09.2014 12:19:40 : 14FIBI1912:1914rBa401414rror поднята ошибка, с сообщением : 89.Fb40QL:
I19vali8 12:19ok1419.
81419a9i08.09.2014 12:19:40 40QL 14rror.
40QL 14rror 08.09.2014 12:19:40o814 = -104.
12:19ok1419 u19k19ow19 - li1914 1, 08.09.2014 12:19:40olu919 48.
Д.
Подскажите пожалуйста, как выяснить в какой кодировке и как правильно сохранять в лог
tarakan1983 вне форума Ответить с цитированием
Старый 08.09.2014, 12:58   #2
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

В файле похоже находится строка в виде Unicode, а надо Ansi. Переведите в с помощью AnsiString.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 08.09.2014, 13:03   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Пишите в лог на английском.
Человек_Борща вне форума Ответить с цитированием
Старый 08.09.2014, 13:09   #4
tarakan1983
Форумчанин
 
Аватар для tarakan1983
 
Регистрация: 09.09.2008
Сообщений: 418
По умолчанию

Цитата:
Сообщение от саша40 Посмотреть сообщение
В файле похоже находится строка в виде Unicode, а надо Ansi. Переведите в с помощью AnsiString.
Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Пишите в лог на английском.
Сделал так
Код:
function TFmMain.SaveLog(res: Ansistring): string;
  var
    F : TextFile;
    FileName : String;
begin
  FileName := ExtractFilePath(Application.ExeName) + 'Log.log';
  AssignFile(F, FileName);
  if FileExists(FileName) then
    Append(F)
  else
    Rewrite(F);
  WriteLn(F, FormatDateTime('dd.mm.yyyy hh:nn:ss  : '+res, Now));
  CloseFile(F);
end;
Код:
var
  h : AnsiString;
      тра-ля-ля
       try
            ..............
          except
            on E : Exception do
              begin               
                h := E.ClassName+' '+E.Message;                
                FmMain.SaveLog(h);                
              end;

          end;
К сожалению результат тот-же.
tarakan1983 вне форума Ответить с цитированием
Старый 08.09.2014, 13:24   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
В файле log.log
Да это вообще не похоже на юникод вроде...
А почему пользуешься write() ?
попробуй лог вести в TStringList. И его сохранять.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.09.2014, 13:36   #6
tarakan1983
Форумчанин
 
Аватар для tarakan1983
 
Регистрация: 09.09.2008
Сообщений: 418
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Да это вообще не похоже на юникод вроде...
А почему пользуешься write() ?
попробуй лог вести в TStringList. И его сохранять.
Спасибо, сейчас ошибка пишется нормально.
Только не покажете пример, как правильно дописывать со TStringList в файл, а то он у меня теперь постоянно перезаписывается.
tarakan1983 вне форума Ответить с цитированием
Старый 08.09.2014, 14:11   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

В начале проги его загружай:
Код:
if FileExists('Файлик лога') then Log.LoadfromFile(Угу);
Потом дописывай в конец:
Код:
Log.AddStrings(Memo.Lines); Log.SaveToFile(Ога);
И будет счастье.

По крайней мере я так делаю и не парюсь.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.09.2014, 14:11   #8
IliaIT
Форумчанин
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 977
По умолчанию

Цитата:
Сообщение от tarakan1983 Посмотреть сообщение
Сделал так
Код:
function TFmMain.SaveLog(res: Ansistring): string;
  var
    F : TextFile;
    FileName : String;
begin
  FileName := ExtractFilePath(Application.ExeName) + 'Log.log';
  AssignFile(F, FileName);
  if FileExists(FileName) then
    Append(F)
  else
    Rewrite(F);
  WriteLn(F, FormatDateTime('dd.mm.yyyy hh:nn:ss  : '+res, Now));
  CloseFile(F);
end;
WriteLn(F, FormatDateTime('dd.mm.yyyy hh:nn:ss : '+res, Now));
это что за абракодабра?
очень сложный формат времени выбрал
'dd.mm.yyyy hh:nn:ss : '+res хз что за формат....
читаем помощь д7
S := FormatDateTime('"The meeting is on " dddd, mmmm d, yyyy, " at " hh:mm AM/PM', Now + 0.125);
как минимум кавычки опущены при вставке и вообще это рискованный вариант при сохранении.
и пробуем переделать
WriteLn(F, FormatDateTime('dd.mm.yyyy hh:nn:ss', Now)+' : '+res);
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.
IliaIT вне форума Ответить с цитированием
Старый 08.09.2014, 14:13   #9
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Только не покажете пример, как правильно дописывать со TStringList в файл, а то он у меня теперь постоянно перезаписывается.
Никак, он не предназначен для этого, только весь файл перезаписывать умеет. TFileStream используйте тогда.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 08.09.2014, 14:16   #10
tarakan1983
Форумчанин
 
Аватар для tarakan1983
 
Регистрация: 09.09.2008
Сообщений: 418
По умолчанию

Stilet Спасибо.
IliaIT Дата пишется нормально и такой формат меня устраивает, попробовал Ваш вариант, Exception также пишется в кракозябрах.
Спасибо большое всем тему можно закрывать.
tarakan1983 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сообщение при сохранении Фатима2811 Microsoft Office Excel 7 04.05.2014 18:45
пауза при сохранении chudik_off Microsoft Office Excel 0 31.10.2011 14:48
Ошибка при сохранении БД Xeon332 Помощь студентам 2 05.01.2010 17:00
Ошибки при сохранении Alex19789 Microsoft Office Excel 6 16.10.2009 12:39
кривая кодировка при сохранении в txt SarahConner Общие вопросы Delphi 7 28.04.2009 15:33