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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.10.2010, 22:38   #1
Регинка-малинка
Пользователь
 
Регистрация: 21.09.2010
Сообщений: 33
По умолчанию Отделение данных

Здравствуйте,есть небольшая проблемка с бд access. столбец содержить "непростые" записи, то есть допустим столбец "сумма" и первое его поле содержит данные "5403 56666"- то есть сразу две суммы. подскажите пожалуйста как их отделить друг от друга не меняя саму базу. это мне нужно для того чтобы занести общую сумму "сумм" =)) в отчет.
Регинка-малинка вне форума Ответить с цитированием
Старый 10.10.2010, 23:20   #2
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Ух, ну и база у тебя... Писала бы все данные в одно поле :=))
Строку можно разбить по разделителям, например, так
Код:
function Tokenize(Str: WideString; Delimiter: string): TStringList;
var
  tmpStrList: TStringList;
  tmpString, tmpVal: WideString;
  DelimPos: LongInt;
begin
  tmpStrList := TStringList.Create;
  TmpString := Str;
  DelimPos := 1;
  while DelimPos > 0 do
  begin
    DelimPos := LastDelimiter(Delimiter, TmpString);
    tmpVal := Copy(TmpString, DelimPos + 1, Length(TmpString));
    if tmpVal <> '' then
      tmpStrList.Add(UpperCase(tmpVal));
    Delete(TmpString, DelimPos, Length(TmpString));
  end;
  Tokenize := tmpStrList;
end;
где Str - разбиваемая строка, Delimiter - разделитель.
Использование
Код:
var sl:TStringList;
begin
  sl:=TStringList.Create;
  sl:= Tokenize('5403 56666 458744 32544 25487',' ');
  ShowMessage(sl.Text);
  sl.Free;
end;
... но мне очень интересно как ты по строковому полю "сумму сумм" извлекать будешь. Только бестолковым циклом...

Если там всего две суммы можно так
Первое число
Код:
 s:= '12345 67890';
  ShowMessage(Copy(s,0,Pos(' ',s)));
Второе число
Код:
 s:= '12345 67890';
  ShowMessage(Copy(s,Pos(' ',s)+1,Length(s)));

Последний раз редактировалось _SERGEYX_; 10.10.2010 в 23:33.
_SERGEYX_ вне форума Ответить с цитированием
Старый 11.10.2010, 18:19   #3
Регинка-малинка
Пользователь
 
Регистрация: 21.09.2010
Сообщений: 33
По умолчанию

спасибо большое! но я думаю ты меня немного не так понял ( стобец "сумма" имеет текстовый тип данных, в одной записи допустим содержит просто "456", в другой "756 456", а некоторые записи просто пустые...
так вот,я начала делать отчет в fast report, там мне нужно было найти сумму этих всех чисел...но так как тип данных текстовый да и еще содержит 2 значения или пустые строки, он просто не считает сумму...
Регинка-малинка вне форума Ответить с цитированием
Старый 11.10.2010, 20:47   #4
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Я бы сделал калькулируемое числовое поле и конвертировал в него нужные данные из строкового поля. И подключил это поле в Fast Report.
_SERGEYX_ вне форума Ответить с цитированием
Старый 11.10.2010, 21:00   #5
Регинка-малинка
Пользователь
 
Регистрация: 21.09.2010
Сообщений: 33
По умолчанию

вот с этим как раз у меня проблемы. свои поля в отчет я заношу через запрос
sql_khp.SQL.Text:= ' Select мои поля из таблицы
и так далее
///////////////////
Скажи плиз как это поле вставить в этот запрос если его нет в таблице? или если я допустим пропишу его в запросе, то при открытии fast report это самое поле будет находится с списке всех полей?
Регинка-малинка вне форума Ответить с цитированием
Старый 11.10.2010, 21:06   #6
Dimasw
Пользователь
 
Регистрация: 12.09.2010
Сообщений: 69
По умолчанию

Если у тебя компонент TQuery, то через правую кнопку мыши зайди в Fields Editor Там и добавишь нужное тебе поле.
SELECT BEST FROM LIFE
Dimasw вне форума Ответить с цитированием
Старый 11.10.2010, 21:21   #7
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

ага. А в событии OnCalcFields напиши
Код:
if TableSumma.Text<>'' then
try
TableCalcSumma.Value:= StrToFloat(TableSumma.Text);
except
TableCalcSumma.Value:= 0 //или вытащи ту часть текста, которая нужна
end;
PS.названия таблицы и полей написал произвольно

Последний раз редактировалось _SERGEYX_; 11.10.2010 в 21:24.
_SERGEYX_ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi: Отделение корней уравнения графическим способом JustSmile Помощь студентам 1 29.11.2009 10:33
отделение корней методом Лангранжа sat123 Помощь студентам 8 23.03.2009 18:27
отделение строк при передаче в serversocket... prizrak1390 Общие вопросы Delphi 14 29.06.2008 21:13