Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > запись в нужном формате


Автор: dize 26.8.2009, 21:00
Для записи в файл использую
Код

procedure TStop_order.Button2Click(Sender: TObject);
var
m:Tstringlist;
i:integer;
begin
  m:=Tstringlist.create;
  ADOQ_emitent.close;
  ADOQ_emitent.sql.clear;
  ADOQ_emitent.sql.add('select * from Stop_zayavki');
  ADOQ_emitent.open;
  ADOQ_emitent.first;
  for i:=1 to ADOQ_emitent.recordcount do
   begin
   m.add('ACTION='+ADOQ_emitent.fieldvalues['action'] + '; TRANS_ID=' + ADOQ_emitent.FieldByName('id_trans').AsString + '; STOPPRICE=' + ADOQ_emitent.Fieldbyname('stop_cena').AsString + '; PRICE=' + ADOQ_emitent.Fieldbyname('Cena_ispoln').AsString + ';');
   ADOQ_emitent.next;
   end;
 m.savetofile('trans.tri');
 m.free;
end;


Проблема в том, что когда доходит дело до полей stop_cena и Cena_ispoln, у которых тип double, вылезает ошибка "Could not convert variant of type(string) into type(double)". Как это можно обойти?

Автор: dize 26.8.2009, 22:22
Заодно тут же спрошу..как при помощи этой же процедуры дозаписывать, а не перезаписывать в файл.

Автор: Данкинг 26.8.2009, 22:30
Цитата(dize @  26.8.2009,  23:22 Найти цитируемый пост)
Заодно тут же спрошу..как при помощи этой же процедуры дозаписывать, а не перезаписывать в файл. 

В созданный stringlist сначала грузить из существующего файла, а потом уже гонять цикл по таблице, добавляя строчки.

Цитата(dize @  26.8.2009,  22:00 Найти цитируемый пост)
Как это можно обойти? 

Попробуй так, только проследи, не обрезается ли дробная часть:
Код
m.add('ACTION='+ADOQ_emitent.fieldvalues['action'] + '; TRANS_ID=' + ADOQ_emitent.FieldByName('id_trans').AsString + '; STOPPRICE=' + vartostr(ADOQ_emitent.Fieldvalues['stop_cena']) + '; PRICE=' + vartostr(ADOQ_emitent.Fieldvalues['Cena_ispoln']) + ';');

Автор: dize 26.8.2009, 22:39
Цитата(Данкинг @  26.8.2009,  22:30 Найти цитируемый пост)
Попробуй так, только проследи, не обрезается ли дробная часть

Та же самая ошибка выходит.

Автор: Данкинг 26.8.2009, 22:49
Ты текст ошибки правильно написал?

Автор: dize 26.8.2009, 22:58
Да, правильно, ошибки одинаковые.

Автор: Romikgy 26.8.2009, 23:13
Цитата(dize @  26.8.2009,  20:00 Найти цитируемый пост)
 "Could not convert variant of type(string) into type(double)"

в данном куске кода данное преобразование не производиться...

Автор: Akella 26.8.2009, 23:23
Цитата(Romikgy @  26.8.2009,  23:13 Найти цитируемый пост)
в данном куске кода данное преобразование не производиться... 

 smile ггг, не могу конвертировать вариантный тип (строкИ) в вещественный тип

Добавлено @ 23:25
Попробуй
Код

.... VarToStr(ADOQ_emitent.Fieldbyname('stop_cena').AsString) ...


А ещё почитай про NullStrictConvert

Автор: dize 27.8.2009, 04:42
Akella, и так не выходит, та же ошибка.

Автор: CodeMonkey 27.8.2009, 08:32
Контрольный вопрос: если закомментировать строчку с m.add(, то работает или нет?

Автор: dize 27.8.2009, 09:55
CodeMonkey, Если ты подразумеваешь, недает ли ошибок, то нет, конечно не дает.

Автор: Данкинг 27.8.2009, 10:11
Цитата(Romikgy @  27.8.2009,  00:13 Найти цитируемый пост)
в данном куске кода данное преобразование не производиться... 

Вот правильно же. Откуда ошибке-то взяться?

Автор: Akella 27.8.2009, 14:35
Цитата(dize @  27.8.2009,  04:42 Найти цитируемый пост)
Akella, и так не выходит, та же ошибка. 

покажи теперешний код

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