|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Параметричекий запрос и записать запрос в 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
|
||||
|
||||
Я бы не ломал голову, а написал бы хранимку и ее вызывал.
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#3
|
||||
|
||||
Спасибо ))), дело в том, что написать хранимую процедуру и потом её вызвать, для меня будет не легче, т.к. в SQL запросах вообще не сильна...
|
#4
|
||||
|
||||
Желательно, чтобы вы написали какой сервер БД и какие компоненты собираетесь использовать, т к могут быть мелкие отличия.
Вот для ADO нашёл пример: http://forum.sources.ru/index.php?showtopic=71957 - Товарищ прапорщик!!! Остановите поезд!!! - Поезд СТОЙ! РАЗ! ДВА! |
#5
|
||||
|
||||
Более сложный пример для 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
|
||||
|
||||
Viajero, у меня СУБД - Ms SQL Serevr.
А пример для FIBPLUS это жесть, мне будет сложно разобраться) |
#7
|
||||
|
||||
Тут всё по ADO (см вложение)
и здесь (стр 47) Шкрыль А. Разработка клиент-серверных приложений в Delphi http://www.brain2life.com/delphi/457...henii-v-delphi - Товарищ прапорщик!!! Остановите поезд!!! - Поезд СТОЙ! РАЗ! ДВА! Последний раз редактировалось Viajero, 09.08.2011 в 09:50. |