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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.12.2011, 02:15
AntiMag AntiMag вне форума
Прохожий
 
Регистрация: 24.06.2010
Сообщения: 7
Репутация: 10
По умолчанию Помогите с суммированием и записью из 1 в другую базу

нуууу суть в том чтобы суммировалось значение по коду и записывалось в другую таблицу.... вот тока как это можно реализовать?

Вот код кокой после 3х часов у меня выплыл но он не работает...(((
PHP код:
UPDATE 2_Tovari
SET 2_Tovari
.Sum_kol_tov= (SELECT T.Kod_tovaraT.Sum_kol_tov,sum(R.kol_vo) as Summr  
from 3_razmeri R 
,2_Tovari T
Where T
.Kod_tovara=R.Kod_tov
group by T
.Kod_tovara



Помогите пожалуста
Ответить с цитированием
  #2  
Старый 14.12.2011, 02:25
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,018
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Внутренний селект должен возвращать строго одно значение и одну строку.
И еще вопрос. Тебе надо именно Update или можно Insert.

И еще один момент. А зачем тебе это надо. Может просто сделать view и работать с ней? Тем более, что в этом случае не будет ситуаций, когда одна таблица изменилась, а другая - нет.
Ответить с цитированием
  #3  
Старый 14.12.2011, 03:00
AntiMag AntiMag вне форума
Прохожий
 
Регистрация: 24.06.2010
Сообщения: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Внутренний селект должен возвращать строго одно значение и одну строку.
И еще вопрос. Тебе надо именно Update или можно Insert.

И еще один момент. А зачем тебе это надо. Может просто сделать view и работать с ней? Тем более, что в этом случае не будет ситуаций, когда одна таблица изменилась, а другая - нет.

Ну эти таблицы уже сделаны в аксцессе и в 1вой таблице уже есть это поле и там стоит значение 0 по автомату, так что Insert неполучится....
А по поводу view я вообще это в первый раз помоему слышу....
Ответить с цитированием
  #4  
Старый 14.12.2011, 03:08
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,018
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну так сделай view, а таблицу просто грохни.

Код:
CREATE VIEW 2_Tovari AS
SELECT Kod_tov AS Kod_tovara, sum(R.kol_vo) as Sum_kol_tov   
from 3_razmeri R
group by Kod_tov;
Ответить с цитированием
  #5  
Старый 14.12.2011, 03:11
AntiMag AntiMag вне форума
Прохожий
 
Регистрация: 24.06.2010
Сообщения: 7
Репутация: 10
По умолчанию

тут опять проблема получается 1 товары она главнее таблицы размеры...
А точнее из первой вытикает второе ((((
Я думал а можно просто создать один запрос на суммирование а потом другимм запросом просто из DBGrida затащить в тругую таблицу ?
И суть проблемы не тока в этих 2х таблицах.... там ещё к 2м от этих идёт связь....и получается 1таблицы(Всего)-2таблица(Всего)-3таблица(Всего)
Всего это именно то что я пытаюсь суммировать
Ответить с цитированием
  #6  
Старый 14.12.2011, 03:39
AntiMag AntiMag вне форума
Прохожий
 
Регистрация: 24.06.2010
Сообщения: 7
Репутация: 10
По умолчанию

Зарание хочу сказать что необязательно сортировку выполнять в SQL процессе.... но по другому я пока не предкставляю как...
Ответить с цитированием
  #7  
Старый 14.12.2011, 03:41
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,018
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, короче, что-то не то ты делаешь. Явно какой-то косяк в дизайне БД.
Ответить с цитированием
  #8  
Старый 14.12.2011, 03:48
AntiMag AntiMag вне форума
Прохожий
 
Регистрация: 24.06.2010
Сообщения: 7
Репутация: 10
По умолчанию

))))) я тут щас покурил и подумал.... А что если сделать форму которую пользователь неувидит вывести код по кокому будит пороходить поиск в первой таблицы и вписываться уже суммированное значение))))
Ответить с цитированием
  #9  
Старый 14.12.2011, 08:02
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,018
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от AntiMag
))))) я тут щас покурил и подумал.... А что если сделать форму которую пользователь неувидит вывести код по кокому будит пороходить поиск в первой таблицы и вписываться уже суммированное значение))))

OK, ты сколько записей хочешь обновлять этим запросом? Если одну, то просто параметризируй все части по коду и не напрягайся.

ЗЫ. Все-таки я бы посоветовал почитать книжек по проектированию БД. Яано у тебя там какие-то косяки с дизайном. Да и остатки никто обычно не хранит, а высчитывает по таблице прихода/расхода.
Ответить с цитированием
  #10  
Старый 14.12.2011, 12:42
AntiMag AntiMag вне форума
Прохожий
 
Регистрация: 24.06.2010
Сообщения: 7
Репутация: 10
По умолчанию

Короче сделал)))))) не честно там всё норм просто это дипломная программа )))))
Воот код который работает с 3бя таблицами и они связаты как и говарилось выше.....
Надеюсь кому нить поможет))))
PHP код:
procedure TForm14.tovarobshie;
var
i,a:integer;
begin
a
:=0;
i:=0;
ListBox1.Clear;
ListBox2.Clear;
if 
Tovari12.Active=false then Tovari12.Active := true;
if 
ADOTable12.Active false then ADOTable12.Active := true;
begin
  Tovari12
.First;
  While 
not Tovari12.Eof do
    
begin
    ListBox1
.Items.Add((Tovari12.fieldByName('Kod_tovara').Value));
    
Tovari12.Next;
    
end;
  
end;
////////////////////////////////////////////////////////////////////////////////
  
for i:=0 to listbox1.Items.Count -do
  
begin
  ADOTable12
.First;
  While 
not ADOTable12.Eof do
    
begin
  
if (ListBox1.Items[i]=(ADOTable12.fieldByName('kod_tov').Value)) then
  a
:=a+((ADOTable12.fieldByName('kol_vo').Value));
    
ADOTable12.Next;
    
end;
  
ListBox2.Items.Add(inttostr(a));
  
a:=0;
  
end;
////////////////////////////////////////////////////////////////////////////////
begin
  Tovari12
.First;
  
i:=0;
  While 
not Tovari12.Eof do
    
begin
      
if i<=listbox1.Items.Count-1 then
      begin
        
if ((ListBox1.Items[i])=(Tovari12.fieldByName('Kod_tovara').Value)) then
        begin
        Tovari12
.Edit;
        
Tovari12['Sum_kol_tov']:=(strtoint(ListBox2.Items[i]));
        
Tovari12.post;
        
Tovari12.Active:=false;
        
Tovari12.Active:=true;
        
i:=i+1;
        
end;
       
Tovari12.Next;
      
end
  
else
  
Tovari12.Next;
  
end;
end;
end;

procedure TForm14.tiptavodshie;
var
i,a:integer;
begin
a
:=0;
ListBox1.Clear;
ListBox2.Clear;
if 
Tovari12.Active=false then Tovari12.Active := true;
if 
ADOTable1.Active false then ADOTable1.Active := true;
begin
  ADOTable1
.First;
  While 
not ADOTable1.Eof do
    
begin
    ListBox1
.Items.Add((ADOTable1.fieldByName('Kod_tip').Value));
    
ADOTable1.Next;
    
end;
  
end;
////////////////////////////////////////////////////////////////////////////////
begin
  
for i:=0 to listbox1.Items.Count -do
  
begin
  Tovari12
.First;
  While 
not Tovari12.Eof do
    
begin
  
if (ListBox1.Items[i]=(Tovari12.fieldByName('Kod_tip').Value)) then
  a
:=a+((Tovari12.fieldByName('Sum_kol_tov').Value));
    
Tovari12.Next;
    
end;
  
ListBox2.Items.Add(inttostr(a));
  
a:=0;
  
end;
end;
////////////////////////////////////////////////////////////////////////////////
begin
  ADOTable1
.First;
  
i:=0;
  While 
not ADOTable1.Eof do
    
begin
      
if i<=listbox1.Items.Count-1 then
      begin
        
if ((ListBox1.Items[i])=(ADOTable1.fieldByName('Kod_tip').Value)) then
        begin
          ADOTable1
.Edit;
          
ADOTable1['Sum_kol_tip']:=(strtoint(ListBox2.Items[i]));
          
ADOTable1.post;
          
ADOTable1.Active:=false;
          
ADOTable1.Active:=true;
          
i:=i+1;
        
end;
        
ADOTable1.Next;
      
end
  
else
  
ADOTable1.Next;
  
end;
end;
end


Форма 14 она не видна не кому и используется как буферный ресурс для всяких расчётов ))))
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter