![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Вот запрос на добавление записи из одной таблицы в другую.
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. |