Topic: Нужна помощь!!!

Добрый день, Дмитрий.

Подскажите пожалуйста,
как сделать чтобы при сравнении двух таблиц из таблицы temp поле cost2 присвоилось полю cost1 в таблице main.

Спасибо.

Re: Нужна помощь!!!

Приветствую,


Например так:

UPDATE main SET cost1=(SELECT temp.cost2 FROM temp WHERE temp.id=1) WHERE main.id=1

только не совсем ясно о каком сравнении  таблиц идет речь.

Dmitry.

Re: Нужна помощь!!!

Скрипт сравнения

procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
var
    Results: TDataSet;
    sNomer1: string;
begin
    SQLQuery('SELECT id, nomer1 FROM main', Results);
    while not Results.Eof do
    begin
        sNomer1 := Results.FieldByName('nomer1').AsString;
        if SQLExecute('SELECT COUNT(*) FROM temp WHERE nomer2='+sNomer1)<>'0' then
        begin
            SQLExecute ('UPDATE main SET [text]='+form1.Edit1.sqlValue+' WHERE id='+Results.FieldByName('id').AsString);
            Results.Next;
        end;
    end;
    Results.Free;

    Form1.TableGrid1.dbUpdate;
end;

Re: Нужна помощь!!!

lexa_ua
При первом взгляде ошибок не вижу, пожалуйста описывайте подробней, скрипт не работает? либо возникает ошибка?
также можете приложить проект.

Dmitry.

Re: Нужна помощь!!!

Извините, в первом сообщении не прикрепил файл.

Думаю теперь будет понятней.

Post's attachments

Attachment icon temp.rar 296.3 kb, 347 downloads since 2015-08-13 

Re: Нужна помощь!!!

Это работает отлично.
SQLExecute ('UPDATE main SET [text]='+form1.Edit1.sqlValue+' WHERE id='+Results.FieldByName('id').AsString);

Но мне нужно чтобы изменился еще одна колонка (main.cost1)
И её присвоились значения из (temp.cost2)


SQLExecute ('UPDATE main SET [cost2]='+form1.Edit1.sqlValue+' WHERE id='+Results.FieldByName('id').AsString);
Вместо    '+form1.Edit1.sqlValue+'  не пойму что нужно написать.

Еще раз спасибо.

Re: Нужна помощь!!!

попробуйте так

procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
var
    Results: TDataSet;
    sNomer1: string;
begin
    SQLQuery('SELECT id, nomer1 FROM main', Results);
    while not Results.Eof do
    begin
        sNomer1 := Results.FieldByName('nomer1').AsString;
        if SQLExecute('SELECT COUNT(*) FROM temp WHERE nomer2='+sNomer1)<>'0' then
        begin
            SQLExecute ('UPDATE main SET [text]='+form1.Edit1.sqlValue+' WHERE id='+Results.FieldByName('id').AsString);
            SQLExecute ('UPDATE main SET [cost1]=(SELECT temp.cost2 FROM temp WHERE nomer2='+sNomer1+') WHERE id='+Results.FieldByName('id').AsString);
        end;
        Results.Next;
    end;
    Results.Free;

    Form1.TableGrid1.dbUpdate;
end;
Dmitry.

Re: Нужна помощь!!!

Спасибо!!!