Поиск:

Ответ в темуСоздание новой темы Создание опроса
> FibPlus не срабатывает Query.Close, [CodeGear, FibPlus] 
:(
    Опции темы
Urvin
Дата 1.4.2008, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 1.6.2006

Репутация: нет
Всего: нет



На форме присутствует fibDatabase, fibTransaction, fibQuery fibQ и еще один fibQuery fibQ2.
Первый из Query используется для выполнения различных запросов по теме программы,

Второй выполняет вспомогательную роль - по сути узнает, можно ли читать или записывать определенные записи.
Весь его код, имеющий с ним дело, вынесен в отдельный модуль. Там всего три функции)

При работе иногда (sic) вывешивается сообщение "Can't change sql text because frmMain.fibQ2 dataset open"
При этом я уверен, что после каждого открытия элемента (ExecQuery) я его закрываю (Close).

Разве может он так проскакивать?  smile 
PM MAIL   Вверх
lukas
Дата 1.4.2008, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: нет
Всего: 15



вообще как бы так... "правильнее."

не закрывать после работы... а закрывать его перед работой... тогда таких ошибок не будет...

Код

Query.Close;
Query.SQL.Text = ...
Query.Open;


Добавлено через 2 минуты и 11 секунд
Urvin, 

кстати... ExecQuery используют обычно для обновления, добавления информации.. а не для ее получения.. 


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
Urvin
Дата 1.4.2008, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 1.6.2006

Репутация: нет
Всего: нет



lukas, в справке fibplus  было написано чтобы использовать ExecQuery.
Сейчас напишу закрытие перед изменением. попробуем)

кста, почему правильнее именно перед?

Это сообщение отредактировал(а) Urvin - 1.4.2008, 19:24
PM MAIL   Вверх
Akella
Дата 1.4.2008, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(Urvin @  1.4.2008,  19:21 Найти цитируемый пост)
кста, почему правильнее именно перед?

я делаю и после и перед, а перед для того, чтобы наверняка, так сказать
PM MAIL   Вверх
Sanchezzz
  Дата 1.4.2008, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: нет
Всего: 60



чтобы избежать глюков ну это как бы и предостережение закрыть придушивший запрос и начать новый. делаем сперва close потом SQL запрос далее open lukas все показал.


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Urvin
Дата 1.4.2008, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 1.6.2006

Репутация: нет
Всего: нет



метода Open у FIB+ нет.

а как быть если в теле одной функции сначала чтение данных, а потом запись?

Код

procedure QQ;
begin
  fibQ2.Close;

  fibQ2.SQL.Clear;
  fibQ2.Params.ClearValues;
  fibQ2.SQL.Add('SELECT * FROM mytable');
  fibQ2.ExecQuery;
  fibQ2.Close;

  fibQ2.SQL.Clear;
  fibQ2.Params.ClearValues;
  fibQ2.SQL.Add('INSERT INTO mytable(mtValue) VALUES (:sqone, 0');
  fibQ2.Params[0].AsInteger:=111;
  fibQ2.ExecQuery;
end;

PM MAIL   Вверх
Akella
Дата 1.4.2008, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



вот это можно заменить 
Код

  fibQ2.SQL.Clear;
  fibQ2.Params.ClearValues;
  fibQ2.SQL.Add('INSERT INTO mytable(mtValue) VALUES (:sqone, 0'); тут помоему скобки не хватает
  fibQ2.Params[0].AsInteger:=111;
  fibQ2.ExecQuery;


на
Код

sqone := 111;
fibDataBase.execute('INSERT INTO mytable(mtValue) VALUES (' + IntToStr(sqone) + ')');


Добавлено через 3 минуты и 25 секунд
Код

  fibQ2.SQL.Add('SELECT * FROM mytable');
  fibQ2.ExecQuery;
  fibQ2.Close;


а почему не

Код

  fibQ2.SQL.Add('SELECT * FROM mytable');
  fibQ2.open;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  fibQ2.Close;


Добавлено через 5 минут и 14 секунд
Код

  fibQ2.SQL.Clear;
  fibQ2.Params.ClearValues;
  fibQ2.SQL.Add('SELECT * FROM mytable');
  fibQ2.ExecQuery;
  fibQ2.Close;


а зачем такое, если не секрет?
PM MAIL   Вверх
lukas
Дата 1.4.2008, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: нет
Всего: 15



Код

(:sqone, 0'); тут помоему скобки не хватает


а может это смайлик...  smile 

Да и совет... совсем не обязательно писать так:

Код

fibQ2.SQL.Clear;
  fibQ2.Params.ClearValues;
  fibQ2.SQL.Add('SELECT * FROM mytable');
  fibQ2.ExecQuery;
  fibQ2.Close;


думаю так короче...

Код

  fibQ2.Params.ClearValues;
  fibQ2.SQL.Text := 'SELECT * FROM mytable';
  fibQ2.ExecQuery;
  fibQ2.Close;





--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
Esperito
Дата 2.4.2008, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 2.9.2007

Репутация: 2
Всего: 3



Странно... А в какой транзакции выполняются запросы из fibQ2?
PM MAIL   Вверх
Zmitro
Дата 4.4.2008, 07:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 19.3.2008

Репутация: 1
Всего: 1



Цитата(Esperito @ 2.4.2008,  19:57)
Странно... А в какой транзакции выполняются запросы из fibQ2?

в той, которая привязана к fibDatabase.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0563 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.