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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.08.2011, 09:30   #1
Kachirus
Пользователь
 
Регистрация: 25.06.2011
Сообщений: 12
По умолчанию Работа с БД

Доброе время суток уважаемые специалисты в области программирования!

Есть БД, нужно из неё выбрать за определенную дату и с частичным совпадением другой строки данные с которыми дальше надо будет работать... (суммировать, делить, выводить на экран результат и т.д.)

Наковырял код, переделал под себя, но не как не дойдет как искать по всей БД. (ищет только первую запись). Подскажите пожалуйста...
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
cncols, k, i:integer;
begin

  if ComboBox1.ItemIndex=0 then i:=71833;
//for k:=1 to cncols-1 do
  begin
  if not Table1.Locate(
    'Data;Direction',
    VarArrayOf([DateTimePicker1.Date,i]),
   [loCaseInsensitive, loPartialKey])

  then
    ShowMessage('Çàïèñü íå íàéäåíà');
  end;

end;
Kachirus вне форума Ответить с цитированием
Старый 17.08.2011, 10:48   #2
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Можно при помощи Locate, а можно при помощи цикла:
Код:
Table1.First;
while not Table1.EOf
begin
  if Table1.Fields('Поле').asString = 'Значение поля' then
    ShowMessage('Нашли');
  Table1.Next;
end;
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 17.08.2011, 11:36   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

1.Locate ищет первую подходящую запись и если упорядоченность данных соответствует ключам Locate, то следующие записи будут рядышком ниже в гриде
2.В Table можно фильтр установить
3.Пользоваться не Table, а Query c нужным условием в Where
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 17.08.2011 в 11:44.
Аватар вне форума Ответить с цитированием
Старый 17.08.2011, 12:16   #4
Kachirus
Пользователь
 
Регистрация: 25.06.2011
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
2.В Table можно фильтр установить
Угу, можно и фильтр... Но на сколько я правильно понимаю, фильтр - только отображает значения БД в Гриде, а мне не просматривать , а работать с данными надо... т.е. найти значения удовлетворяющие условию поиска и например посчитать среднее арифметическое 5 столбца... (Я оброзно говорю).
Kachirus вне форума Ответить с цитированием
Старый 17.08.2011, 13:28   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Причем здесь грид? В самом Table записи отфильтрованы
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 17.08.2011, 13:45   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Аватар
3.Пользоваться не Table, а Query c нужным условием в Where
+1

присоединяюсь.
Если Вам нужны не все записи - так отбирайте их с помощью SELECT'а
Код:
Select * from ВашаТаблица 
where Date1 = :pDate 
and  FIO like :pPartialFIO
потом Query1.Open;
и работайте дальше только с выбранными данными (о других Ваша датасет даже догадываться не будет!)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.08.2011, 14:56   #7
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Kachirus, чем мой вариант не подходит?
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 23.08.2011, 15:46   #8
Kachirus
Пользователь
 
Регистрация: 25.06.2011
Сообщений: 12
По умолчанию

Всем спасибо.. заработало.....
Теперь проблема в другом. Не могу посчитать сумы столбцов...

Ошибка: Invalid use of keyword. Token: SUM(Answered)

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
i:String;
begin
if ComboBox1.ItemIndex=0 then i:='71833';
  Query2.Close;
  Query2.SQL.Clear;
  Query2.SQL.Add('Select * from CMK.db ');
  Query2.SQL.Add('WHERE Data BETWEEN "' +DateToStr(DateTimePicker1.Date)+ '" AND "' + DateToStr(DateTimePicker2.Date) +'" AND Direction LIKE '''+i+'%''');
  Query2.SQL.Add('SUM(Answered)');
  Query2.Open;
  Edit1.Text:=Query2.Fields[0].AsString
  end;
end.
Kachirus вне форума Ответить с цитированием
Старый 23.08.2011, 16:56   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Kachirus
ой.ой,ой..

Рекомендую. Немедленно взять любой букварь по SQL и читать! Хотя бы основы.
(кстати, простенькая и хорошая книжка Мартин Грубер "Понимание SQL")

для получения суммы надо написать агрегатную функцию SUM в списке получаемых значений:
Код:
  Query2.SQL.Clear;
  Query2.SQL.Add('Select SUM(Answered) as sum_ans from CMK.db ');
  Query2.SQL.Add('WHERE Data BETWEEN "' +DateToStr(DateTimePicker1.Date)+ '" AND "' + DateToStr(DateTimePicker2.Date) +'" AND Direction LIKE '''+i+'%''');
  Query2.Open;
  if Query2.IsEmpty then ShowMessage('Нет записей подходящих по условию')
  else 
    ShowMessage('Сумма = ' + Query2.FieldByName('sum_ans').AsString);
p.s. проверка на пустоту Query2.IsEmpty - это может быть недостаточно (да и перестраховка).
Некоторые СУБД, если ни одной записи по условиям нет, могут вернуть 1 запись,
но там будет null в качестве результата... Это тоже стоит учесть...

Последний раз редактировалось Serge_Bliznykov; 23.08.2011 в 17:03.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.08.2011, 17:30   #10
Kachirus
Пользователь
 
Регистрация: 25.06.2011
Сообщений: 12
По умолчанию

Спасибо чичас скачаю и почитаю.... Отдельное спасибо за код, буду пробовать.....)))
Kachirus вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с матрицами (норма матрицы, работа со строками) Neitrosha Помощь студентам 1 26.11.2010 20:19
Задача. Работа с псевдослучайными последовательностями (ПСП). Работа с цветом. 0101 Помощь студентам 3 17.12.2009 23:57
Работа с webbrowser - Фреймы, работа с конкретным феймом в фрейме NewDelphi Фриланс 2 08.10.2009 11:00