SELECT, INSERT, UPDATE, BLOB, MSEIDE, query

Dec 09, 2011 16:24

Сегодня мы поговорим об методах Insert, Edit, Open, Post, ApplyUpdates компонента tmsesqlquery.
tmsesqlquery предоставляет возможность редактировать с помощью вышеприведенных методов таблицу в базе данных написав лишь один SQL скрипт для запроса собственно таблицы из базы данных.
Итак, действующие лица:
  • con:tmseibconnection
  • writetran:tmsesqltransaction
  • queryW:tmsesqlquery
  • Таблица CONTESTS (CCID INTEGER NOT NULL, NAME CHAR (30), ABOUT BLOB SUB_TYPE 0 SEGMENT SIZE 4096);
writetran:=tmsesqltransaction.Create (nil);
writetran.Database:=con;
queryW:=tmsesqlquery.Create (nil);
queryW.Database:=con;
queryW.Transaction:=writetran;
queryW.SQL.SetText ('SELECT * FROM CONTESTS WHERE CCID = :pCCID');(*Оператор запроса данных из таблицы contests для редактирования. Операторы для обновления полей, вставки и удаления записей в query генерируются автоматически*)
queryW.params.ParamByName ('pCCID').AsInteger:=1;(*Присваиваем параметру значение*)
queryW.Open;(*Открываем query*)
queryW.Edit;(*Переводим query в режим редактирования записей*)
queryW.fields.FieldByName ('NAME').AsString:='OLOLO';
queryW.Post;(*Подтверждаем редактирование*)
queryW.ApplyUpdates;(*Отправляем отредактированные данные в базу данных*)
queryW.Close;(*Закрываем query*)
writetran.commit;(*Подтверждаем транзакцию. Данные записаны.*)

queryW.SQL.SetText ('SELECT * FROM CONTESTS WHERE CCID = :pCCID');
queryW.params.ParamByName ('pCCID').AsInteger:=1;
queryW.Open;
queryW.Insert;(*Переводим query в режим INSERT. Все дальнейшие действия с запрошенными полями - действия с полями записи, которая будет вставлена в выбранную скриптом таблицу *)
queryW.fields.FieldByName ('CCID').AsInteger:=2;(*Задаем значение поля CCID*)
queryW.fields.FieldByName ('ABOUT').AsString:='OLOLO2';(*Задаем значение поля NAME*)
queryW.Post;
queryW.ApplyUpdates;
queryW.Close;
writetran.commit;(*Подтверждаем транзакцию, данные записаны*)

queryW.SQL.SetText ('SELECT * FROM CONTESTS WHERE CCID = :pCCID');
queryW.params.ParamByName ('pCCID').AsInteger:=1;
queryW.Open;(*А это просто запрос на чтение*)
for i:=1 to queryW.RecordCount do //RecordCount - количество полученных записей
begin
queryW.RecNo:=j; // RecNo - номер записи, с которой ми работаем через "fields"
ID[i]:=queryW.fields.FieldByName ('CCID').AsInteger;
end;
queryW.Close;
writetran.commit;

Таким образом сверху приведены три откомментированных примера редактирования, вставки и чтения записей из таблицы в базе данных без использования SQL операторов UPDATE, INSERT, методов CreateBlobStream и тому подобного. Все есть в query. Просто и удобно. Blob поля полностью поддерживаются. Важно не забывать всегда из таблицы запрашивать ключ, которому мы ищем данные, иначе mseide не сможет сгенерировать операторы для редактирования, удаления и вставки записей.

Список упомянутых методов класса tmsesqlquery:
  • open - "открывает" query. Посылает первый запрос к СУБД и получает данные.
  • edit - перевод query в режим редактирования записей.
  • insert - перевод query в режим вставки записей.
  • post - подтверждение изменений для query.
  • applyUpdates - загрузка подтвержденных изменений в базу данных, для их окончательного сохранения надо сделать commit транзакции в рамках которой работал query.
  • close - заканчивает работу query.
  • fields.FieldByName (s:string).AsType - доступ к полю s текущей записи с номером query.RecNo как к переменной с типом Type.
  • params.ParamByName (s:string).AsType - доступ к параметру s как к переменной с типом Type.
  • SQL.SetText (s:string) - устанавливает s как оператор, который будет выполнен СУБД после отправки первого запроса методом open. Можно еще делать так: SQL:=SELTASK где SELTASK:tsqlstringlist;

методы query, программирование, mseide

Previous post Next post
Up