Есть таблица
Код: Выделить всё
SET SQL DIALECT 3;
SET NAMES WIN1251;
CREATE TABLE GOODS (
ID CHAR(13) NOT NULL,
NAME VARCHAR(50),
VLOG INTEGER,
COST DOUBLE PRECISION DEFAULT 0 NOT NULL
);
ALTER TABLE GOODS ADD CONSTRAINT PK_GOODS PRIMARY KEY (ID);
Есть порцедура
CREATE PROCEDURE INSTAL_PRICE (
ID_GOOD CHAR(13),
NEW_COST DOUBLE PRECISION,
D_PRICE DATE)
AS
DECLARE VARIABLE S_COST DOUBLE PRECISION;
begin
for select goods.cost from goods where goods.id = :id_good
into :s_cost
do begin
if (s_cost <> new_cost) then
begin
update goods set cost = :new_cost where (goods.id = :id_good);
end
exit;
end
Соединение = СоздатьОбъект("ADODB.Connection");
Cоединение.ConnectionString = "driver={Firebird/InterBase(r) driver};server=C:\Program Files\Firebird\Firebird_1_5\bin\fbserver.exe;uid=SYSDBA;pwd=masterkey;database=D:\FB_Base\BOOK_PRICE.FDB;";
Соединение.Open(Соединение.ConnectionString);
Комманда = СоздатьОбъект("ADODB.Command");
Комманда.ActiveConnection = Соединение;
Выборка документов и установка последней цены в таблице GOODS производится с помощью ХП
Комманда.CommandText = "INSERT INTO goods VALUES ('"+ИдОбТов+"'"+","+"'"+Лев(Док.Номенклатура.Наименование, 50)+"',"+Док.Номенклатура.ОсновнаяЕдиница.Коэффициент+",0"+",0"+")";
Комманда.Execute();
Если такой товар есть то FB сам проконтролирует наличие записи по ID (PK)
Комманда.CommandText = "EXECUTE PROCEDURE INSTAL_PRICE('"+ИдОбТов+"'"+","+"'"+Док.Цена+"'"+","+"'"+Док.ДатаДок+"'"+")";
Комманда.Execute();
Обновление таблицы происходит, но почему-то не всех позиций, некоторые остаются с нулевой ценой. Подключение к серверу из 1с всего одно. В чем может быть проблема.