![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как к тексту запроса добавить переменную? [D7]
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. Форматирование текста нынче уже не в моде?