Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.26;
Скачать: CL | DM;

Вниз

Как к тексту запроса добавить переменную?   Найти похожие ветки 

 
Gunek ©   (2006-11-06 23:46) [0]

Добрый вечер мастера 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-06 23:53) [1]

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

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

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


?

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


 
MsGuns ©   (2006-11-06 23:55) [2]

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

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


 
MsGuns ©   (2006-11-06 23:56) [3]

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

..SQL-запроса


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

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

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

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


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

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

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


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

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


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

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

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

select inv,marka,cost+"x"

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

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


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

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


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

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

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


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

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

>select inv,marka,cost+"x"

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


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

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


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

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" пишется costx
  query1.SQL.Text:="select inv,marka,cost+""x"" from avto;";
  // Текст запроса изменен, но сам запрос не переокрыт - НД1 содержит те же записи, что и в начале цикла. Полная непонятка зачем это сделано ?
  query1.Next; // Переход на следующую запись в том же самом НД1
 end;
end;

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


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

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

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

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


Как-то так?

Какая СУБД?


 
MsGuns ©   (2006-11-07 00:24) [14]

>Gunek ©   (07.11.06 00:15) [10]
>В этом и проблема. Как представить x , чтобы его значение прибавилось к значению поля в конкретной записи?

Select T1.inv, T1.marka, T2.Sum(cost)
  from Table1 T1 Left Join Table2 T2 on (T1.inv=T2.inv)
  group by T1.inv, T1.marka
  order by T1.inv
 
Рекомендую познакомиться с прекрасной и весьма покладистой дамой по имени Эскюль ;))
 И подружиться


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

x - переменная типа double. Её значение(т е стоимость обслуживания авто) должно прибавиться к значению стоимости покупки.


 
Gunek ©   (2006-11-07 00:28) [16]

>Какая СУБД?
Paradox7


 
Percent   (2006-11-07 00:31) [17]

...("select inv,marka,cost + " + FloatToStr(x) + " as cost2 from avto");


 
Percent   (2006-11-07 00:31) [18]

А лучше - через параметр.


 
Gunek ©   (2006-11-07 00:31) [19]

>Рекомендую познакомиться с прекрасной и весьма покладистой дамой по >имени Эскюль ;))
> И подружиться
Немного знаком.
С составлением запроса возникли трудности из-за каких-то особенностей Paradox"а в внутренних запросах.


 
Ketmar ©   (2006-11-07 00:33) [20]

offtopic: интересно, когда люди выучат простую правду: "paradox не умеет работать с SQL"?


 
Германн ©   (2006-11-07 00:36) [21]


> Ketmar ©   (07.11.06 00:33) [20]
>
> offtopic: интересно, когда люди выучат простую правду: "paradox
> не умеет работать с SQL"?

Точнее так - paradox умеет работать только с "LocalSQL", но подробного описания последнего в природе не существует.


 
Gunek ©   (2006-11-07 00:37) [22]

По-прежнему выскакивает ошибка:
query1: Cannot perform this operation on a closed dataset

>paradox не умеет работать с SQL
А чем лучше пользоваться?


 
Ketmar ©   (2006-11-07 00:37) [23]

>[21] Германн(c) 7-Nov-2006, 00:36
неа. не так. вот так: "LocalSQL умеет работать с paradox". %-)


 
Ketmar ©   (2006-11-07 00:38) [24]

>[22] Gunek(c) 7-Nov-2006, 00:37
>А чем лучше пользоваться?
любой нормальной sql-базой. от FireBird до Oracle.


 
Gunek ©   (2006-11-07 00:46) [25]

>А лучше - через параметр.
Можно поподробней?


 
Anatoly Podgoretsky ©   (2006-11-07 00:50) [26]

> Германн  (07.11.2006 0:36:21)  [21]

> paradox умеет работать только с "LocalSQL", но подробного описания последнего в природе не существует.

А с Дельфи что поставляется


 
Германн ©   (2006-11-07 00:51) [27]


> Gunek ©   (07.11.06 00:46) [25]

Ну чего ты сам паришься и други паришь сразу в двух ветках? От этого только хуже всем!


 
Gunek ©   (2006-11-07 00:54) [28]

О, чудо заработало!
Спасибо Вам , Мастера!


 
Anatoly Podgoretsky ©   (2006-11-07 00:55) [29]

> Gunek  (07.11.2006 0:54:28)  [28]

Молилась ли ты на ночь Дездемона?


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

>Молилась ли ты на ночь Дездемона?
Не молилСЯ! А это обязательно?


 
Германн ©   (2006-11-07 01:05) [31]


> Anatoly Podgoretsky ©   (07.11.06 00:50) [26]
>
> > Германн  (07.11.2006 0:36:21)  [21]
>
> > paradox умеет работать только с "LocalSQL", но подробного
> описания последнего в природе не существует.
>
> А с Дельфи что поставляется

Может я и не прав. Дело давнее. Когда-то с величайшим трудом смог найти решение с помощью JOIN. Вот сейчас просмотрел LocalSQL.hlp и нашёл ответы.
Но вообще, когда я писАл [21] больше довлели надо мной строки из документации по ранней Дельфи. Типа: "Приведённая документация - сокращённая. Полную версию можете получить вместе с PARADOX".


 
Anatoly Podgoretsky ©   (2006-11-07 09:18) [32]

> Gunek  (07.11.2006 00:01:04)  [4]

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

А добавил текст к запросу


 
Anatoly Podgoretsky ©   (2006-11-07 09:20) [33]

> Gunek  (07.11.2006 00:15:10)  [10]

>select inv,marka,cost+"x"

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

SELECT ничего не прибавляет.

Скажи как такое получилось, что тебя допустили до компьютера и до программирования баз данных, у ваших начальников, что головы нет?



Страницы: 1 вся ветка

Текущий архив: 2006.11.26;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.036 c
3-1159009804
alexandrine
2006-09-23 15:10
2006.11.26
Как посадить базу Paradox7 на сетку?


1-1160630818
alucard
2006-10-12 09:26
2006.11.26
Есть страничка, необходимо залогиниться.


2-1162896730
abba
2006-11-07 13:52
2006.11.26
Ошибкка при записи из одного файла в другой, используя тип. файлы


2-1163078105
Vodik
2006-11-09 16:15
2006.11.26
Как в CorelDraw?


11-1139397561
Igi
2006-02-08 14:19
2006.11.26
KOLHilightEdit в Delphi IDE