Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выбрать нужные поля, ADO Access 
V
    Опции темы
AlanFree
Дата 1.11.2006, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 22.9.2006

Репутация: нет
Всего: нет



У меня есть форма "Приходные накладные". На ней DBGrid, DataSource. Грид отображает данные таблицы Nak_Prih (Id_Tov, Name_Tov, Cena_Opt, Cena_Rozn, Kol_Vo, Sum_Opt, Sum_Rozn)
DbGrid.Columns[0].ButtonStyle:=cbsEllipsis; то есть когда шелкаешь на Id_Tov появляется кнопочка с тремя точками. В Событии этой кнопочке я показываю форму на ней тоде DBGrid, DataSource, ADOQuery
Этот грид отображает тоблицу Tov (Список товаром). Еще свойство dgRowSelect = True то есть в этом гриде строка выделяется вся целеком. Пользователь становится на какуюто запись в этом гриде нажимает "ок" и данные с активной строки должны попасть в изначально пустую таблицу Nak_Prih
Потом второе окно закрывается и пользователь вводит колличество товары в поле  Kol_Vo после этого в полях Sum_Opt, Sum_Rozn должна процитаться сумма.
Как это реализовать? Я так думаю что с помошью запроса...

Код

begin
  With FrmNakPrih.ADOQuery do
  begin
    SQL.Clear;
    SQL.Add('INSERT INTO Nak_Prih'+
    ' (Id_Tov, Name_Tov, Cena_Opt, Cena_Rozn)'+
    '  Values (Tov.Id_Tov, Tov.Name, Tov.Cena_Opt, Tov.Cena_Rozn)'+
    ' From Tov'+
    ' WHERE (Tov.Id_Tov)=:idtov');
    Parameters.ParseSQL(SQL.Text, true);
    Parameters.ParamByName('idtov').Value:=DbGrid.SelectedField.Value;
    Open;
  end;
end;


Но делфи выдает ошибку... Может я не правильно написал запрос? Или Вообще это все надо было по другому делать?
PM MAIL   Вверх
Rodman
Дата 1.11.2006, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 22
Всего: 122



а ты не можешь в VALUES передавать параметры тоже... возможно он не правильно выбирает... 

тогда и без FROM обойдешься... Я так понял что в гриде эти все данные показаны...
Код

INSERT INTO Nak_Prih (Id_Tov, Name_Tov, Cena_Opt, Cena_Rozn) Values (:PrmId_Tov, :PrmName, :PrmCena_Opt, :PrmCena_Rozn);


или 
Код

begin
   With FrmNakPrih.ADOQuery1 do
  begin
    SQL.Clear;
    SQL.Add('SELECT  Tov.Id_Tov, Tov.Name, Tov.Cena_Opt, Tov.Cena_Rozn From Tov WHERE (Tov.Id_Tov)=:idtov');
    Parameters.ParseSQL(SQL.Text, true);
    Parameters.ParamByName('idtov').Value:=DbGrid.SelectedField.Value;
    Open;
  end;


  With FrmNakPrih.ADOQuery do
  begin
    SQL.Clear;
    SQL.Add('INSERT INTO Nak_Prih (Id_Tov, Name_Tov, Cena_Opt, Cena_Rozn) Values (:PrmId_Tov, :PrmName, :PrmCena_Opt, :PrmCena_Rozn)');
    Parameters.ParseSQL(SQL.Text, true);
    Parameters.ParamByName('PrmId_Tov').Value:=FrmNakPrih.ADOQuery1.Fields.Fields[0].asstring;
    Parameters.ParamByName('PrmName').Value:=FrmNakPrih.ADOQuery1.Fields.Fields[1].asstring;
    Parameters.ParamByName('PrmCena_Opt').Value:=FrmNakPrih.ADOQuery1.Fields.Fields[2].asstring;
    Parameters.ParamByName('PrmCena_Rozn').Value:=FrmNakPrih.ADOQuery1.Fields.Fields[3].asstring;
    ExecSQL;
  end;
end;

PM MAIL WWW Skype GTalk YIM MSN   Вверх
Savek
Дата 1.11.2006, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 355
Регистрация: 10.4.2006
Где: Воронеж

Репутация: 7
Всего: 7



есть более короткий путь:
Код

INSERT INTO Nak_Prih SELECT Id_Tov, Name as Name_Tov, Cena_Opt, Cena_Rozn From Tov WHERE Id_Tov=:idtov

если наименования полей разные, то нужно их сопоставить при помощи "as"
PM MAIL   Вверх
AlanFree
Дата 1.11.2006, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 22.9.2006

Репутация: нет
Всего: нет



Rodman,  Спасибо! Работает! Только я не много переделал код. я не стал добовлять еще один ADOQuery на форму FrmNakPrih. На форме поиска товара (FrmSearch) у меня стоит  DBGrid, DataSource и  ADOTable. Код написал такой:
Код

procedure TFrmSearch.OKBtnClick(Sender: TObject);
begin
  With FrmNakPrih.ADOQuery do
  begin
  SQL.Clear;
  SQL.Add('INSERT INTO Nak_Prih (Id_Tov, Name, Cena_Opt, Cena_Rozn) Values (:PrmId_Tov, :PrmName, :PrmCena_Opt, :PrmCena_Rozn)');
  Parameters.ParseSQL(SQL.Text, true);
  Parameters.ParamByName('PrmId_Tov').Value:=ADOTable.Fields.Fields[0].AsString;
  Parameters.ParamByName('PrmName').Value:=ADOTable.Fields.Fields[1].AsString;
  Parameters.ParamByName('PrmCena_Opt').Value:=ADOTable.Fields.Fields[2].AsString;
  Parameters.ParamByName('PrmCena_Rozn').Value:=ADOTable.Fields.Fields[3].AsString;
  ExecSQL;
  SQL.Clear;
  SQL.Add('SELECT* From Nak_Prih');
  Open;
  end;
end;

end.

Работает вроде также...
Но мне еще нужно что бы после этого всего (когда пользователь добавит товар в накладную и введет Значение в поле Kol_Vo) поля  Sum_Opt, Sum_Rozn заполнились автоматически (Sum_Opt=Cena_Opt*Kol_Vo, Sum_Rozn=Cena_Rozn*Kol_Vo) но как это написать в запросе?
Я думаю это тоже должен быть запрос на добавление (INSERT INTO) но как в нем насать умножение?
PM MAIL   Вверх
Rodman
Дата 1.11.2006, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 22
Всего: 122



тем же способой....

Выбираешь нужное поле, домножаешь и потом или INSERT или UPDATE
PM MAIL WWW Skype GTalk YIM MSN   Вверх
AlanFree
Дата 2.11.2006, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 22.9.2006

Репутация: нет
Всего: нет



вопрос решен
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0599 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.