Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.10.2012, 17:34
Сергей77 Сергей77 вне форума
Прохожий
 
Регистрация: 14.05.2012
Сообщения: 31
Репутация: 10
По умолчанию Проблема с OnCalcFields в DBF

День добрый.

Delphi XE
БД: DBF

Вот такая проблема:
- есть простой запрос с тремя полями: 2 из которых (A и B) обычные текстовые данные, а одно (С) - вычисляемое (на основе двух полей)
- так вот: если я использую CalcFields, то вычисляемое поле НЕ ВЫЧИСЛЯЕТСЯ - всегда возвращается пустая строка

Привожу код
Код:
procedure TDM.Q1CalcFields(DataSet: TDataSet);
begin
  С.AsString := A.AsString + B.AsString;
end;

А и B - простые строки и данные в таблице есть

но что самое интересное - не работает и такой код
Код:
procedure TDM.Q1CalcFields(DataSet: TDataSet);
begin
  С.AsString := 'QQQQQQQQQQQQQQQQQq';
  Showmessage(С.AsString); //все равно возвращает ''
end;
Ответить с цитированием
  #2  
Старый 25.10.2012, 09:07
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

в Delphi 7 такое смоделировал создав пустой обработчик события OnGetText у fkCalculated. решилось:
Код:
procedure TForm1.Table1CalcGetText(Sender: TField; var Text: String;
  DisplayText: Boolean);
begin
  Text:=Sender.AsString;
end;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 25.10.2012, 11:22
Сергей77 Сергей77 вне форума
Прохожий
 
Регистрация: 14.05.2012
Сообщения: 31
Репутация: 10
По умолчанию

Попробовал у себя (в XE).
Не помогло. Все также возвращает ''
Ответить с цитированием
  #4  
Старый 25.10.2012, 12:54
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

залей минимальный проект воспроизводящий ошибку
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #5  
Старый 25.10.2012, 13:15
Сергей77 Сергей77 вне форума
Прохожий
 
Регистрация: 14.05.2012
Сообщения: 31
Репутация: 10
По умолчанию

Залил кокроткий проект
Вложения
Тип файла: rar test.rar (717.0 Кбайт, 2 просмотров)
Ответить с цитированием
  #6  
Старый 25.10.2012, 14:16
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

на Delphi 7 все нормально.
а если без вычисляемого поля делать:
Код HTML:
SQL.Add('SELECT classes.*, classes.b+"-"+classes.a ba FROM classes');
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #7  
Старый 25.10.2012, 15:57
Сергей77 Сергей77 вне форума
Прохожий
 
Регистрация: 14.05.2012
Сообщения: 31
Репутация: 10
По умолчанию

Это упрощенный пример.
В реальной ситуации мне надо провести вычисления, которые нельзя сделать средствами SQL...
Ответить с цитированием
  #8  
Старый 12.11.2012, 14:19
Сергей77 Сергей77 вне форума
Прохожий
 
Регистрация: 14.05.2012
Сообщения: 31
Репутация: 10
По умолчанию

Есть еще варианты по решению этой проблемы?
Я так и не могу добиться вычисления этого поля...
Ответить с цитированием
  #9  
Старый 12.11.2012, 14:53
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Сергей77
Это упрощенный пример.
В реальной ситуации мне надо провести вычисления, которые нельзя сделать средствами SQL...
это ж какие? уж очень интересно

^
поле А = 254 символа
поле В = 4 символа
поле С = 20 символов ... непорядок
Изображения
Тип файла: jpg Безымянный.JPG (14.4 Кбайт, 7 просмотров)
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз

Последний раз редактировалось Yurk@, 12.11.2012 в 15:00.
Ответить с цитированием
  #10  
Старый 12.11.2012, 14:55
Сергей77 Сергей77 вне форума
Прохожий
 
Регистрация: 14.05.2012
Сообщения: 31
Репутация: 10
По умолчанию

В БД строка лежит в закодированном виде.

В вычисляемом поле происходит декодирование строки и добавление к ней еще одной строки.
Ответить с цитированием
  #11  
Старый 12.11.2012, 15:13
Сергей77 Сергей77 вне форума
Прохожий
 
Регистрация: 14.05.2012
Сообщения: 31
Репутация: 10
По умолчанию

Выставил 254 + 4 = 258.

Результат такой же.

Делаю в XE3.

В Delphi 7 проблемы такой у меня нет...
Ответить с цитированием
  #12  
Старый 12.11.2012, 15:19
Сергей77 Сергей77 вне форума
Прохожий
 
Регистрация: 14.05.2012
Сообщения: 31
Репутация: 10
По умолчанию

И еще момент:
- если я использую Query1CalcFields, то у меня при выводе и основные поля A и B искажаются, хотя с ними ничего не делаю в этой процедуре
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:11.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025