Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
6-1139003480
newprogrammer
2006-02-04 00:51
2006.06.11
сервер на базе winsock2


2-1148449496
pavel_guzhanov
2006-05-24 09:44
2006.06.11
FastReport 3 и Delphi7


3-1145419231
OlegOren
2006-04-19 08:00
2006.06.11
Переполнение памяти безобидной функцией.


15-1146018946
Не химик
2006-04-26 06:35
2006.06.11
Какое расстояние между атомами железа?


15-1147950751
Kolan
2006-05-18 15:12
2006.06.11
Вы заметили как быстро изменилось отношение к вете "Начинающим"





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский