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

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

Update значениями друго таблицы [D7, dBase, FoxPro]


Страницы:   1 2

Korvin ©   (2004-05-26 11:50:00) 

Объясните как в Delphi 7 при работе с файлами *.dbf
заполнить поля одной таблицы значениями другой ?


Korvin   (2004-05-26 16:20:00) [1]

Здесь закономерности не наблюдается


Соловьев   (2004-05-26 16:15:00) [2]


> но на какойто записи вылетает ошибка

на какой?


Korvin   (2004-05-26 15:55:00) [3]

while not ADOTable1.eof
     begin
     if ADOTable1['Grup'] = ADOTable2['Grup'] then
        begin
        if ADOTable1['nnum'] = ADOTable2['nnum'] then
           Begin
           ADOTable1.edit
           ADOTable1['ocena1'] = ADOTable2['ocena2']
           ADOTable1.post
           if not ADOTable2.Eof then
              ADOTable2.Next
           else
              Exit;
          end
  ADOTable1.next
end
Такая конструкция работает, но на какойто записи вылетает ошибка
"[Microsoft][ODBC Visual FoxPro Driver]SQL:Column 'Q951P55' is
not found"


Соловьев   (2004-05-26 15:48:00) [4]


> while not ADOTable1.eof
>      begin
>      ADOTable1.edit
>      ADOTable1['ocena1'] = ADOTable2['ocena2']
>      ADOTable1.post
>      ADOTable2.next
>      ADOTable1.next
>      end

где проверяешь?

> Работает правильно но на определенной записи выдает ошибку.

так правильно или ошибку?


Korvin   (2004-05-26 15:45:00) [5]

Через MasterSource не пробовал, на  ADOTable2.eof проверяю
а таблицы связал в цикле. Работает правильно но на определенной записи выдает ошибку.


Соловьев   (2004-05-26 15:22:00) [6]


> ADOTable2.next
>      ADOTable1.next

Почему ты проверяешь ADOTable1.eof, а про ADOTable2.eof - забыл


> ADOTable1.first
> ADOTable2.first

как ты их связал?


> Нет не слышал - просвети пожайлучта.

TADOTable.MasterSource+F1


Korvin   (2004-05-26 15:14:00) [7]

Нет не слышал - просвети пожайлучта.


Соловьев   (2004-05-26 15:08:00) [8]


> ADOTable1.first
> ADOTable2.first
> while not ADOTable1.eof
>      begin
>      ADOTable1.edit
>      ADOTable1['ocena1'] = ADOTable2['ocena2']
>      ADOTable1.post
>      ADOTable2.next
>      ADOTable1.next
>      end

Слышал что-нибудь про мастер-детайл?


Korvin   (2004-05-26 14:52:00) [9]

Я уже пробовал записывать в таблицу по одной записи:
ADOTable1.first
ADOTable2.first
while not ADOTable1.eof
     begin
     ADOTable1.edit
     ADOTable1['ocena1'] = ADOTable2['ocena2']
     ADOTable1.post
     ADOTable2.next
     ADOTable1.next
     end
при этом в какойто момент возникает ошибка:
"[Microsoft][ODBC Visual FoxPro Driver]SQL:Column 'Q951P55' is
not found"
(Вожможно это связано с переполнением какого нибудь буфера,т.к.
)


Korvin   (2004-05-26 14:52:00) [10]

Я уже пробовал записывать в таблицу по одной записи:
ADOTable1.first
ADOTable2.first
while not ADOTable1.eof
     begin
     ADOTable1.edit
     ADOTable1['ocena1'] = ADOTable2['ocena2']
     ADOTable1.post
     ADOTable2.next
     ADOTable1.next
     end
при этом в какойто момент возникает ошибка:
"[Microsoft][ODBC Visual FoxPro Driver]SQL:Column 'Q951P55' is
not found"
(Вожможно это связано с переполнением какого нибудь буфера,т.к.
)


Sandman25+1   (2004-05-26 14:38:00) [11]

Возможно, foxpro driver не поддерживает вложенные select. Тогда придется действовать через обновление по одной записи в цикле.


Korvin   (2004-05-26 14:35:00) [12]

Программу я пишу на ADO.
Попробовал тот же код , но без Group by - результат тотже
"Key violation.
(Microsoft)(ODBC Visual FoxPro Driver)Function name is missing )."
Не знаю что и делать - посоветуйте что-нибудь.


Sandman25+1   (2004-05-26 14:08:00) [13]

update mlabel
set ocena1 = (select sum(ocena2) from spr_part
            where spr_part.grup = mlabel.grup
              and nnum = mlabel.nnum)

BDE не поддерживает GROUP BY поле, которое не извлекается.


Sandman25+1   (2004-05-26 14:07:00) [14]

update mlabel
set ocena1 = (select sum(ocena2) from spr_part
            where spr_part.grup = mlabel.grup
              and nnum = mlabel.nnum)

BDE не поддерживает GROUP BY поле, которое не извлекается.


Korvin   (2004-05-26 14:01:00) [15]

Есть таблица Mlabel - номенклатурный справочник
у него есть поля Grup - группа номенклатуры
                NNUM - номер  номенклатуры
                ocena1 - Цена 1
Есть другая таблица Spr_part - справочник партий
у него есть поля Grup - группа номенклатуры
                NNUM - номер  номенклатуры
                code - номер партии  
                ocena2 - Цена 2
Для каждой номенклатуры (nnum) какой либо группы (Grup)
Может быть несколько партий (code = 1, code = 2 и т.д.)

Мне нужне перенести Ocena2 из spr_part в ocena1 таблицы mlabel

update mlabel
set ocena1 = (select sum(ocena2) from spr_part
             where spr_part.grup = mlabel.grup
               and nnum = mlabel.nnum
               group by grup, nnum).


Соловьев   (2004-05-26 13:43:00) [16]


> [15] Korvin   (26.05.04 13:19)

что значит какая разница? правило такое - используешь групировку изволь использовать функцию!

> Хотя с функциями тоже пробовал - не работает.

Тут телепатов нет. Приведи как использовал.

> Без агрегированных функций в результате получится одна запись
> (первая) для каждой связки Grup - Nnum и мне этого достаточно.

ну так нафиг тебе групировка? убери ее.

пока ты не скажешь что ты хочешь получить в подзапросе и структуру тех таблиц из подзапроса, тебе никто не ответит.


Korvin   (2004-05-26 13:19:00) [17]

Какая разница.
Без агрегированных функций в результате получится одна запись
(первая) для каждой связки Grup - Nnum и мне этого достаточно.
Хотя с функциями тоже пробовал - не работает.


Соловьев   (2004-05-26 13:04:00) [18]


> [12] Sandman25+1   (26.05.04 12:49)

ты прав, тогда да.


> [13] Korvin   (26.05.04 12:56)

групировка строится оп агрегированым функциям, а их у тебя в подзапросе нету


Korvin   (2004-05-26 12:56:00) [19]

>select ocena2 from spr_part
>              where spr_part.grup = mlabel.grup
>                and spr_part.nnum = mlabel.nnum
>                group by grup, nnum

group by grup, nnum делаю, т.к. в spr_part
несколько записей для комбинации grup, nnum.


Sandman25+1   (2004-05-26 12:49:00) [20]

[9] Соловьев ©   (26.05.04 12:39)

Необязательно. Я предполагал, что в table2 есть уникальность по field1. Иначе следует написать какой-нибудь max, min, avg или еще чего-нибудь.


Страницы:   1 2

Наверх

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