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