powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Zeos свойства запроса
16 сообщений из 16, страница 1 из 1
Zeos свойства запроса
    #39709291
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пишу демку на делфи + Zeos,одна из задач - если запрос селективный - вывести данные в грид,если нет - выполнить и вывести подтверждение.

проблема в том,что если я пытаюсь сделать query.open на запросе insert/update/delete получаю "Can not open a Resultset". Как можно проверить запрос перед выполнением, чтобы вызывать нужный метод?
...
Рейтинг: 0 / 0
Zeos свойства запроса
    #39709296
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemar,

Посмотреть на то, с чего текст запроса начинается. СУБД какая?
...
Рейтинг: 0 / 0
Zeos свойства запроса
    #39709300
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemarпроблема в том,что если я пытаюсь сделать query.open на запросе insert/update/delete получаю "Can not open a Resultset".
Кто мешает "выполнить и вывести подтверждение"?

GallemarКак можно проверить запрос перед выполнением, чтобы вызывать нужный метод?
Зависит от. В некоторых DAC-ах были соответствующие фичи. Или можно просто проверить, что первая лексема либо SELECT, либо WITH.
...
Рейтинг: 0 / 0
Zeos свойства запроса
    #39709303
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMasterGallemar,

Посмотреть на то, с чего текст запроса начинается. СУБД какая?
Firebird
...
Рейтинг: 0 / 0
Zeos свойства запроса
    #39709304
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemar,

Можно примерно так сделать:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
type
  TIB_SQLTextType=(sttSelect,sttExecute,sttExecuteBlock,sttSQL);

function GetSQLTextType(SQLText:string):TIB_SQLTextType;
var S:String;
begin
  S:=Trim(SQLText);  // тут хорошо бы еще переводы каретки в пробелы перевести и удрать задвоенные пробелы
  if UpperCase(Copy(S,1,13))='EXECUTE BLOCK' then
     Result:=sttExecuteBlock
  else
  if UpperCase(Copy(S,1,9))='EXECUTE ' then
     Result:=sttExecute
  else
  if UpperCase(Copy(S,1,7))='SELECT ' then
     Result:=sttSelect
  else
     Result:=sttSQL;    // INSERT,UPDATE,DELETE и т.д.
end;
...
Рейтинг: 0 / 0
Zeos свойства запроса
    #39709309
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerGallemarпроблема в том,что если я пытаюсь сделать query.open на запросе insert/update/delete получаю "Can not open a Resultset".
Кто мешает "выполнить и вывести подтверждение"?
А как? Zeos не дает использовать open с неселективными запросами.
softwarerGallemarКак можно проверить запрос перед выполнением, чтобы вызывать нужный метод?
Зависит от. В некоторых DAC-ах были соответствующие фичи.
В Zeos такое не нашел.
...
Рейтинг: 0 / 0
Zeos свойства запроса
    #39709311
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GallemarDarkMasterПосмотреть на то, с чего текст запроса начинается. СУБД какая?
Firebird

Угу, тогда еще учитывай что DataSet может из EXECUTE BLOCK приехать, не только из SELECT... А может и не приехать - для EXECUTE BLOCK нужно еще проверять наличие SUSPEND внутри.
...
Рейтинг: 0 / 0
Zeos свойства запроса
    #39709313
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GallemarА как? Zeos не дает использовать open с неселективными запросами.
Что значит "не даёт"?
...
Рейтинг: 0 / 0
Zeos свойства запроса
    #39709317
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerGallemarА как? Zeos не дает использовать open с неселективными запросами.
Что значит "не даёт"?

Там кажется разбивка по методам : Open() и Exec()
...
Рейтинг: 0 / 0
Zeos свойства запроса
    #39709318
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerGallemarА как? Zeos не дает использовать open с неселективными запросами.
Что значит "не даёт"?
я же выше писал - если используешь запрос insert/update/delete c open получаешь "Can not open a Resultset"
...
Рейтинг: 0 / 0
Zeos свойства запроса
    #39709321
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemarя же выше писал - если используешь запрос insert/update/delete c open получаешь "Can not open a Resultset"
А я выше спросил: кто мешает, получив это, соответствующим образом отреагировать?
...
Рейтинг: 0 / 0
Zeos свойства запроса
    #39709328
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemarя же выше писал - если используешь запрос insert/update/delete c open получаешьА какой ты датасет хочешь получить в ответ? Юзай Exec как учат
...
Рейтинг: 0 / 0
Zeos свойства запроса
    #39709332
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerGallemarя же выше писал - если используешь запрос insert/update/delete c open получаешь "Can not open a Resultset"
А я выше спросил: кто мешает, получив это, соответствующим образом отреагировать?
Не видел. Т.е. попытаться выполнить Open, поймать e.message и выполнить exec()?
...
Рейтинг: 0 / 0
Zeos свойства запроса
    #39709335
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GallemarНе видел. Т.е. попытаться выполнить Open, поймать e.message и выполнить exec()?
Например. Не буду утверждать, что этот метод безусловно лучший, но по сравнению с другими методами он обладает двумя важными достоинствами: короткий и надёжный.
...
Рейтинг: 0 / 0
Zeos свойства запроса
    #39709341
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что мешало открыть исходники и найти такой код
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
procedure TZAbstractRODataset.InternalOpen;
var
  ColumnList: TObjectList;
begin
    ...............
    { Creates an SQL statement and resultsets }
    ResultSet := CreateResultSet(FSQL.Statements[0].SQL, -1);
    if not Assigned(ResultSet) then
    begin
      if not (doSmartOpen in FOptions) then
        raise Exception.Create(SCanNotOpenResultSet)
      else Exit;
    end;
   ................

?

А после этого подумать и написать так
Код: pascal
1.
2.
3.
4.
ZDataSet1.Options := ZDataSet1.Options + [doSmartOpen];
ZDataSet1.Open;
if ZDataSet1.ResultSet = nil then
  SHowMessage('Statement executed');


P.S. Флаг doSmartOpen можно выставить в дизайнтайме
...
Рейтинг: 0 / 0
Zeos свойства запроса
    #39709366
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_, спасибо!!!
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Zeos свойства запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]