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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.02 c
3-1085639322
lightix
2004-05-27 10:28
2004.06.20
Изменить цвет строки в DBGrid


1-1086743848
Word2000
2004-06-09 05:17
2004.06.20
Работа с таблицей в Word


14-1086394830
Феликс
2004-06-05 04:20
2004.06.20
Как же это дело сформулировать?


4-1084551888
debater
2004-05-14 20:24
2004.06.20
Изменить вид системных кнопок (Maximize, Minimize...)


14-1086334044
WondeRu
2004-06-04 11:27
2004.06.20
Есть ли бесплатный вариант CORBA?