Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как к тексту запроса добавить переменную? [D7]


Страницы:   1 2

Gunek ©   (2006-11-06 23:46:00) 

Добрый вечер мастера Delphi!
Такой вопрос:  Возможно ли к значению поля из одной таблицы прибавить значение полей из других таблиц? Как?
Я попробовал вот так:
for i:=1 to query1.recordcount do begin
    for j:=1 to query2.RecordCount do begin
 if
query1.FieldByName('inv').AsInteger=query2.FieldByName('inv').AsInteger then
x:=x+query2.FieldByName('Стоимость').AsFloat;
query2.Next;
           end;
query2.First;
query1.SQL.Text:='select inv,marka,cost+''x'' from avto;';
query1.Next;
     end;
   end;


Но выскакивает ошибка при выполнении программы: query1: Cannot perform this operation on a closed dataset


Percent   (2006-11-07 00:20:00) [21]

Какая-то дикая смесь странных запросов с сервера и обработок на стороне клиента.

Как представить x , чтобы его значение прибавилось к значению поля в конкретной записи?

x := '120';
...('select inv,marka,cost + 'x' as cost2 from avto');


Как-то так?

Какая СУБД?


MsGuns   (2006-11-07 00:19:00) [22]

for i:=1 to query1.recordcount do
 begin  // для КАЖДОЙ записи 1 НД
  for j:=1 to query2.RecordCount do
    begin // ВСЕ записи НД1 последовательно сравниваются с тек.зап. НД1
     if query1.FieldByName('inv').AsInteger=query2.FieldByName('inv').AsInteger   then
       x:=x+query2.FieldByName('Стоимость').AsFloat; // Сумма всех "деталов"
       query2.Next;
    end;
  // НД2 пересмотрен - в x лежит сумма всех деталов (связка по 'inv')
  query2.First;  // В начало НД2
  // Модификация запроса НД1, при этом в качестве имени поля со стоимостью вместо 'Cost' пишется cost x
  query1.SQL.Text:='select inv,marka,cost+''x'' from avto;';
  // Текст запроса изменен, но сам запрос не переокрыт - НД1 содержит те же записи, что и в начале цикла. Полная непонятка зачем это сделано ?
  query1.Next; // Переход на следующую запись в том же самомНД1
 end;
end;

А теперь объясните тАинство сего кода, будьте любезны. Куда Вы деваете с такими трудами посчитанную загадочную x, которую, кстати, не обнуляете при переходе на внешний цикл ?
А также , ЧТО это за загадочное поле costx, которое извлекается столько раз, сколько записей в НЕИЗМЕННОМ НД1 ?


Gunek   (2006-11-07 00:17:00) [23]

>Нет, похоже, что inv - это инвентарный номер. Учет основных средств - автомобилей ?
Что -то вроде того.


Gunek   (2006-11-07 00:15:00) [24]

>Добавление происходит где-то на сервере?
 нет.
>У тебя получается

>select inv,marka,cost+'x'

В этом и проблема. Как представить x , чтобы его значение прибавилось к значению поля в конкретной записи?


Percent   (2006-11-07 00:11:00) [25]

1C: Автомастерская?

По крайней мере, алгоритм в духе...


Gunek   (2006-11-07 00:09:00) [26]

inv - подразумевается поле со значениями инвентарных номеров.
Посчитать я пытаюсь общую стоимость содержания автомобиля.


Percent   (2006-11-07 00:08:00) [27]

Этим я хотел сказать , что нужно к значению поля cost добавить значение некой переменной x

Добавление происходит где-то на сервере?
У тебя получается

select inv,marka,cost+'x'

То есть, 'x' - это литерал.

Но ты еще раз подумай насчет своего алгоритма.
Тщательно подумай.


MsGuns   (2006-11-07 00:08:00) [28]

Нет, похоже, что inv - это инвентарный номер. Учет основных средств - автомобилей ?


MsGuns   (2006-11-07 00:04:00) [29]

Судя по вашему алгоритму, точнее тому, на что он тонко "намекает", Вы хотите посчитать для каждого inv (invoice - прих.накладная ?) сумму по фактуре.

Но это делается совсем простым запросом, а то, что делаете Вы - это попытка почесать свою пятку через интернет ;)))


Gunek   (2006-11-07 00:01:00) [30]

>Что ты хотел сказать этим:query1.SQL.Text:='select inv,marka,cost+''x'' from avto;';
query1.Next;
Этим я хотел сказать , что нужно к значению поля cost добавить значение некой переменной x.

>>приставленная модификация текста

>..SQL-запроса
c sql-запросом неправильно считает


MsGuns   (2006-11-06 23:56:00) [31]

>приставленная модификация текста

..SQL-запроса


MsGuns   (2006-11-06 23:55:00) [32]

Вы написали какой-то чудовищный код, в котором чуднО переплелись и двойной цикл, и неверное понимание св-ва recordcount, и непонятно каким валенком приставленная модификация текста

Приведенное Вами сообщение бывает, если датасет, к которому была попытка обращения  (например, recordcount), не был предварительно открыт (Open или Active := true)


Percent   (2006-11-06 23:53:00) [33]

Оно у тебя работает? Сомневаюсь что-то.

Что ты хотел сказать этим:

query1.SQL.Text:='select inv,marka,cost+''x'' from avto;';
query1.Next;


?

P.S. Форматирование текста нынче уже не в моде?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо