Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.08.2011, 20:00
Аватар для Bloo
Bloo Bloo вне форума
Новичок
 
Регистрация: 04.11.2010
Сообщения: 54
Репутация: 10
По умолчанию Параметричекий запрос и записать запрос в Delphi

Вот запрос на добавление записи из одной таблицы в другую.
2 таблицы tovar и prihod. Поля: [Наименование], [Цена], [Количество].
Данные добавляются из prihod в tovar.
Если добавляем запись из prihod, где поля [Наименование] и [Цена] уже есть в tovar, значит меняется только [Количество], т.е. плюсуется.
Код:
DECLARE @Col int,
        @Cena money,
        @Naim nvarchar(50)
        
SET @Col=:koli  -- с этими строками проблема
SET @Cena=:cena -- с этими строками проблема
SET @Naim=:naim -- с этими строками проблема

INSERT INTO prihod ([Наименование],[Цена],[Количество]) VALUES (@Naim,@Cena,@Col)
IF EXISTS(SELECT * FROM tovar WHERE [Наименование]=@Naim AND [Цена]=@Cena)
  UPDATE tovar SET [Количество]=[Количество]+@Col WHERE [Наименование]=@Naim AND [Цена]=@Cena
ELSE
  INSERT INTO tovar ([Наименование],[Цена],[Количество]) VALUES (@Naim,@Cena,@Col)
Проблема вот в чём:
Мне нужно этот запрос написать в Delphi, чтобы он срабатывал при нажатии кнопки.
Таблицы заполняются в интерфейсе на Form в DBGrid, т.е.
данные сразу забиваются в таблицу.
И нужно как-то сделать параметрический запрос,
эти строки вот:
Код:
SET @Col=:koli
SET @Cena=:cena
SET @Naim=:naim 
Не знаю как правильно записать. Данные, которые будут записываться в таблицу, могут быть какими угодно и надо, чтобы в запросе это было записано в виде параметров, которые будут подставляться из таблицы.

Надеюсь, понятно объяснила, а то всё слишком запутанно...))))
Ответить с цитированием
  #2  
Старый 08.08.2011, 10:26
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Я бы не ломал голову, а написал бы хранимку и ее вызывал.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #3  
Старый 08.08.2011, 11:20
Аватар для Bloo
Bloo Bloo вне форума
Новичок
 
Регистрация: 04.11.2010
Сообщения: 54
Репутация: 10
По умолчанию

Спасибо ))), дело в том, что написать хранимую процедуру и потом её вызвать, для меня будет не легче, т.к. в SQL запросах вообще не сильна...
Ответить с цитированием
  #4  
Старый 08.08.2011, 13:58
Аватар для Viajero
Viajero Viajero вне форума
Активный
 
Регистрация: 14.06.2011
Адрес: РБ
Сообщения: 214
Версия Delphi: Delphi 7 FB 2.5
Репутация: 5849
По умолчанию

Желательно, чтобы вы написали какой сервер БД и какие компоненты собираетесь использовать, т к могут быть мелкие отличия.
Вот для ADO нашёл пример:
http://forum.sources.ru/index.php?showtopic=71957
__________________
- Товарищ прапорщик!!! Остановите поезд!!! - Поезд СТОЙ! РАЗ! ДВА!
Ответить с цитированием
  #5  
Старый 08.08.2011, 14:09
Аватар для Viajero
Viajero Viajero вне форума
Активный
 
Регистрация: 14.06.2011
Адрес: РБ
Сообщения: 214
Версия Delphi: Delphi 7 FB 2.5
Репутация: 5849
По умолчанию

Более сложный пример для FIBPLUS
Код:
procedure OItemFB.StartWrite;
var
  locFieldCount, cRow,cCol:Integer;
  slFields,slParValues,slItem,sss,sssp:string;
begin
  wSOData.fqWrite.Transaction:=wSOData.ffTAWrite;
  wSOData.ffTAWrite.StartTransaction;

  locFieldCount:= CheckedFields.Count;
  for  cCol:=1  to locFieldCount do begin
     sssp:=CheckedFields.Strings[cCol-1];
    slFields:=slFields+sssp+', ';
    slParValues:=slParValues + ':' + sssp + ', ';
  end;

  slFields:=slFields+pIdField+', '+pItemField;
  slParValues:=slParValues+':'+ pIdField+', :'+pItemField;
  wSOData.fqWrite.SQL.Text:= 'insert into ' + pTablename + ' (' + slFields
   + ') values (' + slParValues + ')';
  {insert into CLASSIFICATION () values ()}

  pItemList.First;
  for cRow := 0 to pItemList.Count do begin
    wSOData.fqWrite.ParamByName(pIdField).AsInt64:=pItemList.ItemId;
    slItem:=pItemList.Item;
    wSOData.fqWrite.ParamByName(pItemField).AsString:=slItem;

    for  cCol:=1  to locFieldCount do begin
      sssp:=CheckedFields.Strings[cCol-1];
      sss:=pItemList.Data[cCol-1];
      wSOData.fqWrite.ParamByName(sssp).AsString:=sss; //stQuote+sss+stQuote;
    end;
          sss:=wSOData.fqWrite.ReadySQLText(false); {отладка}
          ii:=wSOData.fqWrite.ParamCount;{отладка}
          stt:=    wSOData.fqWrite.ParamValue(pItemField);{отладка}
                      //wSOData.fqWrite.Prepare;
  try
  wSOData.fqWrite.ExecQuery;
  except
  wSOData.ffTAWrite.Rollback;

  pError:=38; pErrorText:='Ошибка в строке  ' +  slItem; Exit;
  end;
  pItemList.Next;
  If pItemList.Eof=true then break;
  end;
  wSOData.ffTAWrite.Commit;
end;
__________________
- Товарищ прапорщик!!! Остановите поезд!!! - Поезд СТОЙ! РАЗ! ДВА!

Последний раз редактировалось Viajero, 08.08.2011 в 19:23.
Ответить с цитированием
  #6  
Старый 08.08.2011, 19:14
Аватар для Bloo
Bloo Bloo вне форума
Новичок
 
Регистрация: 04.11.2010
Сообщения: 54
Репутация: 10
По умолчанию

Viajero, у меня СУБД - Ms SQL Serevr.
А пример для FIBPLUS это жесть, мне будет сложно разобраться)
Ответить с цитированием
  #7  
Старый 09.08.2011, 09:35
Аватар для Viajero
Viajero Viajero вне форума
Активный
 
Регистрация: 14.06.2011
Адрес: РБ
Сообщения: 214
Версия Delphi: Delphi 7 FB 2.5
Репутация: 5849
По умолчанию

Тут всё по ADO (см вложение)
и здесь (стр 47)
Шкрыль А. Разработка клиент-серверных приложений в Delphi
http://www.brain2life.com/delphi/457...henii-v-delphi
Вложения
Тип файла: zip d5_ado.zip (218.1 Кбайт, 3 просмотров)
__________________
- Товарищ прапорщик!!! Остановите поезд!!! - Поезд СТОЙ! РАЗ! ДВА!

Последний раз редактировалось Viajero, 09.08.2011 в 09:50.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:24.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter