Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.062 c
14-1086099699
YurikGL
2004-06-01 18:21
2004.06.20
Где бы про делфи почитать


3-1085416122
pok
2004-05-24 20:28
2004.06.20
Как узнать имя поля...


3-1085732139
KADAN
2004-05-28 12:15
2004.06.20
PASSWORD() в MSSQL?


14-1086109285
VeTaL
2004-06-01 21:01
2004.06.20
Удаление файла


1-1086594204
Прямой
2004-06-07 11:43
2004.06.20
Вопрос про TThread





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский