Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

Купить рекламу на форуме 15-35 тыс рублей в месяц

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2008, 12:06   #1
Killer_djon
Форумчанин
 
Регистрация: 26.04.2007
Сообщений: 143
По умолчанию Сложные SQL запросы или хранимые процедуры!

Господа гуру... подскажите плиз как мне зделать запросик со следующими условиями!
У меня есть таблица (Paradox), состоящий из следующих столбцов:
1. Дата входа
2. Дата выхода
3. Сумма входа
4. Сумма выхода
5. Имя операции

Если поле Имя_операции принимает значение "РЕПО" или "ЛОНГ" тогда мне нужно чтобы поле "Дата входа" приняла значение поля "Дата выхода", а поле "Сумма покупки " приняла значение "Сумма продажи". все остальные поля должны принимать свои значения... т.е.

Опер дата_входа Дата_выхода Сумма_покупки Сумма_продажи
РЕПО 12.03.08 22.08.08 1500 2500

Елси поле ОПЕР = ЛОНГ или РЕПО тогда Дата_входа = 22.08.08, и Сумма_покупки = 2500

Помогите плиззз кто может очень надо!!! Заранее балгодарен!
Свободу клавиатурным самураям...
Killer_djon вне форума Ответить с цитированием
Старый 17.03.2008, 12:16   #2
Domovoy
Форумчанин
 
Регистрация: 24.10.2007
Сообщений: 254
По умолчанию

update tab1
set Дата_входа = Дата_выхода , Сумма_покупки = Сумма_продажи
where ОПЕР in ("ЛОНГ","РЕПО")
Domovoy вне форума Ответить с цитированием
Старый 17.03.2008, 13:23   #3
Killer_djon
Форумчанин
 
Регистрация: 26.04.2007
Сообщений: 143
По умолчанию

Больше спасибо то что надо, за исключением одного НО... это моя недописка... дело в том что если ОПЕР не равна ЛОНГ или РЕПО, тогда Сумма_покупки должна принять свое изначальное значение, т.е.

Елси Сумма_покупки = 1500 и Сумма_продажи=2500 и ОПЕР = ЛОНГ или РЕПО тогда Сумма_покупки = Сумма_продажи,
А вот если ОПЕР <> ЛОНГ или РЕПО тогда Сумма_покупки должна принять свое значение записанное изначально...

Вот такая вот задачка, больше спасибо заранее...
Свободу клавиатурным самураям...
Killer_djon вне форума Ответить с цитированием
Старый 21.03.2008, 10:24   #4
Domovoy
Форумчанин
 
Регистрация: 24.10.2007
Сообщений: 254
По умолчанию

Так ведь щас так и есть. Апдейтем только то что надо, а остольное не трогаем .
Domovoy вне форума Ответить с цитированием
Старый 21.03.2008, 13:09   #5
Killer_djon
Форумчанин
 
Регистрация: 26.04.2007
Сообщений: 143
По умолчанию

Пасибо большое за идею очень помогло, на самом деле просто не хватала энтузиазма не знал как осущесвить идею в реальности после совета я поступил следующим образом:

Код:
Query2.Close;
Query2.SQL.Clear;
Query2.SQL.Add('select id, operation, d_pok, d_prod, ');
Query2.SQL.Add('Sum_pok, Sum_prod, ');
Query2.SQL.Add('(Sum_pok) AS Sumin, (d_pok) as Datin from Main_r');
Query2.SQL.Add('where (operation NOT IN ("ЛОНГ", "РЕПО")) and (color NOT LIKE "%clSilver;clWhite;clSilver%")');
Query2.SQL.Add('UNION select id, operation, d_pok, d_prod, ');
Query2.SQL.Add('Sum_pok, Sum_prod, ');
Query2.SQL.Add('(Sum_prod) AS Sumin, (d_prod) as Datin from Main_r');
Query2.SQL.Add('where (operation IN ("ЛОНГ", "РЕПО")) and (color NOT LIKE "%clSilver;clWhite;clSilver%")');
Query2.SQL.Add('ORDER BY d_prod');
Query2.Open;
Свободу клавиатурным самураям...
Killer_djon вне форума Ответить с цитированием
Старый 21.03.2008, 13:12   #6
Killer_djon
Форумчанин
 
Регистрация: 26.04.2007
Сообщений: 143
По умолчанию

Все отлично заработало, но задача усложнилась немного и я опять не могу понять как это зделать, дело в том что у меня два поля Sum_pok(Сумма покупки) и Sum_prod(сумма продажи) проверяются на цвет, т.е. если они выделены серым цветом тогда одно если нет тогда другое условие... А вот теперь мне надо зделать так чтобы если только одно из них серым, т.е. либо Сумма_покупки, либо Сумма продажи выделены серым тогда в запросе не выводить сумму а вывести просто 0...
Domovoy если возможно помоги плзиззз, заранее благодарен!!!
Свободу клавиатурным самураям...
Killer_djon вне форума Ответить с цитированием
Старый 21.03.2008, 14:30   #7
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Поле выделено цветом?!! Блин, хочу знать как это сделать... Падаю ниц и молю - СКАЖИ КАК!!!

P.S. И за "зделать" буду убивать. В байки типа "учил русске па форумам" не верю!
Баламут вне форума Ответить с цитированием
Старый 21.03.2008, 14:40   #8
Killer_djon
Форумчанин
 
Регистрация: 26.04.2007
Сообщений: 143
По умолчанию

В принципе там ничего сложно с цветами нету, я в самой базе создал еще символьное поле, которое по умолчанию имеет значение:
Пусть у нас в базе будет 4 поля, т.е. 3 информационных и 4-е поле цвета то 4-е поле должно по умолчанию иметь следующее значение:
color:='clWhite;clWhite;clWhite';

далее мы просто при выборе цвета анализируем ячейку на которой сфокусированы и в поле s изменяем значение на color:='clWhite;clYellow;clWhite'; (к примеру), а затем в событии DBGRid
OnDrawDataCell считываем значение поля цвета и присваем все ячейкам тот цвет поторый должен ему пренадлежать...

Если нужен пример кода могу скинуть... просто я использовал dxDBGrid
Свободу клавиатурным самураям...
Killer_djon вне форума Ответить с цитированием
Старый 22.03.2008, 06:14   #9
dron-s
Форумчанин
 
Регистрация: 04.03.2007
Сообщений: 615
По умолчанию

Killer_djon
как я понял, тебе нужно кадлую ячейку окрашивай в свой цвет?
если так, то тебе как минимум надо будет столько же полей, со значениями цветов, сколько у тебя окрашивается (в каждой ячейки свой тип для своего столбца)
а в остальном ты ворде всё правильно написал... только один совет: хранить не значения в численном виде, а маркировку самих цветов для каждой ячейки...
dron-s вне форума Ответить с цитированием
Старый 22.03.2008, 10:58   #10
Killer_djon
Форумчанин
 
Регистрация: 26.04.2007
Сообщений: 143
По умолчанию

dron's - пасибо конечно за совет, но дело в том что у меня это уже работает и не совсем так как ты сказал, я зделал гораздо легче, я всего лишь создал новое поле строкового типа такое чтобы в нем поместилось значение цвета по умолчанию для каждого поля в отдельности, т.е. повторюсь еще раз: пусть у нас 5 полей из которых 1 - это поле содержащее значение цвета для всех оставшихся 4... а следовательно

назовем поле цвета - color:='clWhite;clWhite;clWhite;clW hite;';

А теперь по порядку. Когда я хочу ячейке придать какойнить цвет я просто делаю следующее:

Код:
procedure TForm1.button1Click(Sender: TObject);
var s :WideString;
      l : Tstrings;
      i : integer;
begin
  if ColorDialog1.Execute
 then begin
 if Table1.Fields.FieldByName('color').Value=null
  then s:='clWhite;clWhite;clWhite;clWhite'
  else s:=Table1.Fields.FieldByName('color').Value;
  l:=TStringList.Create;
  s:=StringReplace(s, ';', #13#10, [rfReplaceAll]);
  l.Text:=s;
  for i:=0 to 4 do 
   if dxDBGrid1.FocusedField.FieldName = dxDBGrid1.Columns[i].FieldName
    then begin
     l.Strings[i]:=ColorToString(ColorDialog1.Color);
     Break;
    end;
  s:=l.Text;
  s:=StringReplace(s, #13#10, ';', [rfReplaceAll]);
  Table1.Edit;
  Table1.Fields.FieldByName('color').Value:=s;
  Table1.Post;
  l.Free;
 end;
end;
Свободу клавиатурным самураям...
Killer_djon вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Хранимые процедуры... Только_Учусь БД в Delphi 2 17.07.2008 06:06
Блоб поля и хранимые процедуры yulia БД в Delphi 8 07.06.2008 16:42
задача на сложные действия со строками Converse Паскаль, Turbo Pascal, PascalABC.NET 5 03.01.2008 07:34