Форум: "Базы";
Текущий архив: 2004.06.20;
Скачать: [xml.tar.bz2];
ВнизUpdate значениями друго таблицы Найти похожие ветки
← →
Korvin (2004-05-26 11:50) [0]Объясните как в Delphi 7 при работе с файлами *.dbf
заполнить поля одной таблицы значениями другой ?
← →
Кщд (2004-05-26 11:53) [1]напр.,
ОдинДатасет.FieldByName("ПолеОднойТаблицы").Value:=ДругойДатасет.FieldByName("ПолеДругойТаблицы").Value;
← →
Vlad © (2004-05-26 11:53) [2]
> Korvin (26.05.04 11:50)
insert into table1 select * from table2
← →
Sergey13 © (2004-05-26 11:53) [3]Можно в цикле, можно через SQL. Можно просто файло скопировать.
← →
Korvin (2004-05-26 12:07) [4]Отвечаю
Кщд - Обычными средствами через цикл в Delphi
не получается ,т.к. при переносе большого количества
записей (примерно более 900 ) возникает ошибка "не найдена колонка Q9...." (возможно это связано с переполнением какого нибудь буфера). Еще одна особенность - таблица содержит мемо поля.
Поэтому хотелось бы попробовать через SQL/
← →
Sandman25+1 (2004-05-26 12:11) [5]1. [2] Vlad © (26.05.04 11:53)
2.update table1 set field3 = (select field2 from table2 where field1 = table1.field1). Смотря, что надо.
← →
Korvin (2004-05-26 12:31) [6]Пропробовал эту конструкцию в SQL_Explorere
не работает выдает Finction name is missing
← →
Sandman25+1 (2004-05-26 12:33) [7][6] Korvin (26.05.04 12:31)
Приведите точный код того, что Вы пробовали.
← →
Korvin (2004-05-26 12:37) [8]update mlabel
set ocena1 = (select ocena2 from spr_part
where spr_part.grup = mlabel.grup
and spr_part.nnum = mlabel.nnum
group by grup, nnum).
← →
Соловьев © (2004-05-26 12:39) [9]
> update table1 set field3 = (select field2 from table2 where
> field1 = table1.field1).
такой запрос не пойдет - так как подзапрос возвратит не одну запись, а несколько
← →
Соловьев © (2004-05-26 12:43) [10]
> select ocena2 from spr_part
> where spr_part.grup = mlabel.grup
> and spr_part.nnum = mlabel.nnum
> group by grup, nnum
1. он должен возвратить 1(!!!) запись
2. групировка подразумевает использование агрегатных функций - Sum, Max, Avg
3. Смысл подзапроса не понятен. подробнее плиз.
← →
Соловьев © (2004-05-26 12:45) [11]
> 8] Korvin (26.05.04 12:37)
F3-LocalSQL.hlp - ответы почти на все вопросы :)
там искать Update
← →
Sandman25+1 (2004-05-26 12:49) [12][9] Соловьев © (26.05.04 12:39)
Необязательно. Я предполагал, что в table2 есть уникальность по field1. Иначе следует написать какой-нибудь max, min, avg или еще чего-нибудь.
← →
Korvin (2004-05-26 12:56) [13]>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.
← →
Соловьев © (2004-05-26 13:04) [14]
> [12] Sandman25+1 (26.05.04 12:49)
ты прав, тогда да.
> [13] Korvin (26.05.04 12:56)
групировка строится оп агрегированым функциям, а их у тебя в подзапросе нету
← →
Korvin (2004-05-26 13:19) [15]Какая разница.
Без агрегированных функций в результате получится одна запись
(первая) для каждой связки Grup - Nnum и мне этого достаточно.
Хотя с функциями тоже пробовал - не работает.
← →
Соловьев © (2004-05-26 13:43) [16]
> [15] Korvin (26.05.04 13:19)
что значит какая разница? правило такое - используешь групировку изволь использовать функцию!
> Хотя с функциями тоже пробовал - не работает.
Тут телепатов нет. Приведи как использовал.
> Без агрегированных функций в результате получится одна запись
> (первая) для каждой связки Grup - Nnum и мне этого достаточно.
ну так нафиг тебе групировка? убери ее.
пока ты не скажешь что ты хочешь получить в подзапросе и структуру тех таблиц из подзапроса, тебе никто не ответит.
← →
Korvin (2004-05-26 14:01) [17]Есть таблица 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).
← →
Sandman25+1 (2004-05-26 14:07) [18]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:08) [19]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:35) [20]Программу я пишу на ADO.
Попробовал тот же код , но без Group by - результат тотже
"Key violation.
(Microsoft)(ODBC Visual FoxPro Driver)Function name is missing )."
Не знаю что и делать - посоветуйте что-нибудь.
← →
Sandman25+1 (2004-05-26 14:38) [21]Возможно, foxpro driver не поддерживает вложенные select. Тогда придется действовать через обновление по одной записи в цикле.
← →
Korvin (2004-05-26 14:52) [22]Я уже пробовал записывать в таблицу по одной записи:
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) [23]Я уже пробовал записывать в таблицу по одной записи:
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"
(Вожможно это связано с переполнением какого нибудь буфера,т.к.
)
← →
Соловьев © (2004-05-26 15:08) [24]
> 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 15:14) [25]Нет не слышал - просвети пожайлучта.
← →
Соловьев © (2004-05-26 15:22) [26]
> ADOTable2.next
> ADOTable1.next
Почему ты проверяешь ADOTable1.eof, а про ADOTable2.eof - забыл
> ADOTable1.first
> ADOTable2.first
как ты их связал?
> Нет не слышал - просвети пожайлучта.
TADOTable.MasterSource+F1
← →
Korvin (2004-05-26 15:45) [27]Через MasterSource не пробовал, на ADOTable2.eof проверяю
а таблицы связал в цикле. Работает правильно но на определенной записи выдает ошибку.
← →
Соловьев © (2004-05-26 15:48) [28]
> while not ADOTable1.eof
> begin
> ADOTable1.edit
> ADOTable1["ocena1"] = ADOTable2["ocena2"]
> ADOTable1.post
> ADOTable2.next
> ADOTable1.next
> end
где проверяешь?
> Работает правильно но на определенной записи выдает ошибку.
так правильно или ошибку?
← →
Korvin (2004-05-26 15:55) [29]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 16:15) [30]
> но на какойто записи вылетает ошибка
на какой?
← →
Korvin (2004-05-26 16:20) [31]Здесь закономерности не наблюдается
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.06.20;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.037 c