Форум: "Базы";
Текущий архив: 2006.06.11;
Скачать: [xml.tar.bz2];
ВнизЗапись не удаляется Найти похожие ветки
← →
DevilDevil © (2006-04-15 22:31) [0]При удалении записи средствами SQL, она действительно удаляется из Грида. Однако при следующем запуске проги, запись снова появляется. Почему?
// формирую SQL запрос в свойстве DeleteSQL
...
Query1.Delete;
// пробовал с Query1.ApplyUpdates;
← →
Johnmen © (2006-04-15 23:22) [1]>формирую SQL запрос в свойстве DeleteSQL
Как он выглядит?
>Однако при следующем запуске проги, запись снова появляется. Почему?
Потому, что транзакция была откачена. Видимо, неявно...
> пробовал с Query1.ApplyUpdates;
Это то здесь причём???
← →
DevilDevil © (2006-04-16 01:22) [2]> Johnmen © (15.04.06 23:22) [1]
Нет никакого флуда, есть задача, её надо решать
Вообще, я понял из-за чего не удалялось. Я задал в одном из свойств транзакцию. Использовал транзакцию как следует, всё получилось
Сейчас другой вопрос. В базе есть Блоб поля. Если обычные строковые и числовые поля я без особых проблем создам/изменю средствами SQL, то с этим трудности. Объясните, пожалуйста, как. Вообще, я раньше решал эту задачу с помощью компонента-таблицы. Начальству понадобились транзакции и из Query. А я в базах далеко не опытен. Поэтому, собственно, и прошу помощи. Да! При Query.Insert не обновляются поля Грида. Как решить?
← →
Johnmen © (2006-04-16 01:29) [3]По блобам - читать TBlobStream и т.п. и т.д.
> При Query.Insert не обновляются поля Грида.
Грид показывает то, что в наборе данных есть. НД обновился? Нет. Вот и ответ...
← →
DevilDevil © (2006-04-16 01:56) [4]> Johnmen © (16.04.06 01:29) [3]
Да, ты очень помог
Я не спрашиваю "что", я спрашиваю "как". Как такие профессионалы как ты справляются с обновлением, неужели бональной выборкой?
← →
Johnmen © (2006-04-16 02:22) [5]Такие профессионалы, как я, справляются с обновлением по-разному.
Это зависит от исходной постановки и конечной реализации задачи...
Какая постановка у тебя, лично мне не ясно...
← →
DevilDevil © (2006-04-16 14:06) [6]Ну хорошо, обновляю так:
Query.Post;
Query.Close;
Query.ExecSQL;
Сейчас другая проблема. Необходимо вставить новую запись. Заполняю InsertSQL:
INSERT INTO Licenses (Company, MachineID, History)
VALUES (:Company, 1234567, :History)
Проблема с параметрами. Т.е. я создаю и настраиваю параметры Company, MachineID, ...
Однако эти параметры не заносятся в таблицу, заносятся только явно указанные. В этом примере - MachineID. Лелаю так:
with Query do begin
//Prepare;
ParamByName("Company").AsString := Company;
//ParamByName("MachineID").AsInteger := MachineID;
ParamByName("History").Assign(History);
Insert;
Post;
Close;
ExecSQL;// обновляю данные в гриде
end;
Не может же быть так, что параметры не действуют на InsertSQL
P.S. Я использую компоненты IB Objects
← →
Виталий Панасенко (2006-04-17 09:09) [7]А если так :
with Query do begin
//Prepare;
Insert;
ParamByName("Company").AsString := Company;
//ParamByName("MachineID").AsInteger := MachineID;
ParamByName("History").Assign(History);
Post;
{Close;
ExecSQL;// обновляю данные в гриде}
end;
← →
Виталий Панасенко (2006-04-17 09:11) [8]Это я с утра "гоню"
А если так :
with Query do begin
ParamByName("Company").AsString := Company;
ParamByName("MachineID").AsInteger := MachineID;
ParamByName("History").Assign(History);
ExecSQL;
end;
← →
K_VAL (2006-04-17 10:31) [9]var BM1:TMemoryStream;
begin
IBQuery2.Close;
IBQuery2.SQL.Clear;
IBQuery2.SQL.Add("Select * from KVARTIRA_S (:kod)");
IBQuery2.Params[0].AsInteger := IBStoredProc1.ParambyName("kod_kvar").AsInteger;
IBQuery2.Open;
try
finally
IBTransaction2.Active := true; // insert
end;
//
BM1 := TMemoryStream.Create;
Image2.Picture.Graphic.SaveToStream(BM1);
// компонент Image2 - читать в поток
IBQuery2.Edit;
try
IBQuery2PLAN_KV.LoadFromStream(BM1);
// поле IBQuery2[PLAN_KV] - заполняется из потока
finally
BM1.Free;
end;
IBUpdateSQL2.SetParams(ukModify);
IBUpdateSQL2.Apply(ukModify);
try
finally
IBTransaction2.Active := false;
IBQuery2.Close;
IBQuery2.UnPrepare;
end;
// insert - update
← →
DevilDevil © (2006-04-17 10:33) [10]
> Виталий Панасенко (17.04.06 09:11) [8]
В IB Object есть несколько SQL свойств: InsertSQL, EditSQL, DeleteSQL и SQL. Соответственно, первый запрос выпольняется при Insert, второй - вроде при Update или Edit, третий - при Delete, последний - при ExecSQL. По этому методу у меня вся таблица отображается снова
← →
Johnmen © (2006-04-17 10:34) [11]
> K_VAL (17.04.06 10:31) [9]
Что за чудо с try-finally?
← →
Виталий Панасенко (2006-04-17 11:31) [12]
> DevilDevil © (17.04.06 10:33) [10]
>
> > Виталий Панасенко (17.04.06 09:11) [8]
>
>
> В IB Object есть несколько SQL свойств: InsertSQL, EditSQL,
> DeleteSQL и SQL. Соответственно, первый запрос выпольняется
> при Insert, второй - вроде при Update или Edit, третий -
> при Delete, последний - при ExecSQL. По этому методу у
> меня вся таблица отображается снова
Если все это аналогично таким же св-вам в FIBPl\us, то гонишь уже ты..
Код должен выглядеть примерно так:
Добавление
Query.Append;
Query.FieldByName("COMPANY").AsString := Company;
Query.FieldByName("MachineID").AsInteger := MachineID;
Query.FieldByName("History").Assign(History);
Query.Post;
Для удаления:
Query.Delete;
И не завбыть подтвердить транзакцию
← →
DevilDevil © (2006-04-17 23:02) [13]> Виталий Панасенко (17.04.06 13:07) [6]
Если все это аналогично таким же св-вам в FIBPl\us, то гонишь уже ты..
Код должен выглядеть примерно так:
Добавление
Query.Append;
Query.FieldByName("COMPANY").AsString := Company;
Query.FieldByName("MachineID").AsInteger := MachineID;
Query.FieldByName("History").Assign(History);
Query.Post;
Для удаления:
Query.Delete;
И не завбыть подтвердить транзакцию
Виталий, ты в одной ветке грубишь, во второй помогаешь. Но, всё равно, спасибо! Сделал как ты сказал, всё сработало без проблем. Однако для удаления вроде всё таки надо заполнять DeleteSQL. А как быть с Edit? Там же надо указывать, какую запись изменяешь. У меня будет ключ ID : integer
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.06.11;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.011 c